Merge branch 'main' into cmake
This commit is contained in:
commit
4515a9834d
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -4,7 +4,7 @@
|
||||||
<Period id="0" start="PT0S">
|
<Period id="0" start="PT0S">
|
||||||
<AdaptationSet id="0" contentType="text" segmentAlignment="true">
|
<AdaptationSet id="0" contentType="text" segmentAlignment="true">
|
||||||
<Role schemeIdUri="urn:mpeg:dash:role:2011" value="subtitle"/>
|
<Role schemeIdUri="urn:mpeg:dash:role:2011" value="subtitle"/>
|
||||||
<Representation id="0" bandwidth="4112" codecs="stpp" mimeType="application/mp4">
|
<Representation id="0" bandwidth="4120" codecs="stpp" mimeType="application/mp4">
|
||||||
<SegmentTemplate timescale="1000" initialization="bear-english-text-init.mp4" media="bear-english-text-$Number$.m4s" startNumber="1">
|
<SegmentTemplate timescale="1000" initialization="bear-english-text-init.mp4" media="bear-english-text-$Number$.m4s" startNumber="1">
|
||||||
<SegmentTimeline>
|
<SegmentTimeline>
|
||||||
<S t="0" d="1000" r="4"/>
|
<S t="0" d="1000" r="4"/>
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
<head/>
|
<head/>
|
||||||
<body>
|
<body>
|
||||||
<div>
|
<div>
|
||||||
<p xml:space="preserve" begin="00:00:00.00" end="00:00:00.800" tts:textAlign="center">Yup, that's a bear, eh.</p>
|
<p xml:space="preserve" begin="00:00:00.000" end="00:00:00.800" tts:textAlign="center">Yup, that's a bear, eh.</p>
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
</tt>
|
</tt>
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
<head/>
|
<head/>
|
||||||
<body>
|
<body>
|
||||||
<div>
|
<div>
|
||||||
<p xml:space="preserve" begin="00:00:01.00" end="00:00:04.700" tts:textAlign="center">He 's... um... doing bear-like stuff.</p>
|
<p xml:space="preserve" begin="00:00:01.000" end="00:00:04.700" tts:textAlign="center">He 's... um... doing bear-like stuff.</p>
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
</tt>
|
</tt>
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
<head/>
|
<head/>
|
||||||
<body>
|
<body>
|
||||||
<div>
|
<div>
|
||||||
<p xml:space="preserve" begin="00:00:01.00" end="00:00:04.700" tts:textAlign="center">He 's... um... doing bear-like stuff.</p>
|
<p xml:space="preserve" begin="00:00:01.000" end="00:00:04.700" tts:textAlign="center">He 's... um... doing bear-like stuff.</p>
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
</tt>
|
</tt>
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
<head/>
|
<head/>
|
||||||
<body>
|
<body>
|
||||||
<div>
|
<div>
|
||||||
<p xml:space="preserve" begin="00:00:01.00" end="00:00:04.700" tts:textAlign="center">He 's... um... doing bear-like stuff.</p>
|
<p xml:space="preserve" begin="00:00:01.000" end="00:00:04.700" tts:textAlign="center">He 's... um... doing bear-like stuff.</p>
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
</tt>
|
</tt>
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
<head/>
|
<head/>
|
||||||
<body>
|
<body>
|
||||||
<div>
|
<div>
|
||||||
<p xml:space="preserve" begin="00:00:01.00" end="00:00:04.700" tts:textAlign="center">He 's... um... doing bear-like stuff.</p>
|
<p xml:space="preserve" begin="00:00:01.000" end="00:00:04.700" tts:textAlign="center">He 's... um... doing bear-like stuff.</p>
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
</tt>
|
</tt>
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
<Period id="0" start="PT0S">
|
<Period id="0" start="PT0S">
|
||||||
<AdaptationSet id="0" contentType="text" segmentAlignment="true">
|
<AdaptationSet id="0" contentType="text" segmentAlignment="true">
|
||||||
<Role schemeIdUri="urn:mpeg:dash:role:2011" value="subtitle"/>
|
<Role schemeIdUri="urn:mpeg:dash:role:2011" value="subtitle"/>
|
||||||
<Representation id="0" bandwidth="2608" mimeType="application/ttml+xml">
|
<Representation id="0" bandwidth="2616" mimeType="application/ttml+xml">
|
||||||
<SegmentTemplate timescale="1000" media="bear-english-text-$Number$.ttml" startNumber="1">
|
<SegmentTemplate timescale="1000" media="bear-english-text-$Number$.ttml" startNumber="1">
|
||||||
<SegmentTimeline>
|
<SegmentTimeline>
|
||||||
<S t="0" d="1000" r="4"/>
|
<S t="0" d="1000" r="4"/>
|
||||||
|
|
|
@ -324,7 +324,7 @@ TEST_F(MasterPlaylistTest, WriteMasterPlaylistVideoAndAudio) {
|
||||||
"DEFAULT=YES,AUTOSELECT=YES,CHANNELS=\"2\"\n"
|
"DEFAULT=YES,AUTOSELECT=YES,CHANNELS=\"2\"\n"
|
||||||
"#EXT-X-MEDIA:TYPE=AUDIO,URI=\"http://playlists.org/spa.m3u8\","
|
"#EXT-X-MEDIA:TYPE=AUDIO,URI=\"http://playlists.org/spa.m3u8\","
|
||||||
"GROUP-ID=\"audiogroup\",LANGUAGE=\"es\",NAME=\"espanol\","
|
"GROUP-ID=\"audiogroup\",LANGUAGE=\"es\",NAME=\"espanol\","
|
||||||
"AUTOSELECT=YES,CHANNELS=\"5\"\n"
|
"DEFAULT=NO,AUTOSELECT=YES,CHANNELS=\"5\"\n"
|
||||||
"\n"
|
"\n"
|
||||||
"#EXT-X-STREAM-INF:BANDWIDTH=360000,AVERAGE-BANDWIDTH=240000,"
|
"#EXT-X-STREAM-INF:BANDWIDTH=360000,AVERAGE-BANDWIDTH=240000,"
|
||||||
"CODECS=\"sdvideocodec,audiocodec\","
|
"CODECS=\"sdvideocodec,audiocodec\","
|
||||||
|
@ -430,7 +430,8 @@ TEST_F(MasterPlaylistTest, WriteMasterPlaylistSameAudioGroupSameLanguage) {
|
||||||
"GROUP-ID=\"audio\",LANGUAGE=\"en\",NAME=\"english\","
|
"GROUP-ID=\"audio\",LANGUAGE=\"en\",NAME=\"english\","
|
||||||
"DEFAULT=YES,AUTOSELECT=YES,CHANNELS=\"1\"\n"
|
"DEFAULT=YES,AUTOSELECT=YES,CHANNELS=\"1\"\n"
|
||||||
"#EXT-X-MEDIA:TYPE=AUDIO,URI=\"http://anydomain.com/eng_hi.m3u8\","
|
"#EXT-X-MEDIA:TYPE=AUDIO,URI=\"http://anydomain.com/eng_hi.m3u8\","
|
||||||
"GROUP-ID=\"audio\",LANGUAGE=\"en\",NAME=\"english\",CHANNELS=\"8\"\n"
|
"GROUP-ID=\"audio\",LANGUAGE=\"en\",NAME=\"english\",DEFAULT=NO,"
|
||||||
|
"CHANNELS=\"8\"\n"
|
||||||
"\n"
|
"\n"
|
||||||
"#EXT-X-STREAM-INF:BANDWIDTH=400000,AVERAGE-BANDWIDTH=280000,"
|
"#EXT-X-STREAM-INF:BANDWIDTH=400000,AVERAGE-BANDWIDTH=280000,"
|
||||||
"CODECS=\"videocodec,audiocodec\",RESOLUTION=800x600,AUDIO=\"audio\","
|
"CODECS=\"videocodec,audiocodec\",RESOLUTION=800x600,AUDIO=\"audio\","
|
||||||
|
@ -472,7 +473,7 @@ TEST_F(MasterPlaylistTest, WriteMasterPlaylistVideosAndTexts) {
|
||||||
"\n"
|
"\n"
|
||||||
"#EXT-X-MEDIA:TYPE=SUBTITLES,URI=\"http://playlists.org/eng.m3u8\","
|
"#EXT-X-MEDIA:TYPE=SUBTITLES,URI=\"http://playlists.org/eng.m3u8\","
|
||||||
"GROUP-ID=\"textgroup\",LANGUAGE=\"en\",NAME=\"english\","
|
"GROUP-ID=\"textgroup\",LANGUAGE=\"en\",NAME=\"english\","
|
||||||
"AUTOSELECT=YES\n"
|
"DEFAULT=NO,AUTOSELECT=YES\n"
|
||||||
"#EXT-X-MEDIA:TYPE=SUBTITLES,URI=\"http://playlists.org/fr.m3u8\","
|
"#EXT-X-MEDIA:TYPE=SUBTITLES,URI=\"http://playlists.org/fr.m3u8\","
|
||||||
"GROUP-ID=\"textgroup\",LANGUAGE=\"fr\",NAME=\"french\",DEFAULT=YES,"
|
"GROUP-ID=\"textgroup\",LANGUAGE=\"fr\",NAME=\"french\",DEFAULT=YES,"
|
||||||
"AUTOSELECT=YES\n"
|
"AUTOSELECT=YES\n"
|
||||||
|
@ -513,8 +514,8 @@ TEST_F(MasterPlaylistTest, WriteMasterPlaylistVideoAndTextWithCharacteritics) {
|
||||||
"version test\n"
|
"version test\n"
|
||||||
"\n"
|
"\n"
|
||||||
"#EXT-X-MEDIA:TYPE=SUBTITLES,URI=\"http://playlists.org/eng.m3u8\","
|
"#EXT-X-MEDIA:TYPE=SUBTITLES,URI=\"http://playlists.org/eng.m3u8\","
|
||||||
"GROUP-ID=\"textgroup\",LANGUAGE=\"en\",NAME=\"english\",AUTOSELECT=YES,"
|
"GROUP-ID=\"textgroup\",LANGUAGE=\"en\",NAME=\"english\",DEFAULT=NO,"
|
||||||
"CHARACTERISTICS=\""
|
"AUTOSELECT=YES,CHARACTERISTICS=\""
|
||||||
"public.accessibility.transcribes-spoken-dialog,public.easy-to-read\"\n"
|
"public.accessibility.transcribes-spoken-dialog,public.easy-to-read\"\n"
|
||||||
"\n"
|
"\n"
|
||||||
"#EXT-X-STREAM-INF:BANDWIDTH=300000,AVERAGE-BANDWIDTH=200000,"
|
"#EXT-X-STREAM-INF:BANDWIDTH=300000,AVERAGE-BANDWIDTH=200000,"
|
||||||
|
@ -555,7 +556,7 @@ TEST_F(MasterPlaylistTest, WriteMasterPlaylistVideoAndDvsAudio) {
|
||||||
"version test\n"
|
"version test\n"
|
||||||
"\n"
|
"\n"
|
||||||
"#EXT-X-MEDIA:TYPE=AUDIO,URI=\"http://playlists.org/dvs_eng.m3u8\","
|
"#EXT-X-MEDIA:TYPE=AUDIO,URI=\"http://playlists.org/dvs_eng.m3u8\","
|
||||||
"GROUP-ID=\"audiogroup\",LANGUAGE=\"en\",NAME=\"DVS english\","
|
"GROUP-ID=\"audiogroup\",LANGUAGE=\"en\",NAME=\"DVS english\",DEFAULT=NO,"
|
||||||
"AUTOSELECT=YES,CHARACTERISTICS=\"public.accessibility.describes-video\","
|
"AUTOSELECT=YES,CHARACTERISTICS=\"public.accessibility.describes-video\","
|
||||||
"CHANNELS=\"2\"\n"
|
"CHANNELS=\"2\"\n"
|
||||||
"#EXT-X-MEDIA:TYPE=AUDIO,URI=\"http://playlists.org/eng.m3u8\","
|
"#EXT-X-MEDIA:TYPE=AUDIO,URI=\"http://playlists.org/eng.m3u8\","
|
||||||
|
@ -598,7 +599,7 @@ TEST_F(MasterPlaylistTest, WriteMasterPlaylistVideoAndTextGroups) {
|
||||||
"\n"
|
"\n"
|
||||||
"#EXT-X-MEDIA:TYPE=SUBTITLES,URI=\"http://playlists.org/eng.m3u8\","
|
"#EXT-X-MEDIA:TYPE=SUBTITLES,URI=\"http://playlists.org/eng.m3u8\","
|
||||||
"GROUP-ID=\"en-text-group\",LANGUAGE=\"en\",NAME=\"english\","
|
"GROUP-ID=\"en-text-group\",LANGUAGE=\"en\",NAME=\"english\","
|
||||||
"AUTOSELECT=YES\n"
|
"DEFAULT=NO,AUTOSELECT=YES\n"
|
||||||
"#EXT-X-MEDIA:TYPE=SUBTITLES,URI=\"http://playlists.org/fr.m3u8\","
|
"#EXT-X-MEDIA:TYPE=SUBTITLES,URI=\"http://playlists.org/fr.m3u8\","
|
||||||
"GROUP-ID=\"fr-text-group\",LANGUAGE=\"fr\",NAME=\"french\","
|
"GROUP-ID=\"fr-text-group\",LANGUAGE=\"fr\",NAME=\"french\","
|
||||||
"DEFAULT=YES,AUTOSELECT=YES\n"
|
"DEFAULT=YES,AUTOSELECT=YES\n"
|
||||||
|
@ -648,7 +649,7 @@ TEST_F(MasterPlaylistTest, WriteMasterPlaylistVideoAndAudioAndText) {
|
||||||
"\n"
|
"\n"
|
||||||
"#EXT-X-MEDIA:TYPE=SUBTITLES,URI=\"http://playlists.org/eng.m3u8\","
|
"#EXT-X-MEDIA:TYPE=SUBTITLES,URI=\"http://playlists.org/eng.m3u8\","
|
||||||
"GROUP-ID=\"textgroup\",LANGUAGE=\"en\",NAME=\"english\","
|
"GROUP-ID=\"textgroup\",LANGUAGE=\"en\",NAME=\"english\","
|
||||||
"AUTOSELECT=YES\n"
|
"DEFAULT=NO,AUTOSELECT=YES\n"
|
||||||
"\n"
|
"\n"
|
||||||
"#EXT-X-STREAM-INF:BANDWIDTH=350000,AVERAGE-BANDWIDTH=230000,"
|
"#EXT-X-STREAM-INF:BANDWIDTH=350000,AVERAGE-BANDWIDTH=230000,"
|
||||||
"CODECS=\"sdvideocodec,audiocodec,textcodec\",RESOLUTION=800x600,"
|
"CODECS=\"sdvideocodec,audiocodec,textcodec\",RESOLUTION=800x600,"
|
||||||
|
@ -720,11 +721,11 @@ TEST_F(MasterPlaylistTest, WriteMasterPlaylistMixedPlaylistsDifferentGroups) {
|
||||||
"DEFAULT=YES,AUTOSELECT=YES,CHANNELS=\"2\"\n"
|
"DEFAULT=YES,AUTOSELECT=YES,CHANNELS=\"2\"\n"
|
||||||
"#EXT-X-MEDIA:TYPE=AUDIO,URI=\"http://playlists.org/audio-2.m3u8\","
|
"#EXT-X-MEDIA:TYPE=AUDIO,URI=\"http://playlists.org/audio-2.m3u8\","
|
||||||
"GROUP-ID=\"audio-group-2\",LANGUAGE=\"fr\",NAME=\"audio 2\","
|
"GROUP-ID=\"audio-group-2\",LANGUAGE=\"fr\",NAME=\"audio 2\","
|
||||||
"AUTOSELECT=YES,CHANNELS=\"2\"\n"
|
"DEFAULT=NO,AUTOSELECT=YES,CHANNELS=\"2\"\n"
|
||||||
"\n"
|
"\n"
|
||||||
"#EXT-X-MEDIA:TYPE=SUBTITLES,URI=\"http://playlists.org/text-1.m3u8\","
|
"#EXT-X-MEDIA:TYPE=SUBTITLES,URI=\"http://playlists.org/text-1.m3u8\","
|
||||||
"GROUP-ID=\"text-group-1\",LANGUAGE=\"en\",NAME=\"text 1\","
|
"GROUP-ID=\"text-group-1\",LANGUAGE=\"en\",NAME=\"text 1\","
|
||||||
"AUTOSELECT=YES\n"
|
"DEFAULT=NO,AUTOSELECT=YES\n"
|
||||||
"#EXT-X-MEDIA:TYPE=SUBTITLES,URI=\"http://playlists.org/text-2.m3u8\","
|
"#EXT-X-MEDIA:TYPE=SUBTITLES,URI=\"http://playlists.org/text-2.m3u8\","
|
||||||
"GROUP-ID=\"text-group-2\",LANGUAGE=\"fr\",NAME=\"text 2\","
|
"GROUP-ID=\"text-group-2\",LANGUAGE=\"fr\",NAME=\"text 2\","
|
||||||
"DEFAULT=YES,AUTOSELECT=YES\n"
|
"DEFAULT=YES,AUTOSELECT=YES\n"
|
||||||
|
@ -823,7 +824,7 @@ TEST_F(MasterPlaylistTest, WriteMasterPlaylistAudioOnly) {
|
||||||
"DEFAULT=YES,AUTOSELECT=YES,CHANNELS=\"2\"\n"
|
"DEFAULT=YES,AUTOSELECT=YES,CHANNELS=\"2\"\n"
|
||||||
"#EXT-X-MEDIA:TYPE=AUDIO,URI=\"http://playlists.org/audio-2.m3u8\","
|
"#EXT-X-MEDIA:TYPE=AUDIO,URI=\"http://playlists.org/audio-2.m3u8\","
|
||||||
"GROUP-ID=\"audio-group-2\",LANGUAGE=\"fr\",NAME=\"audio 2\","
|
"GROUP-ID=\"audio-group-2\",LANGUAGE=\"fr\",NAME=\"audio 2\","
|
||||||
"AUTOSELECT=YES,CHANNELS=\"2\"\n"
|
"DEFAULT=NO,AUTOSELECT=YES,CHANNELS=\"2\"\n"
|
||||||
"\n"
|
"\n"
|
||||||
"#EXT-X-STREAM-INF:BANDWIDTH=50000,AVERAGE-BANDWIDTH=30000,"
|
"#EXT-X-STREAM-INF:BANDWIDTH=50000,AVERAGE-BANDWIDTH=30000,"
|
||||||
"CODECS=\"audiocodec\",AUDIO=\"audio-group-1\",CLOSED-CAPTIONS=NONE\n"
|
"CODECS=\"audiocodec\",AUDIO=\"audio-group-1\",CLOSED-CAPTIONS=NONE\n"
|
||||||
|
|
|
@ -162,13 +162,16 @@ Status Demuxer::InitializeParser() {
|
||||||
|
|
||||||
// Read enough bytes before detecting the container.
|
// Read enough bytes before detecting the container.
|
||||||
int64_t bytes_read = 0;
|
int64_t bytes_read = 0;
|
||||||
|
bool eof = false;
|
||||||
while (static_cast<size_t>(bytes_read) < kInitBufSize) {
|
while (static_cast<size_t>(bytes_read) < kInitBufSize) {
|
||||||
int64_t read_result =
|
int64_t read_result =
|
||||||
media_file_->Read(buffer_.get() + bytes_read, kInitBufSize);
|
media_file_->Read(buffer_.get() + bytes_read, kInitBufSize);
|
||||||
if (read_result < 0)
|
if (read_result < 0)
|
||||||
return Status(error::FILE_FAILURE, "Cannot read file " + file_name_);
|
return Status(error::FILE_FAILURE, "Cannot read file " + file_name_);
|
||||||
if (read_result == 0)
|
if (read_result == 0) {
|
||||||
|
eof = true;
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
bytes_read += read_result;
|
bytes_read += read_result;
|
||||||
}
|
}
|
||||||
container_name_ = DetermineContainer(buffer_.get(), bytes_read);
|
container_name_ = DetermineContainer(buffer_.get(), bytes_read);
|
||||||
|
@ -224,7 +227,7 @@ Status Demuxer::InitializeParser() {
|
||||||
// descriptor |media_file_| instead of opening the same file again.
|
// descriptor |media_file_| instead of opening the same file again.
|
||||||
static_cast<mp4::MP4MediaParser*>(parser_.get())->LoadMoov(file_name_);
|
static_cast<mp4::MP4MediaParser*>(parser_.get())->LoadMoov(file_name_);
|
||||||
}
|
}
|
||||||
if (!parser_->Parse(buffer_.get(), bytes_read)) {
|
if (!parser_->Parse(buffer_.get(), bytes_read) || (eof && !parser_->Flush())) {
|
||||||
return Status(error::PARSER_FAILURE,
|
return Status(error::PARSER_FAILURE,
|
||||||
"Cannot parse media file " + file_name_);
|
"Cannot parse media file " + file_name_);
|
||||||
}
|
}
|
||||||
|
|
|
@ -342,6 +342,8 @@ float MpdBuilder::GetStaticMpdDuration() {
|
||||||
bool MpdBuilder::GetEarliestTimestamp(double* timestamp_seconds) {
|
bool MpdBuilder::GetEarliestTimestamp(double* timestamp_seconds) {
|
||||||
DCHECK(timestamp_seconds);
|
DCHECK(timestamp_seconds);
|
||||||
DCHECK(!periods_.empty());
|
DCHECK(!periods_.empty());
|
||||||
|
if (periods_.empty())
|
||||||
|
return false;
|
||||||
double timestamp = 0;
|
double timestamp = 0;
|
||||||
double earliest_timestamp = -1;
|
double earliest_timestamp = -1;
|
||||||
// TODO(kqyang): This is used to set availabilityStartTime. We may consider
|
// TODO(kqyang): This is used to set availabilityStartTime. We may consider
|
||||||
|
|
|
@ -20,6 +20,17 @@ import os
|
||||||
import struct
|
import struct
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
|
|
||||||
|
def to_code_point(value):
|
||||||
|
"""
|
||||||
|
Return the unicode code point with `int` passthrough
|
||||||
|
"""
|
||||||
|
if isinstance(value, int):
|
||||||
|
return value
|
||||||
|
|
||||||
|
return ord(value)
|
||||||
|
|
||||||
|
|
||||||
_script_dir = os.path.dirname(os.path.realpath(__file__))
|
_script_dir = os.path.dirname(os.path.realpath(__file__))
|
||||||
_proto_path = os.path.join(_script_dir, 'pyproto')
|
_proto_path = os.path.join(_script_dir, 'pyproto')
|
||||||
_widevine_proto_path = os.path.join(_proto_path, 'packager/media/base')
|
_widevine_proto_path = os.path.join(_proto_path, 'packager/media/base')
|
||||||
|
@ -64,9 +75,9 @@ class BinaryReader(object):
|
||||||
ret = 0
|
ret = 0
|
||||||
for i in range(0, size):
|
for i in range(0, size):
|
||||||
if self.little_endian:
|
if self.little_endian:
|
||||||
ret |= (ord(data[i]) << (8 * i))
|
ret |= (to_code_point(data[i]) << (8 * i))
|
||||||
else:
|
else:
|
||||||
ret |= (ord(data[i]) << (8 * (size - i - 1)))
|
ret |= (to_code_point(data[i]) << (8 * (size - i - 1)))
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue