This is required since some softwares are not able to correctly recognize the metadata. --- libavformat/mpegtsenc.c | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-)
diff --git a/libavformat/mpegtsenc.c b/libavformat/mpegtsenc.c index 5f22032..4b9e71b 100644 --- a/libavformat/mpegtsenc.c +++ b/libavformat/mpegtsenc.c @@ -254,7 +254,7 @@ static void mpegts_write_pat(AVFormatContext *s) } /* NOTE: !str is accepted for an empty string */ -static void putstr8(uint8_t **q_ptr, const char *str) +static void putstr8(uint8_t **q_ptr, const char *str, int write_len) { uint8_t *q; int len; @@ -264,7 +264,8 @@ static void putstr8(uint8_t **q_ptr, const char *str) len = 0; else len = strlen(str); - *q++ = len; + if (write_len) + *q++ = len; memcpy(q, str, len); q += len; *q_ptr = q; @@ -626,12 +627,15 @@ static int mpegts_write_pmt(AVFormatContext *s, MpegTSService *service) *q++ = 'V'; *q++ = 'A'; } else if (st->codecpar->codec_id == AV_CODEC_ID_TIMED_ID3) { - *q++ = 0x5; /* MPEG-2 registration descriptor */ - *q++ = 4; - *q++ = 'I'; - *q++ = 'D'; - *q++ = '3'; - *q++ = ' '; + const char *tag = "ID3 "; + *q++ = 0x26; /* metadata descriptor */ + *q++ = 13; + put16(&q, 0xffff); /* metadata application format */ + putstr8(&q, tag, 0); + *q++ = 0xff; /* metadata format */ + putstr8(&q, tag, 0); + *q++ = 0; /* ID */ + *q++ = 0xF; } break; } @@ -676,8 +680,8 @@ static void mpegts_write_sdt(AVFormatContext *s) desc_len_ptr = q; q++; *q++ = ts->service_type; - putstr8(&q, service->provider_name); - putstr8(&q, service->name); + putstr8(&q, service->provider_name, 1); + putstr8(&q, service->name, 1); desc_len_ptr[0] = q - desc_len_ptr - 1; /* fill descriptor length */ -- 1.9.1 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel