Stream audio from one device to another - c#

I am looking to create a project where user A will stream audio and user B will receive it, I am not looking to upload the audio into a WebServer and then Download it. I have done quite a lot of research but I didn't come to a final design. I am asking for guides and not for you to design my application, where am I supposed to start with such a project?
I have a design in mind but not sure how feasible is it with IOS xamarin.
I would like to know your thoughts on this design.
User A will choose audio file from their playlist
Then I want to decode that audio into bits (Packets) and then send packets over to User B
User B will receive these packets and then encode them back to be an audio file
I am looking to achieve this using HTTP protocol. This is what I was able to get to. I am welcoming any ideas or guides as to where I should start with such a project.
P.S. I don't mind switching to swift/objective-C if it's not possible with Xamarin.

You can copy the voice transferring concept from the Internet calling concept. You will get the idea regarding how the voice is being transferred along with encryption and decryption of the packets.
You can get a little brief from here and here.
Once you can get the hang of it, you can easily switch with the audio files which you wants to play.

Related

c#/.NET - Recording the current audio being played

Is there any way in c#/.net of recording the current audio being played? I've searched a lot on the internet but the only result I could find is recording using a microphone.
I dont want to record using microphone input, I want to record what is being played on the computer when I click a record button.
Thanks
You have two options here:
Hardware loopback device - virtual "Stereo Mix" audio device, which acts as a regular audio capture device and in the same time produces a copy of mixed audio feed played through default audio output device of the system. Since such device shows up as real audio input device, you can use standard APIs, libraries and even exitsing applications to record from such device.
Programmatic access to a virtual loopback device as if it was microphone-like device. API on the background will duplicate played audio content and make it available for reading back as it plays. The good news is that you can access the mixed audio feed for device of your interest.
Both options are described in detail in Loopback Recording article on MSDN and available via standard audio APIs, specifically WASAPI.
For C# development you are likely to use a wrapper like NAudio.
For option 1 you will find quite a few questions on StackOverflow, and for the other option the keyword is AUDCLNT_STREAMFLAGS_LOOPBACK.
The only way to be able to receive data from another application is if the developer provides an access point, normally through some SDK, API, or other means. Without this, there is no way for your application code to receive the bytes from the other application.
The reason a microphone works is because it is receiving the sound output bytes from the application and sending those soundwave bytes back into your PC to render and output the sound. Since you have access to these bytes from the microphone you are able to capture the sound.
See if there is an API or an SDK from the developer of the application you are trying to get sound from.

Azure Media Services Modify stream (add images / text like twitch)

I'm in the process of developing a Twitch-like application that supports Live Streaming. I would like to use Azure Media Services for this.
Looking at the REST Api of Azure Media Services it really looks like it can handle almost all the stuff that I require, for example playing advertisements. There is just one thing I can't seem to find and I really hope someone is able to guide me into the right direction.
How am I able to 'modify' the stream in such a way that it will show images / texts on the live video stream? For example as a donation comes in at Twitch the users are presented with a question on the video for the streamer.
Thanks!
When your Channel has Live Encoding enabled, you have a component in your pipeline that is processing video, and can manipulate it. You can signal for the Channel to insert slates and/or advertisements into the outgoing adaptive bitrate stream. Slates are still images that you can use to cover up the input live feed in certain cases (for example during a commercial break). Advertising signals, are time-synchronized signals you embed into the outgoing stream to tell the video player to take special action – such as to switch to an advertisement at the appropriate time.

Multi channel functionality to record mp3 file in c#

I want to have a functionality of recording a conversation between two person. I want to do it in a such a way that the outgoing sound be on 1 channel and incoming sound on another channel. So finally i get a stereo file(mp3) file having 2 channels.
For now I am looking to achieve this is windows form and then eventually target xamarin.forms(android, iOS, windows).
Any way to achieve this in c#? Or any plugin available for this?
FFMPEG is a good tool for video or audio manipulation. I've only used it with video, but looks like it can encode two audio channels. Have a look at
this, hope it is helpful

Record video from camcorder in C#

I need to be able to record video from an external camera in a C# application.
Unfortunately a webcam is pretty much out of the question as the application will record outside and during the evening/night. That is why I was thinking of a camcorder since it also has manual control over exposure and focus, lower noise and better sensor.
So far I would use the AV/S-Video output from the camcorder and send the signal to a USB capture card (the computer is a laptop so no PCI-E cards).
How would I be able to access the video stream from the C# application, now that it comes from the capture card ?
Does my proposed system seem feasible (achievable, good video quality, good fps)? Does anybody have another working solution?
Thanks
This Code Project Article could be of a good starting point.
The Author mentions :
The main goal of the application was to make it flexible and
extensible. The application itself can communicate with any video
source – it may be an IP video camera or a server, it may be a local
camera attached to USB, it may be an MMS stream from a remote server,
or it may be any other video source. And more of it, the application
can work with all these video sources simultaneously, displaying them
all on a single screen.
The solution I used in the end was Microsoft Expression Encoder.

Whats the best C# Way to stream a H.264 Video to another computer/device on a network? Is there a library/API For this? File Sharing?

I am experimenting with C#, and I wanted to create a fun/useful network program. I've programmed for most of my years using C++, C# seems a lot cleaner and easier to program in. I mostly programmed data structures and algorithms. I haven't really touched networking much.
I have video files on my computer that I would like to be able to share/stream/send to other computers on my network. I'm going to eventually expand on it and add a lot of features, but I want to conquer the hardest part first.
Is there a library out that helps with the data management for this?
I see accomplishing this three ways, Idk what's easiest and best.
Maybe using Windows File Sharing (Like how other computers on a network can open videos in a shared folder?)
Streaming the video data to the client computer? Then having their native video program open the data stream? (Buffer-like on youtube?)
Silverlight or some other Library. I can use the built in video player, etc to run it
Features:
I want to allow the client to be able to copy the video tutorial file to their own computer eventually if necessary, so idk. Maybe buffering is the best solution.
Want to allow the client to pause/download the video.
Hopefully I can learn a lot in this project.
You can use Microsoft Expression Encoder SDK to push video stream to a local port, or publish it in Windows or IIS Media Services. Windows Media Player, Silverlight or player-based application can be used for playback on another computer. Also, the are some options for playback on Apple devices. For H.264 support, you would need Pro version of the encoder.
For more information see the SDK documentation on MSDN, and articles Getting started with IIS Live Smooth Streaming and Apple HTTP Live Streaming with IIS Media Services.
You should be able to use vlc to transcode the file (or just stream it) then connect to the stream it produces. I know you're experimenting with C#, but it seems odd to re-invent the wheel, especially when it's such a good one!
I'm sure you'd have some fun automating vlc.

Categories

Resources