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 d477f0bb83fe503d0bd740f49d584afa861620d1..3a4ada04a2b3a0946acf93f6dc6cfb281508a635 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,9 @@ int WebMStreamParser::ParseInfoAndTracks(const uint8* data, int size) { |
params.timeline_offset = info_parser.date_utc(); |
+ params.live_mode = unknown_segment_size_ && (info_parser.duration() <= 0) && |
+ !info_parser.date_utc().is_null(); |
+ |
const AudioDecoderConfig& audio_config = tracks_parser.audio_decoder_config(); |
if (audio_config.is_encrypted()) |
FireNeedKey(tracks_parser.audio_encryption_key_id()); |
@@ -205,7 +212,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(), |