So I lead a team of engineers located across 3 timezones, and when we have a meeting we record it, so that it can reviewed at a later date. Currently we are just storing it on an apache server. If someone wants to watch one of the videos they must download it and then watch it.
Would it be possible to configure it so that they could stream the videos instead of downloading them?
Thanks :)
If the video is mp4, and if you have reasonable bandwidth available, then you can simply make the video available on your server and use the HTML5 video tag on a web page to stream it.
If you don't have or don't want a separate web page just for this, then you can use a general purpose video player, such as VLC http://www.videolan.org/vlc/index.html, and simply provide the URL to the video on your server.
One thing to be aware of - a regular MP4 file has the metadata at the end of the file, but for streaming you want this to be moved to the start of the file. There are several tools which will do this (google mp4 fast start) - here is an example:
https://github.com/danielgtaylor/qtfaststart
Related
I am using Azure Blob Storage to store a video. I would like a user to be able to scroll the video to any point in time and play it from there.
For short videos, there is no problem because the whole video loads and you can do that, but for larger videos, it does not seem to work out of the box. And in some sense it makes sense - files by default do not have the functionality to be downloadable from the middle. But all decent video streaming websites offer this functionality. I must be missing some video concepts, would appreciate, if someone linked me to some articles explaining how things like this are done. Bonus points if the solution is using Microsoft Azure.
Large video example (28 secs, 126MB):
https://www.w3schools.com/code/tryit.asp?filename=GP328W3SEY77
Small video example (10 secs, 1MB):
https://www.w3schools.com/html/tryit.asp?filename=tryhtml5_video
Video streaming servers or cloud services are usually dedicated specialised servers and their functionality can be quite complex.
A video 'file' typically consists of one or more video and audio tracks in a 'container' like MP4. The container will have header information and pointers to the track info.
Simple HTTP streaming of an mp4 file is possible if your server supports range requests, i.e. downloading parts of the file at a time, and if the header information is at the start of the video file - in mp4 is it usually at the end by default but can be moved to the start.
More sophisticated streaming servers, including most/all of the popular commercial services, use a dedicated streaming protocol, typically ABR HLS or DASH these days. These provide chunked multiple different bit rate versions of the video and allow the client switch between bit rates for each chunk it downloads - see more info here: https://stackoverflow.com/a/42365034/334402
The thumbnails you see when you scroll along a video timeline are actually usually a separate track in the video file or stream. They are a set of images at timepoints and the entire set of thumbnails can be downloaded quickly at the start of playback to give a view of what a particular part of the video will look like if the user wants to jump to it. When the user actually jumps to that section of the video, the client requests from the server the chunks or section of the file corresponding to that thumbnail.
Azure CDN actually provides some nice functionality:
video starts to play instantly (browser doesn't need to wait for the video to fully load)
you can scroll back/forward in time.
(Obviously, this in addition to the standard CDN functionality of multiple PoP, caching, etc.)
The above CDN setup was tested on Standard Microsoft, but Verizon and Akamai seem to be offering similar functionality.
I have an online class website where I have put videos for different courses. Users can view the videos, but I want them to be unable to download the videos by any means (e.g using any third party software or by copying the video link). How can I implement this?
HLS wont make it impossible to download video, it's just going to make it harder to download, infact it's impossible to disable downloading.
https://chrome.google.com/webstore/detail/hls-downloader/apomkbibleomoihlhhdbeghnfioffbej?hl=en
You can use Amazon Elastic Transcoder to transcode your videos to HLS(HTTP Live Streaming). HLS use segments of the encrypted video from s3. This will prevent downloading of videos from s3.
https://aws.amazon.com/elastictranscoder/
Similar to how YouTube captions videos, is there any audio hosting service out there that will transcribe audio and provide a written transcription for accessibility purposes?
No.
You could upload the audio to YouTube as a video file and get its auto-captions, terrible as they are, then extract those.
You should know that YouTube's auto-captioning should never (never) be relied on. You can instead use it to generate a rough time-based set of captions that you can then download and correct.
The easiest way to do that is via No More Craptions, which will take a YouTube video with auto-captions and walk you through correcting them in a simple interface.
You may then download your completed work as a transcript as well. When you do that, remember to offer a plain text link near the audio file / player on the page with a clear indication of what the user will receive.
Let me reiterate — never rely on YouTube auto-captions. Always correct whatever YouTube provides. Always.
I am currently planing the total cost of hosting my videos on azure. After studying the pricing I noted that the costs for storing the data is actually much lower than the price for converting them. Unfortunately I will have many videos, but they won't be watched a lot. Therefore the relative cost for converting them to different formats is too high for me.
Now my question, do I actually need to convert the videos to different formats or wouldn't it be possible to send the video directly from the storage to the browser?
To send video's from storage to browser you can use SAS urls as Zain mentioned. You need to ask yourself what devices,bitrates your solution is targeting: which browsers, web only or web + mobile.
Probably you want your users be able to start watching video before it has been fully downloaded on client(progressive download). Make sure that you encoded it into desired bitrate and moov atom in the video is placed at the beginning of file -https://support.jwplayer.com/customer/portal/questions/12945932-mp4-file-progressive-play.
Based on your original video format and answers to above questions you might need to re-encode your videos and upload re-encoded version to server.
Yes, it's possible to send them directly from storage to the browser, just like it's possible to send any file that you make publicly accessible.
If you're going to store your videos in blob storage, just make sure you either mark the container as public or you generate SAS urls for each video that make them publicly accessible.
I want to play many videos back to back without delay.movies are in mp4 format and i want to run them from main bundle
HTTP Live Streaming supports discontinuity, which allows different video sources to be played with no 'hiccup'. Of course that is for a server talking with a client.
Perhaps you could generate a .m3u8 index file with all of your videos, and play them locally. The MPMoviePlayer takes in a .m3u8 file and does everything else for you. May be worth looking into.