Index: media/base/media_track.h |
diff --git a/media/base/media_track.h b/media/base/media_track.h |
index 3cd41d736ffa05cd702b6402e5ad91a57b300ada..1b97622d966aa41e06dda4cae298823b55198b50 100644 |
--- a/media/base/media_track.h |
+++ b/media/base/media_track.h |
@@ -15,6 +15,7 @@ namespace media { |
class MEDIA_EXPORT MediaTrack { |
public: |
enum Type { Text, Audio, Video }; |
+ using Id = std::string; |
MediaTrack(Type type, |
StreamParser::TrackId bytestream_track_id, |
const std::string& kind, |
@@ -31,9 +32,29 @@ class MEDIA_EXPORT MediaTrack { |
const std::string& label() const { return label_; } |
const std::string& language() const { return language_; } |
+ Id id() const { return id_; } |
+ void set_id(Id id) { |
+ DCHECK(id_.empty()); |
+ DCHECK(!id.empty()); |
+ id_ = id; |
+ } |
+ |
private: |
Type type_; |
+ |
+ // |bytestream_track_id_| is read from the bytestream and is guaranteed to be |
+ // unique only within the scope of single bytestream's initialization segment. |
+ // But we might have multiple bytestreams (MediaSource might have multiple |
+ // SourceBuffers attached to it, which translates into ChunkDemuxer having |
+ // multiple MediaSourceStates and multiple bytestreams) or subsequent init |
+ // segments may redefine the bytestream ids. Thus bytestream track ids are not |
+ // guaranteed to be unique at the Demuxer and HTMLMediaElement level. So we |
+ // generate truly unique media track |id_| on the Demuxer level. |
StreamParser::TrackId bytestream_track_id_; |
+ Id id_; |
+ |
+ // These properties are read from input streams by stream parsers as specified |
+ // in https://dev.w3.org/html5/html-sourcing-inband-tracks/. |
std::string kind_; |
std::string label_; |
std::string language_; |