Essentially I am attempting to replicate YouTube's capability to begin video playback from the a part of located movie. If you possess a 60 minute video, a person could skip right to the half hour mark without streaming the very first half an hour of video. Does anybody know how YouTube achieves this?
Well the ball player opens the HTTP resource like normal. Whenever you hit the seek bar, the ball player demands another area of the file.
It passes a header such as this:
RANGE: bytes-unit = 10001nn
and also the server serves the resource from that byte range. With respect to the codec it'll need to see until it reaches a sync frame to start playback
Video is a number of frames, performed in a frame rate. Nevertheless, you will find some rules concerning the order of the items frames could be decoded.
Basically, you've reference frames (known as I-Frames) and you've got modification frames (class P-Frames and B-Frames)... It's generally correct that a correctly set up decoder will have the ability to join a stream on any I-Frame (that's, start decoding), but this is not on P and B frames... So, once the user drags the slider, you are gonna need to discover the nearest I frame and decode that...
This might obviously be hidden underneath the hood of Expensive for you personally, but that's what it will likely be doing...
I'm not sure how YouTube will it, but when you are searching to duplicate the functionality, take a look at Annodex. This is an open standard that's according to Ogg Theora, however with an additional XML metadata stream.
Annodex enables you to definitely have links to named sections inside the video or temporal URIs to specific occasions within the video. Using libannodex, the server can aim to the appropriate area of the video and begin serving it after that.
Basically would guess, it might be some kind of selective data retrieval, such as the Range header in HTTP. that may be also the things they use. You'll find much more about it here.