aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJan Ekström <jeebjp@gmail.com>2017-02-11 01:21:14 +0200
committerMichael Niedermayer <michael@niedermayer.cc>2017-02-12 20:18:32 +0100
commit763e8237546ac5e1db812785f7110fea849067f2 (patch)
treed46eb0cc11193009bcaf4b0bce2b36cd86aa5174
parent79d232fc9f1ff91f7ed96bdfddf47ad5ee232b47 (diff)
downloadffmpeg-763e8237546ac5e1db812785f7110fea849067f2.tar.gz
movenc: add support for track names in ISML manifests
This enables having multiple tracks of the same type which would be treated as different things by the media server (as opposed to different bit rate versions of the same track). According to the smooth streaming specification, just setting the systemLanguage tag is not enough to note that a track with the same attributes differs from another one. Reviewed-by: Martin Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
-rw-r--r--libavformat/movenc.c18
1 files changed, 18 insertions, 0 deletions
diff --git a/libavformat/movenc.c b/libavformat/movenc.c
index a58b6a46c6..a28621080d 100644
--- a/libavformat/movenc.c
+++ b/libavformat/movenc.c
@@ -3645,6 +3645,7 @@ static int mov_write_isml_manifest(AVIOContext *pb, MOVMuxContext *mov, AVFormat
MOVTrack *track = &mov->tracks[i];
const char *type;
int track_id = track->track_id;
+ char track_name_buf[32] = { 0 };
AVStream *st = track->st;
AVDictionaryEntry *lang = av_dict_get(st->metadata, "language", NULL,0);
@@ -3670,6 +3671,23 @@ static int mov_write_isml_manifest(AVIOContext *pb, MOVMuxContext *mov, AVFormat
param_write_int(pb, "systemBitrate", manifest_bit_rate);
param_write_int(pb, "trackID", track_id);
param_write_string(pb, "systemLanguage", lang ? lang->value : "und");
+
+ /* Build track name piece by piece: */
+ /* 1. track type */
+ av_strlcat(track_name_buf, type, sizeof(track_name_buf));
+ /* 2. track language, if available */
+ if (lang)
+ av_strlcatf(track_name_buf, sizeof(track_name_buf),
+ "_%s", lang->value);
+ /* 3. special type suffix */
+ /* "_cc" = closed captions, "_ad" = audio_description */
+ if (st->disposition & AV_DISPOSITION_HEARING_IMPAIRED)
+ av_strlcat(track_name_buf, "_cc", sizeof(track_name_buf));
+ else if (st->disposition & AV_DISPOSITION_VISUAL_IMPAIRED)
+ av_strlcat(track_name_buf, "_ad", sizeof(track_name_buf));
+
+ param_write_string(pb, "trackName", track_name_buf);
+
if (track->par->codec_type == AVMEDIA_TYPE_VIDEO) {
if (track->par->codec_id == AV_CODEC_ID_H264) {
uint8_t *ptr;