Systems and methods for performing adaptive bitrate streaming
Systems and methods for performing trick play functionality using trick play streams during adaptive bitrate streaming in accordance with embodiments of the invention are disclosed. One embodiment includes requesting a video container index from a video container file containing a video stream from a plurality of alternative streams of video; requesting at least one portion of the video stream using at least one entry from the video container index; decoding the at least one portion of the video stream; receiving at least one user instruction to perform a visual search of the media; requesting a trick play container index from a trick play container file containing a trick play stream; requesting at least one frame of video from the at least one trick play stream; and decoding and displaying the at least one frame of video from the trick play stream.
1 . A method of performing adaptive bitrate streaming using a playback device that selects between different streams of encoded media during playback according to streaming conditions experienced by the playback device, the method comprising:
obtaining, using a playback device via a network, a top level index file for a piece of media content that includes an audio sequence and a video sequence, where the top level index file identifies:
alternative streams of encoded video that are available to the playback device, where:
each of the alternative streams of encoded video is an encoding of the video sequence;
each of the alternative streams of encoded video is encoded as a plurality of portions of encoded video; and
the alternative streams of encoded video are encoded at different bitrates; and
separate index files that contain information concerning the locations of container files that contain the identified alternative streams of encoded video;
selecting, using the playback device, a first stream of encoded video from the alternative streams of encoded video identified in the top level index file, where the first stream of encoded video is selected to commence playback;
obtaining, using a playback device via the network, a first index file from the separate index files identified in the top level index file, where the first index file is an index file for the first stream of encoded video and contains information concerning the location of at least one container file that contains the first stream of encoded video;
obtaining, using the playback device via the network utilizing information from the first index file, a header for the first stream of encoded video;
configuring a first video decoder within the playback device using information contained within the header for the first stream of encoded video;
caching, within memory of the playback device, the first index file and the information contained within the header for the first stream of encoded video used to configure the first video decoder;
obtaining, using the playback device via the network utilizing information from the first index file, at least a first portion of encoded video from the first stream of encoded video;
commencing playback of the media content by decoding, using the first video decoder within the playback device, the at least a first portion of encoded video from the first stream of encoded video;
as the playback device obtains additional portions of encoded media, evaluating at the playback device, current streaming conditions experienced by the playback device;
selecting, using the playback device based upon the current streaming conditions experienced by the playback device, a second stream of encoded video from the alternative streams of encoded video identified in the top level index file;
continuing playback, using the playback device and the second stream of encoded media;
subsequent to selecting the second stream of encoded video:
selecting, using the playback device, the first stream of encoded video from the alternative streams of encoded video identified in the top level index file;
reading, from the memory of the playback device, the cached first index file and the cached information contained within the header for the first stream of encoded video;
configuring a second video decoder within the playback device using information contained within the header for the first stream of encoded video;
obtaining, using the playback device via the network utilizing information from the first index file, at least a second portion of encoded video from the first stream of encoded video; and
continuing playback of the media content by decoding, using the second video decoder within the playback device, within the at least a second portion of encoded video from the first stream of encoded video.
2 . The method of claim 1 , wherein evaluating current streaming conditions experienced by the playback device comprises evaluating at least one streaming condition selected from the group consisting of buffer occupancy, network bandwidth and playback device processor capacity.
3 . The method of claim 1 , wherein continuing playback, using the playback device and the second stream of encoded media comprises obtaining a second index file and a header for the second stream of encoded video using the playback device prior to selecting the second stream based upon the current streaming conditions.
4 . The method of claim 3 , wherein the playback device retrieves the second index file and the header for the second stream of encoded video prior to commencing playback of the second stream.
5 . The method of claim 1 , wherein:
the first index file contains:
information concerning the location of a container file that contains the first stream of encoded video; and
information concerning locations of portions of video within the container file; and
the at least a first portion of encoded video from the first stream of encoded video is obtained by the playback device via the network using a byte range request generated using the information concerning locations of portions of video within the container file.
6 . The method of claim 5 , wherein the information concerning the locations of portions of video within the container file comprises information for each portion of encoded video that is selected from the group consisting of a starting location and a size.
7 . The method of claim 1 , wherein:
the top level index file contains Extensible Markup Language (XML) that includes a list of Uniform Resource Identifiers (URIs) describing streams of media including the alternative streams of encoded video; and
the method further comprises:
parsing the top level index file, using the playback device, to identify the URIs describing each of the alternative streams of encoded video.
8 . The method of claim 7 , wherein the list of URIs includes at least one URI describing an audio stream.
9 . The method of claim 8 , wherein the list of URIs includes at least one URI describing a subtitle stream.
10 . The method of claim 7 , wherein the list of URIs includes at least one URI describing a trick play stream.
11 . The method of claim 7 , wherein the top level index file is obtained by the playback device via the network using an HTTP request.
12 . The method of claim 1 , wherein the second stream of encoded video is selected based upon at least one factor selected from the group consisting of:
portions of encoded video that have already been requested from a server system by the playback device; and
portions of encoded video that are buffered by the playback device.
13 . The method of claim 1 , wherein each of the at least one container file that contains the first stream of encoded video is an Extensible Binary Markup Language (EBML) file.
14 . The method of claim 1 , wherein each of the alternative streams of encoded video has a different maximum bitrate.
15 . The method of claim 1 , wherein a plurality of the alternative streams of encoded video have different resolutions.
16 . The method of claim 1 , wherein a plurality of the alternative streams of encoded video have pixels with different sample aspect ratios.
17 . A method of performing adaptive bitrate streaming using a playback device that selects between different streams of encoded media during playback according to streaming conditions experienced by the playback device, the method comprising:
obtaining, using a playback device via a network, a top level index file for a piece of media content that includes an audio sequence and a video sequence, where the top level index file identifies:
alternative streams of encoded video that are available to the playback device, where:
each of the alternative streams of encoded video is an encoding of the video sequence;
each of the alternative streams of encoded video is encoded as a plurality of portions of encoded video; and
the alternative streams of encoded video are encoded at different bitrates; and
separate index files that contain information concerning the locations of container files that contain the identified alternative streams of encoded video;
selecting, using the playback device, a first stream of encoded video from the alternative streams of encoded video identified in the top level index file, where the first stream of encoded video is selected to commence playback;
obtaining, using a playback device via the network, a first index file from the separate index files identified in the top level index file, where the first index file is an index file for the first stream of encoded video and contains information concerning the location of at least one container file that contains the first stream of encoded video;
obtaining, using the playback device via the network utilizing information from the first index file, a header for the first stream of encoded video;
configuring a first video decoder within the playback device using information contained within the header for the first stream of encoded video;
caching, within memory of the playback device, the first index file and the information contained within the header for the first stream of encoded video used to configure the first video decoder;
obtaining, using the playback device via the network utilizing information from the first index file, at least a first portion of encoded video from the first stream of encoded video;
commencing playback of the media content by decoding, using the first video decoder within the playback device, the at least a first portion of encoded video from the first stream of encoded video;
as the playback device obtains additional portions of encoded media, evaluating at the playback device, current streaming conditions experienced by the playback device;
selecting, using the playback device based upon the current streaming conditions experienced by the playback device, a second stream of encoded video from the alternative streams of encoded video identified in the top level index file;
obtaining, using the playback device via the network, a second index file from the separate index files identified in the top level index file, where the second index file is an index file for the second stream of encoded video and contains information concerning the locations of at least one container file that contains the plurality of portions of encoded video of the second stream of encoded video;
obtaining, using the playback device via the network utilizing information from the second index file, a header for the second stream of encoded video;
configuring a second video decoder within the playback device using information contained within the header for the second stream of encoded video;
obtaining, using the playback device via the network utilizing information from the second index file, at least one portion of encoded video from the second stream of encoded video;
decoding, using the video decoder within the playback device, the at least one portion of encoded video from the second stream of encoded video;
subsequent to selecting the second stream of encoded video:
selecting, using the playback device, the first stream of encoded video from the alternative streams of encoded video identified in the top level index file;
reading, from the memory of the playback device, the cached first index file and the cached information contained within the header for the first stream of encoded video;
configuring a third video decoder within the playback device using information contained within the header for the first stream of encoded video;
obtaining, using the playback device via the network utilizing information from the first index file, at least a second portion of encoded video from the first stream of encoded video; and
continuing playback of the media content by decoding, using the video decoder within the playback device, the at least a second portion of encoded video from the first stream of encoded video.
18 . A method of performing adaptive bitrate streaming using a playback device that selects between different streams of encoded media during playback according to streaming conditions experienced by the playback device, the method comprising:
obtaining, using a playback device via a network, a top level index file for a piece of media content that includes an audio sequence and a video sequence, where the top level index file identifies:
alternative streams of encoded video that are available to the playback device, where:
each of the alternative streams of encoded video is an encoding of the video sequence;
each of the alternative streams of encoded video is encoded as a plurality of portions of encoded video; and
the alternative streams of encoded video are encoded at different bitrates; and
separate index files that contain information concerning the locations of container files that contain the identified alternative streams of encoded video;
selecting, using the playback device, a first stream of encoded video from the alternative streams of encoded video identified in the top level index file, where the first stream of encoded video is selected to commence playback;
obtaining, using a playback device via the network, a first index file from the separate index files identified in the top level index file, where the first index file is an index file for the first stream of encoded video and contains information concerning the location of at least one container file that contains the first stream of encoded video;
obtaining, using the playback device via the network utilizing information from the first index file, a header for the first stream of encoded video;
configuring a first video decoder within the playback device using information contained within the header for the first stream of encoded video;
caching, within memory of the playback device, the first index file and the information contained within the header for the first stream of encoded video used to configure the first video decoder;
obtaining, using the playback device via the network utilizing information from the first index file, at least a first portion of encoded video from the first stream of encoded video;
commencing playback of the media content by decoding, using the first video decoder within the playback device, the at least a first portion of encoded video from the first stream of encoded video;
as the playback device obtains additional portions of encoded media, evaluating at the playback device, current streaming conditions experienced by the playback device;
selecting, using the playback device based upon the current streaming conditions experienced by the playback device, a second stream of encoded video from the alternative streams of encoded video identified in the top level index file;
obtaining, using the playback device via the network, a second index file from the separate index files identified in the top level index file, where the second index file is an index file for the second stream of encoded video and contains the locations of at least one container file that contains the plurality of portions of encoded video of the second stream of encoded video;
obtaining, using the playback device via the network utilizing information from the second index file, a header for the second stream of encoded video;
configuring a second video decoder within the playback device using information contained within the header for the second stream of encoded video;
obtaining, using the playback device via the network utilizing information from the second index file, at least one portion of encoded video from the second stream of encoded video;
decoding, using the second video decoder within the playback device, the at least one portion of encoded video from the second stream of encoded video;
subsequent to selecting the second stream of encoded video:
selecting, using the playback device, the first stream of encoded video from the alternative streams of encoded video identified in the top level index file;
reading, from the memory of the playback device, the cached first index file and the cached information contained within the header for the first stream of encoded video while playing encoded video from another stream of encoded video from the alternative streams of encoded video and prior to obtaining at least a second portion of encoded video from the first stream of encoded video;
configuring a third video decoder within the playback device using information contained within the header for the first stream of encoded video;
obtaining, using the playback device via the network utilizing information from the first index file, the at least a second portion of encoded video from the first stream of encoded video; and
continuing playback of the media content by decoding, using the third video decoder within the playback device, the at least a second portion of encoded video from the first stream of encoded video.