| Index: media/formats/webm/webm_stream_parser.cc
|
| diff --git a/media/formats/webm/webm_stream_parser.cc b/media/formats/webm/webm_stream_parser.cc
|
| index b4ae1ff7227fc999231f7ebbcd6983b8e305a3cf..a90a623a2bdf9aa729206e66cc53574d6453b95e 100644
|
| --- a/media/formats/webm/webm_stream_parser.cc
|
| +++ b/media/formats/webm/webm_stream_parser.cc
|
| @@ -20,6 +20,7 @@ namespace media {
|
|
|
| WebMStreamParser::WebMStreamParser()
|
| : state_(kWaitingForInit),
|
| + unknown_segment_size_(false),
|
| parsing_cluster_(false) {
|
| }
|
|
|
| @@ -150,6 +151,9 @@ int WebMStreamParser::ParseInfoAndTracks(const uint8* data, int size) {
|
| return result + element_size;
|
| break;
|
| case kWebMIdSegment:
|
| + // Segment of unknown size indicates live stream.
|
| + if (element_size == kWebMUnknownSize)
|
| + unknown_segment_size_ = true;
|
| // Just consume the segment header.
|
| return result;
|
| break;
|
| @@ -190,6 +194,15 @@ int WebMStreamParser::ParseInfoAndTracks(const uint8* data, int size) {
|
|
|
| params.timeline_offset = info_parser.date_utc();
|
|
|
| + if (unknown_segment_size_ && (info_parser.duration() <= 0) &&
|
| + !info_parser.date_utc().is_null()) {
|
| + params.liveness = Demuxer::LIVENESS_LIVE;
|
| + } else if (info_parser.duration() >= 0) {
|
| + params.liveness = Demuxer::LIVENESS_RECORDED;
|
| + } else {
|
| + params.liveness = Demuxer::LIVENESS_UNKNOWN;
|
| + }
|
| +
|
| const AudioDecoderConfig& audio_config = tracks_parser.audio_decoder_config();
|
| if (audio_config.is_encrypted())
|
| FireNeedKey(tracks_parser.audio_encryption_key_id());
|
| @@ -205,7 +218,6 @@ int WebMStreamParser::ParseInfoAndTracks(const uint8* data, int size) {
|
| return -1;
|
| }
|
|
|
| -
|
| cluster_parser_.reset(new WebMClusterParser(
|
| info_parser.timecode_scale(),
|
| tracks_parser.audio_track_num(),
|
|
|