Video streaming with Meteor!

Hey!

Im looking for create an app that allows you make streaming with Meteor using video + audio.

Imagine:

  • Dashboard: Select what video/music u want to streaming

  • Client: Play online video/music

It is posible? How?

Regards

I presume with streaming you mean realtime broadcasting to the public?

If so it’s very much possible although meteor won’t help that much with the actual technical challenges you’ll face. Streaming is not easy (at least not if done properly), I’ve been developing a video recording/streaming app for the past few months and below are some of the key technologies you might encounter. With these ‘ingredients’ you could build something like periscope or twitch. There’s a lot involved, so don’t expect a quick solution, but these could give you a start to research.

  • getUserMedia: To capture a live video/audio source
  • MediaRecorder: To create workable video data (probably webm)
  • BinaryJS or some other webRTC library: To send the data to some server
  • FFMPEG: You’ll probably need to do some operations and transcode the video
  • MPEG-DASH: Streaming video format with manifest files
  • MediaSource: For adaptive playback/streaming on clients

If you mean something else, disregard the above and please explain in more detail :wink:

1 Like

Thx for response m8 !

If you are playing with VOD (Video on Demand) you can use Kaltura as your back-end (they even have a real-time sequencer to convert to HLS and / or DASH). I would recommend you use HLS as it (can) work on all clients. VideoJS can be your video player as it’s easy to setup.

You do have a bit of a steep learning curve for Kaltura, but once it works, you are set (we use it as our video engine).

I’m also in the process of developing an app using a similar stack. I need to be able to do lengthier recordings up to an hour long and I’m having trouble handling browser memory usage with MediaRecorder.

Curious to know if you came across the same issue and if so how you went about solving it? There’s little information online that I can find…

Thanks

Send your video in chunks, then in the ondataavailable event you send it to the server, once it has been sent you need to specifically use .close() on the original blob from the event to free up the memory otherwise you’re going to hit into trouble when hitting 512MB.

Quick tip, if audio is critical and you’re planning to run on lower performance machines you’re likely going to run into a bug with chrome where audio gets corrupted on longer recordings, the chrome team is working on it, but there’s no solution yet. The workaround I had to do was to record audio separately using Wami and then join audio and video back again using ffmpeg.

I’m sending video in chunks but not had any joy killing the reference to the blob after I’ve saved it off to the server (S3 in this case using Slingshot).

I’ve tried using .close() but you need the experimental flag set in Chrome and I really don’t want to have to ask users to do that. Even so, when I did use it the blobs still showed up in chrome://blob-internals. Does it not do the same for you? Are you aware of any other way to clear the blob? I’ve tried just setting it to null but that doesn’t do it either…

Thanks for the heads up on the audio bug, I hadn’t spotted that yet.

Ah right, with me it’s an electron desktop app and I do indeed set the experimental features. In that case I’m not sure how you could work around it, you’re sure they haven’t implemented it in recent builds or fixed the blob garbage collection?

I haven’t come across electron before… a desktop app wouldn’t me that much of an issue. I wonder if it would be possible to click a link in the browser and have that automatically open the electron app just to perform the recording tasks…

I might post a bug against chrome for the blob collection and see what they say.

What video player did you plump for out of interest?

Thanks!

It seems I’m trying to do the exact same thing. I’m using electron as my app and FFMPEG to chunk the video and then upload it to S3. I read the chunked file off disk using fs.readFile and into a Blob. However I’m noticing it his the 512 MB limit, even if I have on the experimental flag to do blob.close(). Did you ever figure out a way around this? I’d appreciate any help!