You've already forked FFmpeg
mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-07-16 22:42:38 +02:00
flvdec: Export unknown metadata packets as opaque data
Signed-off-by: Martin Storsjö <martin@martin.st>
This commit is contained in:
@ -66,6 +66,7 @@ enum {
|
|||||||
FLV_STREAM_TYPE_VIDEO,
|
FLV_STREAM_TYPE_VIDEO,
|
||||||
FLV_STREAM_TYPE_AUDIO,
|
FLV_STREAM_TYPE_AUDIO,
|
||||||
FLV_STREAM_TYPE_SUBTITLE,
|
FLV_STREAM_TYPE_SUBTITLE,
|
||||||
|
FLV_STREAM_TYPE_DATA,
|
||||||
FLV_STREAM_TYPE_NB,
|
FLV_STREAM_TYPE_NB,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -143,7 +143,9 @@ static AVStream *create_stream(AVFormatContext *s, int codec_type)
|
|||||||
st->codecpar->codec_type = codec_type;
|
st->codecpar->codec_type = codec_type;
|
||||||
if (s->nb_streams>=3 ||( s->nb_streams==2
|
if (s->nb_streams>=3 ||( s->nb_streams==2
|
||||||
&& s->streams[0]->codecpar->codec_type != AVMEDIA_TYPE_SUBTITLE
|
&& s->streams[0]->codecpar->codec_type != AVMEDIA_TYPE_SUBTITLE
|
||||||
&& s->streams[1]->codecpar->codec_type != AVMEDIA_TYPE_SUBTITLE))
|
&& s->streams[1]->codecpar->codec_type != AVMEDIA_TYPE_SUBTITLE
|
||||||
|
&& s->streams[0]->codecpar->codec_type != AVMEDIA_TYPE_DATA
|
||||||
|
&& s->streams[1]->codecpar->codec_type != AVMEDIA_TYPE_DATA))
|
||||||
s->ctx_flags &= ~AVFMTCTX_NOHEADER;
|
s->ctx_flags &= ~AVFMTCTX_NOHEADER;
|
||||||
if (codec_type == AVMEDIA_TYPE_AUDIO) {
|
if (codec_type == AVMEDIA_TYPE_AUDIO) {
|
||||||
st->codecpar->bit_rate = flv->audio_bit_rate;
|
st->codecpar->bit_rate = flv->audio_bit_rate;
|
||||||
@ -1001,7 +1003,7 @@ retry:
|
|||||||
int type;
|
int type;
|
||||||
meta_pos = avio_tell(s->pb);
|
meta_pos = avio_tell(s->pb);
|
||||||
type = flv_read_metabody(s, next);
|
type = flv_read_metabody(s, next);
|
||||||
if (type == 0 && dts == 0 || type < 0 || type == TYPE_UNKNOWN) {
|
if (type == 0 && dts == 0 || type < 0) {
|
||||||
if (type < 0 && flv->validate_count &&
|
if (type < 0 && flv->validate_count &&
|
||||||
flv->validate_index[0].pos > next &&
|
flv->validate_index[0].pos > next &&
|
||||||
flv->validate_index[0].pos - 4 < next
|
flv->validate_index[0].pos - 4 < next
|
||||||
@ -1015,6 +1017,8 @@ retry:
|
|||||||
return flv_data_packet(s, pkt, dts, next);
|
return flv_data_packet(s, pkt, dts, next);
|
||||||
} else if (type == TYPE_ONCAPTION) {
|
} else if (type == TYPE_ONCAPTION) {
|
||||||
return flv_data_packet(s, pkt, dts, next);
|
return flv_data_packet(s, pkt, dts, next);
|
||||||
|
} else if (type == TYPE_UNKNOWN) {
|
||||||
|
stream_type = FLV_STREAM_TYPE_DATA;
|
||||||
}
|
}
|
||||||
avio_seek(s->pb, meta_pos, SEEK_SET);
|
avio_seek(s->pb, meta_pos, SEEK_SET);
|
||||||
}
|
}
|
||||||
@ -1054,10 +1058,13 @@ skip:
|
|||||||
} else if (stream_type == FLV_STREAM_TYPE_SUBTITLE) {
|
} else if (stream_type == FLV_STREAM_TYPE_SUBTITLE) {
|
||||||
if (st->codecpar->codec_type == AVMEDIA_TYPE_SUBTITLE)
|
if (st->codecpar->codec_type == AVMEDIA_TYPE_SUBTITLE)
|
||||||
break;
|
break;
|
||||||
|
} else if (stream_type == FLV_STREAM_TYPE_DATA) {
|
||||||
|
if (st->codecpar->codec_type == AVMEDIA_TYPE_DATA)
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (i == s->nb_streams) {
|
if (i == s->nb_streams) {
|
||||||
static const enum AVMediaType stream_types[] = {AVMEDIA_TYPE_VIDEO, AVMEDIA_TYPE_AUDIO, AVMEDIA_TYPE_SUBTITLE};
|
static const enum AVMediaType stream_types[] = {AVMEDIA_TYPE_VIDEO, AVMEDIA_TYPE_AUDIO, AVMEDIA_TYPE_SUBTITLE, AVMEDIA_TYPE_DATA};
|
||||||
st = create_stream(s, stream_types[stream_type]);
|
st = create_stream(s, stream_types[stream_type]);
|
||||||
if (!st)
|
if (!st)
|
||||||
return AVERROR(ENOMEM);
|
return AVERROR(ENOMEM);
|
||||||
@ -1153,6 +1160,8 @@ retry_duration:
|
|||||||
size -= ret;
|
size -= ret;
|
||||||
} else if (stream_type == FLV_STREAM_TYPE_SUBTITLE) {
|
} else if (stream_type == FLV_STREAM_TYPE_SUBTITLE) {
|
||||||
st->codecpar->codec_id = AV_CODEC_ID_TEXT;
|
st->codecpar->codec_id = AV_CODEC_ID_TEXT;
|
||||||
|
} else if (stream_type == FLV_STREAM_TYPE_DATA) {
|
||||||
|
st->codecpar->codec_id = AV_CODEC_ID_NONE; // Opaque AMF data
|
||||||
}
|
}
|
||||||
|
|
||||||
if (st->codecpar->codec_id == AV_CODEC_ID_AAC ||
|
if (st->codecpar->codec_id == AV_CODEC_ID_AAC ||
|
||||||
@ -1253,7 +1262,8 @@ retry_duration:
|
|||||||
|
|
||||||
if ( stream_type == FLV_STREAM_TYPE_AUDIO ||
|
if ( stream_type == FLV_STREAM_TYPE_AUDIO ||
|
||||||
((flags & FLV_VIDEO_FRAMETYPE_MASK) == FLV_FRAME_KEY) ||
|
((flags & FLV_VIDEO_FRAMETYPE_MASK) == FLV_FRAME_KEY) ||
|
||||||
stream_type == FLV_STREAM_TYPE_SUBTITLE)
|
stream_type == FLV_STREAM_TYPE_SUBTITLE ||
|
||||||
|
stream_type == FLV_STREAM_TYPE_DATA)
|
||||||
pkt->flags |= AV_PKT_FLAG_KEY;
|
pkt->flags |= AV_PKT_FLAG_KEY;
|
||||||
|
|
||||||
leave:
|
leave:
|
||||||
|
@ -32,7 +32,7 @@
|
|||||||
// Major bumping may affect Ticket5467, 5421, 5451(compatibility with Chromium)
|
// Major bumping may affect Ticket5467, 5421, 5451(compatibility with Chromium)
|
||||||
// Also please add any ticket numbers that you believe might be affected here
|
// Also please add any ticket numbers that you believe might be affected here
|
||||||
#define LIBAVFORMAT_VERSION_MAJOR 58
|
#define LIBAVFORMAT_VERSION_MAJOR 58
|
||||||
#define LIBAVFORMAT_VERSION_MINOR 21
|
#define LIBAVFORMAT_VERSION_MINOR 22
|
||||||
#define LIBAVFORMAT_VERSION_MICRO 100
|
#define LIBAVFORMAT_VERSION_MICRO 100
|
||||||
|
|
||||||
#define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \
|
#define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, \
|
||||||
|
Reference in New Issue
Block a user