How do I stream live audio from the location to over the internet using Silverlight 2.0? What equipment, software etc do I need?
I've written/ported a MP3 decoder to Silverlight 3.
To get around the issue of a seekable stream and MediaStreamSource, I wrote a custom stream, SeekableStream, that wraps around any other Stream and makes it appear seekable by using an internal memory stream.
You can see it in action here where it can play a MP3 files located locally on your machine or on the web.
Source for the library and demo is now up on CodePlex
It depends what you want to stream. If you just want to stream Mp3s over the web the Silverlight 2 MediaElement will do it for you. Just point the Source property to the Uri of the mp3 and you're done. That same technique works for video, too. If you want to stream live content (i.e. a webcam) then you should use the stream services that were linked to by the other commenter.
Related
I've embedded a Silverlight video file which is 15 MB in my silverlight assembly. I use Application.GetResourceStream to read the resource as an stream and then I pass the returned stream to the MediaElement control to start playing it.
Question: Does Application.GetResourceStream read the whole embedded file at once? If yes, Is there any solution to prevent this behaviour?
Note: I'm building an OOB silverlight application and it's going to be published using offline media(CD ROM), so don't worry about the enlarged xap file.
Thanks in advance.
The clue is in the name Stream. That means it opens a file and reads from it sequentially (like a flowing stream).
Because of the nature of video players, which decompress streams on the fly, it will buffer a certain amount internally before playback starts. This allows the playback to stay ahead of the incoming data. For a locally stored file that will only be a small amount of data.
Why were you concerned about it reading the whole file? Are you having performance problems or long delays?
I'm running into problems on the WP7 with MediaElement downloading a 128kbps mp3 stream from a web service for a music player app that i'm working on. The file downloads correctly when the wp7 is on a wifi connection, but downloading sometimes stops when off of wifi. The problem is that i'm not getting any errors or exceptions when the downloading fails and the MediaElement state is "playing". MediaElement runs right past the downloaded portion of the stream and acts like it is playing, but there is nothing to play since the download stopped. I can somewhat replicate this issue based upon my location and using the 3g instead of wifi, so i believe it is due to a low connection. I don't believe any code needs to be shown in this instance, but i try to post something. I want to know if I have any control over this? Are there any other events I could use to detect when the download has failed? Is there another way I could download a mp3 stream that is more reliable and play it? Is there another player/component I should try?
Thanks in advance
You could always use MediaStreamSource to try to handle the download and implement streaming, to some extent. It is a more "painful" way of doing this since you will have to work with an extra media layer, but it pays off by improving playback stability.
Here is a starter example by Tim Heuer. Take a look specifically at how he takes advantage of a custom implementation of MediaStreamSource. Here is a more complex sample.
If streaming is not a requirement, you could download the file (and store it in the Isolated Storage) and then play from there.
I am making a general question since I am a developer and I have no advance experience on video elaboration. I have to preparare a web application with the purpose to allow video files upload on our company server and then video elaboration by server, on user command. The purpose of the web application is to allow to the user to make some elaboration on video depending on user action launch from the web app:
(server has to ) convert video in different format(mp4, flv...)
extact keyframes from video and saves them in jpeg format
possibility to extract audio from video
automatic control of quality audio & video (black frames,silences detection)
change scene detection and keyframe extraction
.....
This what's my bosses wanted from the web based application (with the server support obviously), and I understand only the first 3 points of this list, the rest for me was arabic....
My question is: Which is the best and fastest server side application for this works, that can support multiple batch video conversions, from command line (comand line for php-soap-socket interaction or something else..)?
Is suitable Adobe Media Server for batch video conversion?
Which are adobe products that can be used for this purpose?
Note: I have experience with Indesign Server scripting programing (sending xml with php and soap call...), and I am looking to something similiar for video elaboration.
I will appreciate any answers.
THANKS ALL
I suggest you start with the open source project FFmpeg. You can call the program from the command line and via a series of arguments specify the desired output types, thumbnails, etc.
As an aside, when you start looking around at Video related projects (MediaShare for example) you will find they are all using FFmpeg for their video processing.
as Nathan suggested, FFMPEG is the first choice. Also you can check MEncoder
Just to elaborate:
1) (server has to ) convert video in different format(mp4, flv...)
both FFMPEG and mencoder do this well
2) extact keyframes from video and saves them in jpeg format
as I know it's impossible using command-line interface of FFMPEG, not sure about mencoder. However they can save all frames as separate images
3) possibility to extract audio from video
both FFMPEG and mencoder do this well
4) automatic control of quality audio & video (black frames,silences detection)
you need to code this, using FFMPEG libraries or mencoder
5) change scene detection and keyframe extraction
it's not clear what your boss imposes here
I tried lot of videos converting in server side using advance Xuggler API libraries.
Xuggler is a free open-source library for Java developers which can be used to uncompress,
manipulate, and compress recorded or live video in real time. Xuggler uses the very
powerful FFmpeg media handling libraries under the hood, essentially playing the role of a
java wrapper around them. It is the easy way to uncompress, modify, and re-compress any
media file (or stream) from Java.
WebLinks : 1) http://www.xuggle.com/ -official website
2) http://www.javacodegeeks.com/2011/02/introduction-xuggler-video-
manipulation.html - example
OK so Silverlight 4 is adding support for capturing from microphones (and webcams), however for this facility to be useful (in my case at least) I'd need to upload this captured data to a server to save.
The AudioCaptureDevice will record PCM audio on the client, and as we all know PCM is not the most efficient encoding... the data would be too large to upload uncompressed.
Ideally, I could encode this PCM stream to AAC right on the client, then upload that compressed stream to the server.
Something like this library, may be useful. However it doesn't support AAC.
(I'm choosing AAC because (unlike MP3) it is royalty-free to encode, and is supported by popular PMP devices.)
Any thoughts out there on the best way to accomplish this? All options are on the table: full-trust, Google Gears, etc...
Thanks for any help!
There's an audio codec out there called Speex AND Alden Torres ported the SPEEX algorithm to C#. So you have a full managed audio encoder. Here's the relevant blog post where he shows how to encode the audio from the mic with SPEEX. Read also the comments.
As the answer mentioned above Speex is a voice codec which is not really appropriate if you want to use it for music.
However, if you are still interested in Speex on Silverlight than you should take a look at NSpeex which is a port of an earlier version of Speex to C# and it also offers a Silverlight library.
I need to record a music in Silverlight (e.g. from the line-in) and save it on the server. It must be in a good quality (not like SPEEX). I will try to use a lame encoder on the client. It needs the lame_enc.dll that can be accessed by p-invoke. I will test if it is possible from the silverlight.
Do you know some alternatives? Maybe a good stream server (is it possible with wowza)?
You should know that AAC encoding is patent restricted as well. Check out the Wikipeadia article on it. If you want a free format, you should look into Vorbis or FLAC (or Speex).
If you're on a Windows 7 or Server 2008 R2 box, you might be able to use the SDK to encode AAC (http://msdn.microsoft.com/en-us/library/dd742785(v=VS.85).aspx).
Also, since you're forcing the client to do a bunch of work anyway, why not just zip it before you upload it -- I'm not a Silverlight person, so maybe that's not possible?
I am setting up my hi-fi to stream music from my PC. The hi-fi can see all of the files in my music folder, but I want to be able to stream across the audio I am currently playing. The hi-fi however does not have support for this.
So I've found a .dll that wraps directsound and offers it streaming as a continuous mp3 file on my PC from localhost:8124
I want to make a file in my music folder that will point to this (i.e. audio.mp3). So when my hi-fi streams audio.mp3 and plays it, it will actually receive the contents from localhost:8124.
I've tried using symbolic links, but they don't seem to allow me to do this.
Finally I am running Windows 7.
Can I do this? and if so how?
You can't do that. You can't create something that looks like a file, but actually streams the content from some other location.
If your hi-fi doesn't support streaming, there's no solution. If it does support streaming, you'll need to find a way to support the streaming protocol it does handle.