mirror of https://git.ffmpeg.org/ffmpeg.git
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>
This commit is contained in:
parent
79d232fc9f
commit
763e823754
|
@ -3645,6 +3645,7 @@ static int mov_write_isml_manifest(AVIOContext *pb, MOVMuxContext *mov, AVFormat
|
||||||
MOVTrack *track = &mov->tracks[i];
|
MOVTrack *track = &mov->tracks[i];
|
||||||
const char *type;
|
const char *type;
|
||||||
int track_id = track->track_id;
|
int track_id = track->track_id;
|
||||||
|
char track_name_buf[32] = { 0 };
|
||||||
|
|
||||||
AVStream *st = track->st;
|
AVStream *st = track->st;
|
||||||
AVDictionaryEntry *lang = av_dict_get(st->metadata, "language", NULL,0);
|
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, "systemBitrate", manifest_bit_rate);
|
||||||
param_write_int(pb, "trackID", track_id);
|
param_write_int(pb, "trackID", track_id);
|
||||||
param_write_string(pb, "systemLanguage", lang ? lang->value : "und");
|
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_type == AVMEDIA_TYPE_VIDEO) {
|
||||||
if (track->par->codec_id == AV_CODEC_ID_H264) {
|
if (track->par->codec_id == AV_CODEC_ID_H264) {
|
||||||
uint8_t *ptr;
|
uint8_t *ptr;
|
||||||
|
|
Loading…
Reference in New Issue