Message ID | 20230413094441.56225-2-lq@chinaffmpeg.org |
---|---|
State | New |
Headers | show |
Series | Suppor hevc av1 and vp9 codec in enhanced flv | expand |
Context | Check | Description |
---|---|---|
yinshiyou/make_loongarch64 | success | Make finished |
yinshiyou/make_fate_loongarch64 | success | Make fate finished |
andriy/make_x86 | success | Make finished |
andriy/make_fate_x86 | success | Make fate finished |
Steven Liu: > Signed-off-by: Steven Liu <lq@chinaffmpeg.org> > --- > libavformat/flv.h | 15 +++++++++++++++ > libavformat/flvenc.c | 41 +++++++++++++++++++++++++++++++---------- > 2 files changed, 46 insertions(+), 10 deletions(-) > > diff --git a/libavformat/flv.h b/libavformat/flv.h > index 3571b90279..91e0a4140c 100644 > --- a/libavformat/flv.h > +++ b/libavformat/flv.h > @@ -35,6 +35,12 @@ > > #define FLV_VIDEO_FRAMETYPE_OFFSET 4 > > +/* Extended VideoTagHeader > + * defined in reference link: > + * https://github.com/veovera/enhanced-rtmp/blob/main/enhanced-rtmp-v1.pdf > + * */ > +#define FLV_IS_EX_HEADER 0x80 > + > /* bitmasks to isolate specific values */ > #define FLV_AUDIO_CHANNEL_MASK 0x01 > #define FLV_AUDIO_SAMPLESIZE_MASK 0x02 > @@ -112,6 +118,15 @@ enum { > FLV_CODECID_MPEG4 = 9, > }; > > +enum { > + PacketTypeSequenceStart = 0, > + PacketTypeCodedFrames = 1, > + PacketTypeSequenceEnd = 2, > + PacketTypeCodedFramesX = 3, > + PacketTypeMetadata = 4, > + PacketTypeMPEG2TSSequenceStart = 5, > +}; > + > enum { > FLV_FRAME_KEY = 1 << FLV_VIDEO_FRAMETYPE_OFFSET, ///< key frame (for AVC, a seekable frame) > FLV_FRAME_INTER = 2 << FLV_VIDEO_FRAMETYPE_OFFSET, ///< inter frame (for AVC, a non-seekable frame) > diff --git a/libavformat/flvenc.c b/libavformat/flvenc.c > index fbf7eabaf8..57a26245ff 100644 > --- a/libavformat/flvenc.c > +++ b/libavformat/flvenc.c > @@ -28,6 +28,7 @@ > #include "libavcodec/mpeg4audio.h" > #include "avio.h" > #include "avc.h" > +#include "hevc.h" > #include "avformat.h" > #include "flv.h" > #include "internal.h" > @@ -46,6 +47,7 @@ static const AVCodecTag flv_video_codec_ids[] = { > { AV_CODEC_ID_VP6, FLV_CODECID_VP6 }, > { AV_CODEC_ID_VP6A, FLV_CODECID_VP6A }, > { AV_CODEC_ID_H264, FLV_CODECID_H264 }, > + { AV_CODEC_ID_HEVC, MKBETAG('h', 'v', 'c', '1') }, > { AV_CODEC_ID_NONE, 0 } > }; > > @@ -492,7 +494,7 @@ static void flv_write_codec_header(AVFormatContext* s, AVCodecParameters* par, i > FLVContext *flv = s->priv_data; > > if (par->codec_id == AV_CODEC_ID_AAC || par->codec_id == AV_CODEC_ID_H264 > - || par->codec_id == AV_CODEC_ID_MPEG4) { > + || par->codec_id == AV_CODEC_ID_MPEG4 || par->codec_id == AV_CODEC_ID_HEVC) { > int64_t pos; > avio_w8(pb, > par->codec_type == AVMEDIA_TYPE_VIDEO ? > @@ -535,10 +537,19 @@ static void flv_write_codec_header(AVFormatContext* s, AVCodecParameters* par, i > } > avio_write(pb, par->extradata, par->extradata_size); > } else { > - avio_w8(pb, par->codec_tag | FLV_FRAME_KEY); // flags > - avio_w8(pb, 0); // AVC sequence header > - avio_wb24(pb, 0); // composition time > - ff_isom_write_avcc(pb, par->extradata, par->extradata_size); > + if (par->codec_id == AV_CODEC_ID_HEVC) { > + avio_w8(pb, FLV_IS_EX_HEADER | PacketTypeSequenceStart); // ExVideoTagHeader mode with PacketTypeSequenceStart > + avio_write(pb, "hvc1", 4); > + } else { > + avio_w8(pb, par->codec_tag | FLV_FRAME_KEY); // flags > + avio_w8(pb, 0); // AVC sequence header > + avio_wb24(pb, 0); // composition time > + } > + > + if (par->codec_id == AV_CODEC_ID_HEVC) > + ff_isom_write_hvcc(pb, par->extradata, par->extradata_size, 0); > + else > + ff_isom_write_avcc(pb, par->extradata, par->extradata_size); > } > data_size = avio_tell(pb) - pos; > avio_seek(pb, -data_size - 10, SEEK_CUR); > @@ -628,7 +639,8 @@ static int flv_init(struct AVFormatContext *s) > return unsupported_codec(s, "Video", par->codec_id); > > if (par->codec_id == AV_CODEC_ID_MPEG4 || > - par->codec_id == AV_CODEC_ID_H263) { > + par->codec_id == AV_CODEC_ID_H263 || > + par->codec_id == AV_CODEC_ID_HEVC) { > int error = s->strict_std_compliance > FF_COMPLIANCE_UNOFFICIAL; > av_log(s, error ? AV_LOG_ERROR : AV_LOG_WARNING, > "Codec %s is not supported in the official FLV specification,\n", avcodec_get_name(par->codec_id)); > @@ -836,13 +848,13 @@ static int flv_write_packet(AVFormatContext *s, AVPacket *pkt) > if (par->codec_id == AV_CODEC_ID_VP6F || par->codec_id == AV_CODEC_ID_VP6A || > par->codec_id == AV_CODEC_ID_VP6 || par->codec_id == AV_CODEC_ID_AAC) > flags_size = 2; > - else if (par->codec_id == AV_CODEC_ID_H264 || par->codec_id == AV_CODEC_ID_MPEG4) > + else if (par->codec_id == AV_CODEC_ID_H264 || par->codec_id == AV_CODEC_ID_MPEG4 || par->codec_id == AV_CODEC_ID_HEVC) > flags_size = 5; > else > flags_size = 1; > > if (par->codec_id == AV_CODEC_ID_AAC || par->codec_id == AV_CODEC_ID_H264 > - || par->codec_id == AV_CODEC_ID_MPEG4) { > + || par->codec_id == AV_CODEC_ID_MPEG4 || par->codec_id == AV_CODEC_ID_HEVC) { > size_t side_size; > uint8_t *side = av_packet_get_side_data(pkt, AV_PKT_DATA_NEW_EXTRADATA, &side_size); > if (side && side_size > 0 && (side_size != par->extradata_size || memcmp(side, par->extradata, side_size))) { > @@ -862,7 +874,7 @@ static int flv_write_packet(AVFormatContext *s, AVPacket *pkt) > "Packets are not in the proper order with respect to DTS\n"); > return AVERROR(EINVAL); > } > - if (par->codec_id == AV_CODEC_ID_H264 || par->codec_id == AV_CODEC_ID_MPEG4) { > + if (par->codec_id == AV_CODEC_ID_H264 || par->codec_id == AV_CODEC_ID_MPEG4 || par->codec_id == AV_CODEC_ID_HEVC) { > if (pkt->pts == AV_NOPTS_VALUE) { > av_log(s, AV_LOG_ERROR, "Packet is missing PTS\n"); > return AVERROR(EINVAL); > @@ -907,6 +919,10 @@ static int flv_write_packet(AVFormatContext *s, AVPacket *pkt) > if (par->extradata_size > 0 && *(uint8_t*)par->extradata != 1) > if ((ret = ff_avc_parse_nal_units_buf(pkt->data, &data, &size)) < 0) > return ret; > + } else if (par->codec_id == AV_CODEC_ID_HEVC) { > + if (par->extradata_size > 0 && *(uint8_t*)par->extradata != 1) > + if ((ret = ff_hevc_annexb2mp4_buf(pkt->data, &data, &size, 0, NULL)) < 0) This requires a flvenc->hevc.o Makefile dependency. Similarly for other patches in this patchset. > + return ret; > } else if (par->codec_id == AV_CODEC_ID_AAC && pkt->size > 2 && > (AV_RB16(pkt->data) & 0xfff0) == 0xfff0) { > if (!s->streams[pkt->stream_index]->nb_frames) { > @@ -968,7 +984,12 @@ static int flv_write_packet(AVFormatContext *s, AVPacket *pkt) > avio_wb32(pb, data_size + 11); > } else { > av_assert1(flags>=0); > - avio_w8(pb,flags); > + if (par->codec_id == AV_CODEC_ID_HEVC) { > + avio_w8(pb, FLV_IS_EX_HEADER | PacketTypeCodedFramesX); // ExVideoTagHeader mode with PacketTypeCodedFramesX > + avio_write(pb, "hvc1", 4); > + } else { > + avio_w8(pb, flags); > + } > if (par->codec_id == AV_CODEC_ID_VP6) > avio_w8(pb,0); > if (par->codec_id == AV_CODEC_ID_VP6F || par->codec_id == AV_CODEC_ID_VP6A) {
On 12/05/2023 05:58, Steven Liu wrote: > Reference file: https://github.com/veovera/enhanced-rtmp/blob/main/enhanced-rtmp-v1.pdf > The Enhanced flv has been supported by OBS, Simple Realtime Server, mpegts.js. > you can publish hevc, av1 or vp9 codec stream to Youtube over rtmp. > The enhanced flv documentation contributors include > Jean-Baptiste Kempf (FFmpeg, VideoLAN). > So this should be support by ffmpeg too. > > v8: > Support vp9 codec according to enhanced flv. > Support PacketTypeCodedFrames type for hevc in flv. > v9: > Add dependency codec object files for flvenc in Makefile. > Move the hevc,av1,vp9 codec out of FF_COMPLIANCE_UNOFFICIAL. > > Steven Liu (6): > avformat/flvenc: Add support for HEVC over flv in muxer This is very much a nit, but one of those commit messages is not like the others :D > avformat/flvdec: support demux hevc in enhanced flv > avformat/flvenc: support mux av1 in enhanced flv > avformat/flvdec: support demux av1 in enhanced flv > avformat/flvenc: support mux vp9 in enhanced flv > avformat/flvenc: support demux vp9 in enhanced flv > > libavformat/Makefile | 2 +- > libavformat/flv.h | 15 +++++++++ > libavformat/flvdec.c | 73 +++++++++++++++++++++++++++++++++++++++----- > libavformat/flvenc.c | 58 +++++++++++++++++++++++++++++------ > 4 files changed, 130 insertions(+), 18 deletions(-) >
Timo Rothenpieler <timo@rothenpieler.org> 于2023年5月12日周五 18:30写道: Hi Timo, > > On 12/05/2023 05:58, Steven Liu wrote: > > Reference file: https://github.com/veovera/enhanced-rtmp/blob/main/enhanced-rtmp-v1.pdf > > The Enhanced flv has been supported by OBS, Simple Realtime Server, mpegts.js. > > you can publish hevc, av1 or vp9 codec stream to Youtube over rtmp. > > The enhanced flv documentation contributors include > > Jean-Baptiste Kempf (FFmpeg, VideoLAN). > > So this should be support by ffmpeg too. > > > > v8: > > Support vp9 codec according to enhanced flv. > > Support PacketTypeCodedFrames type for hevc in flv. > > v9: > > Add dependency codec object files for flvenc in Makefile. > > Move the hevc,av1,vp9 codec out of FF_COMPLIANCE_UNOFFICIAL. > > > > Steven Liu (6): > > avformat/flvenc: Add support for HEVC over flv in muxer > > This is very much a nit, but one of those commit messages is not like > the others :D Should i resubmit one patch named v10? Or should i modify it like the others before push? :D > > > avformat/flvdec: support demux hevc in enhanced flv > > avformat/flvenc: support mux av1 in enhanced flv > > avformat/flvdec: support demux av1 in enhanced flv > > avformat/flvenc: support mux vp9 in enhanced flv > > avformat/flvenc: support demux vp9 in enhanced flv > > > > libavformat/Makefile | 2 +- > > libavformat/flv.h | 15 +++++++++ > > libavformat/flvdec.c | 73 +++++++++++++++++++++++++++++++++++++++----- > > libavformat/flvenc.c | 58 +++++++++++++++++++++++++++++------ > > 4 files changed, 130 insertions(+), 18 deletions(-) > > Thanks Steven
Hi, On Fri, 12 May 2023 at 04:59, Steven Liu <lq@chinaffmpeg.org> wrote: > > Reference file: https://github.com/veovera/enhanced-rtmp/blob/main/enhanced-rtmp-v1.pdf > The Enhanced flv has been supported by OBS, Simple Realtime Server, mpegts.js. > you can publish hevc, av1 or vp9 codec stream to Youtube over rtmp. > The enhanced flv documentation contributors include > Jean-Baptiste Kempf (FFmpeg, VideoLAN). > So this should be support by ffmpeg too. > > v8: > Support vp9 codec according to enhanced flv. > Support PacketTypeCodedFrames type for hevc in flv. > v9: > Add dependency codec object files for flvenc in Makefile. > Move the hevc,av1,vp9 codec out of FF_COMPLIANCE_UNOFFICIAL. > > Steven Liu (6): > avformat/flvenc: Add support for HEVC over flv in muxer > avformat/flvdec: support demux hevc in enhanced flv > avformat/flvenc: support mux av1 in enhanced flv > avformat/flvdec: support demux av1 in enhanced flv > avformat/flvenc: support mux vp9 in enhanced flv > avformat/flvenc: support demux vp9 in enhanced flv Nit: Shouldn't the commit message be pointing flvdec ("avformat/flvdec") instead of flvenc ("avformat/flvenc") for VP9 demuxer support? I could see the changes being made to, libavformat/flvdec.c | 11 +++++++++--, in the patch set. > > libavformat/Makefile | 2 +- > libavformat/flv.h | 15 +++++++++ > libavformat/flvdec.c | 73 +++++++++++++++++++++++++++++++++++++++----- > libavformat/flvenc.c | 58 +++++++++++++++++++++++++++++------ > 4 files changed, 130 insertions(+), 18 deletions(-) > > -- > 2.40.0 > > _______________________________________________ > ffmpeg-devel mailing list > ffmpeg-devel@ffmpeg.org > https://ffmpeg.org/mailman/listinfo/ffmpeg-devel > > To unsubscribe, visit link above, or email > ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". Best, V
On 12/05/2023 12:47, Steven Liu wrote: > Timo Rothenpieler <timo@rothenpieler.org> 于2023年5月12日周五 18:30写道: > Hi Timo, >> >> On 12/05/2023 05:58, Steven Liu wrote: >>> Reference file: https://github.com/veovera/enhanced-rtmp/blob/main/enhanced-rtmp-v1.pdf >>> The Enhanced flv has been supported by OBS, Simple Realtime Server, mpegts.js. >>> you can publish hevc, av1 or vp9 codec stream to Youtube over rtmp. >>> The enhanced flv documentation contributors include >>> Jean-Baptiste Kempf (FFmpeg, VideoLAN). >>> So this should be support by ffmpeg too. >>> >>> v8: >>> Support vp9 codec according to enhanced flv. >>> Support PacketTypeCodedFrames type for hevc in flv. >>> v9: >>> Add dependency codec object files for flvenc in Makefile. >>> Move the hevc,av1,vp9 codec out of FF_COMPLIANCE_UNOFFICIAL. >>> >>> Steven Liu (6): >>> avformat/flvenc: Add support for HEVC over flv in muxer >> >> This is very much a nit, but one of those commit messages is not like >> the others :D > Should i resubmit one patch named v10? Or should i modify it like the > others before push? :D Resubmitting the series for it seems silly. Just format it like the other ones locally :D
Vibhoothi <vibhoothiiaanand@gmail.com> 于2023年5月12日周五 18:48写道: > > Hi, > > On Fri, 12 May 2023 at 04:59, Steven Liu <lq@chinaffmpeg.org> wrote: > > > > Reference file: https://github.com/veovera/enhanced-rtmp/blob/main/enhanced-rtmp-v1.pdf > > The Enhanced flv has been supported by OBS, Simple Realtime Server, mpegts.js. > > you can publish hevc, av1 or vp9 codec stream to Youtube over rtmp. > > The enhanced flv documentation contributors include > > Jean-Baptiste Kempf (FFmpeg, VideoLAN). > > So this should be support by ffmpeg too. > > > > v8: > > Support vp9 codec according to enhanced flv. > > Support PacketTypeCodedFrames type for hevc in flv. > > v9: > > Add dependency codec object files for flvenc in Makefile. > > Move the hevc,av1,vp9 codec out of FF_COMPLIANCE_UNOFFICIAL. > > > > Steven Liu (6): > > avformat/flvenc: Add support for HEVC over flv in muxer > > avformat/flvdec: support demux hevc in enhanced flv > > avformat/flvenc: support mux av1 in enhanced flv > > avformat/flvdec: support demux av1 in enhanced flv > > avformat/flvenc: support mux vp9 in enhanced flv > > avformat/flvenc: support demux vp9 in enhanced flv > Nit: Shouldn't the commit message be pointing flvdec > ("avformat/flvdec") instead of flvenc ("avformat/flvenc") for > VP9 demuxer support? Good catch, Thanks Vibhoothi fix it localy. > > I could see the changes being made to, > libavformat/flvdec.c | 11 +++++++++--, > in the patch set. > > > > > libavformat/Makefile | 2 +- > > libavformat/flv.h | 15 +++++++++ > > libavformat/flvdec.c | 73 +++++++++++++++++++++++++++++++++++++++----- > > libavformat/flvenc.c | 58 +++++++++++++++++++++++++++++------ > > 4 files changed, 130 insertions(+), 18 deletions(-) > > > > -- > > 2.40.0 > > Thanks Steven
On Fri, May 12, 2023 at 7:59 AM Steven Liu <lingjiujianke@gmail.com> wrote: > > Vibhoothi <vibhoothiiaanand@gmail.com> 于2023年5月12日周五 18:48写道: > > > > Hi, > > > > On Fri, 12 May 2023 at 04:59, Steven Liu <lq@chinaffmpeg.org> wrote: > > > > > > Reference file: https://github.com/veovera/enhanced-rtmp/blob/main/enhanced-rtmp-v1.pdf > > > The Enhanced flv has been supported by OBS, Simple Realtime Server, mpegts.js. > > > you can publish hevc, av1 or vp9 codec stream to Youtube over rtmp. > > > The enhanced flv documentation contributors include > > > Jean-Baptiste Kempf (FFmpeg, VideoLAN). > > > So this should be support by ffmpeg too. > > > > > > v8: > > > Support vp9 codec according to enhanced flv. > > > Support PacketTypeCodedFrames type for hevc in flv. > > > v9: > > > Add dependency codec object files for flvenc in Makefile. > > > Move the hevc,av1,vp9 codec out of FF_COMPLIANCE_UNOFFICIAL. > > > > > > Steven Liu (6): > > > avformat/flvenc: Add support for HEVC over flv in muxer > > > avformat/flvdec: support demux hevc in enhanced flv > > > avformat/flvenc: support mux av1 in enhanced flv > > > avformat/flvdec: support demux av1 in enhanced flv > > > avformat/flvenc: support mux vp9 in enhanced flv > > > avformat/flvenc: support demux vp9 in enhanced flv > > Nit: Shouldn't the commit message be pointing flvdec > > ("avformat/flvdec") instead of flvenc ("avformat/flvenc") for > > VP9 demuxer support? > Good catch, > Thanks Vibhoothi > > fix it localy. > > > > I could see the changes being made to, > > libavformat/flvdec.c | 11 +++++++++--, > > in the patch set. > > > > > > > > libavformat/Makefile | 2 +- > > > libavformat/flv.h | 15 +++++++++ > > > libavformat/flvdec.c | 73 +++++++++++++++++++++++++++++++++++++++----- > > > libavformat/flvenc.c | 58 +++++++++++++++++++++++++++++------ > > > 4 files changed, 130 insertions(+), 18 deletions(-) > > > > > > -- > > > 2.40.0 > > > > I've applied your patch set to Fedora's ffmpeg 6.0 on Fedora 38 and attempted to test it. It seems to mostly work now, except that AAC audio doesn't play in the AV1+AAC sample remuxed from MKV to FLV. My H264+AAC sample seems to work properly though. Here are reproducer samples: https://ngompa.fedorapeople.org/obs-recording-samples.tar My command for remuxing them is simple: $ ffmpeg -i "input.mkv" -vcodec copy -acodec copy "output.flv"
Neal Gompa <ngompa13@gmail.com> 于2023年5月13日周六 10:41写道: Hi Neal, > > > I've applied your patch set to Fedora's ffmpeg 6.0 on Fedora 38 and > attempted to test it. It seems to mostly work now, except that AAC > audio doesn't play in the AV1+AAC sample remuxed from MKV to FLV. My > H264+AAC sample seems to work properly though. > > Here are reproducer samples: > https://ngompa.fedorapeople.org/obs-recording-samples.tar > > My command for remuxing them is simple: > > $ ffmpeg -i "input.mkv" -vcodec copy -acodec copy "output.flv" Thanks for your test, that because the exheader flag is used in audio stream too, It should used in video stream and exheader mode. Thanks Steven
On Mon, May 15, 2023 at 4:32 AM Steven Liu <lq@chinaffmpeg.org> wrote: > > Reference file: https://github.com/veovera/enhanced-rtmp/blob/main/enhanced-rtmp-v1.pdf > The Enhanced flv has been supported by OBS, Simple Realtime Server, mpegts.js. > you can publish hevc, av1 or vp9 codec stream to Youtube over rtmp. > The enhanced flv documentation contributors include > Jean-Baptiste Kempf (FFmpeg, VideoLAN). > So this should be support by ffmpeg too. > > v8: > Support vp9 codec according to enhanced flv. > Support PacketTypeCodedFrames type for hevc in flv. > v9: > Add dependency codec object files for flvenc in Makefile. > Move the hevc,av1,vp9 codec out of FF_COMPLIANCE_UNOFFICIAL. > > v10: > modify first patch comment like the others before commit. > exheader mode should only happened in video stream this patchset. > > Steven Liu (6): > avformat/flvenc: support mux hevc in enhanced flv > avformat/flvdec: support demux hevc in enhanced flv > avformat/flvenc: support mux av1 in enhanced flv > avformat/flvdec: support demux av1 in enhanced flv > avformat/flvenc: support mux vp9 in enhanced flv > avformat/flvdec: support demux vp9 in enhanced flv > > libavformat/Makefile | 2 +- > libavformat/flv.h | 15 +++++++++ > libavformat/flvdec.c | 73 +++++++++++++++++++++++++++++++++++++++----- > libavformat/flvenc.c | 58 +++++++++++++++++++++++++++++------ > 4 files changed, 130 insertions(+), 18 deletions(-) > This version works for me. Thanks for this work! Tested-by: Neal Gompa <ngompa13@gmail.com> Reviewed-by: Neal Gompa <ngompa13@gmail.com>
On Mon, May 15, 2023 at 10:41 PM Neal Gompa <ngompa13@gmail.com> wrote: > > On Mon, May 15, 2023 at 4:32 AM Steven Liu <lq@chinaffmpeg.org> wrote: > > > > Reference file: https://github.com/veovera/enhanced-rtmp/blob/main/enhanced-rtmp-v1.pdf > > The Enhanced flv has been supported by OBS, Simple Realtime Server, mpegts.js. > > you can publish hevc, av1 or vp9 codec stream to Youtube over rtmp. > > The enhanced flv documentation contributors include > > Jean-Baptiste Kempf (FFmpeg, VideoLAN). > > So this should be support by ffmpeg too. > > > > v8: > > Support vp9 codec according to enhanced flv. > > Support PacketTypeCodedFrames type for hevc in flv. > > v9: > > Add dependency codec object files for flvenc in Makefile. > > Move the hevc,av1,vp9 codec out of FF_COMPLIANCE_UNOFFICIAL. > > > > v10: > > modify first patch comment like the others before commit. > > exheader mode should only happened in video stream this patchset. > > > > Steven Liu (6): > > avformat/flvenc: support mux hevc in enhanced flv > > avformat/flvdec: support demux hevc in enhanced flv > > avformat/flvenc: support mux av1 in enhanced flv > > avformat/flvdec: support demux av1 in enhanced flv > > avformat/flvenc: support mux vp9 in enhanced flv > > avformat/flvdec: support demux vp9 in enhanced flv > > > > libavformat/Makefile | 2 +- > > libavformat/flv.h | 15 +++++++++ > > libavformat/flvdec.c | 73 +++++++++++++++++++++++++++++++++++++++----- > > libavformat/flvenc.c | 58 +++++++++++++++++++++++++++++------ > > 4 files changed, 130 insertions(+), 18 deletions(-) > > > > This version works for me. Thanks for this work! > > Tested-by: Neal Gompa <ngompa13@gmail.com> > Reviewed-by: Neal Gompa <ngompa13@gmail.com> > Is this patch set going to get pushed to master anytime soon?
Neal Gompa <ngompa13@gmail.com> 于2023年5月31日周三 13:47写道: > > On Mon, May 15, 2023 at 10:41 PM Neal Gompa <ngompa13@gmail.com> wrote: > > > > On Mon, May 15, 2023 at 4:32 AM Steven Liu <lq@chinaffmpeg.org> wrote: > > > > > > Reference file: https://github.com/veovera/enhanced-rtmp/blob/main/enhanced-rtmp-v1.pdf > > > The Enhanced flv has been supported by OBS, Simple Realtime Server, mpegts.js. > > > you can publish hevc, av1 or vp9 codec stream to Youtube over rtmp. > > > The enhanced flv documentation contributors include > > > Jean-Baptiste Kempf (FFmpeg, VideoLAN). > > > So this should be support by ffmpeg too. > > > > > > v8: > > > Support vp9 codec according to enhanced flv. > > > Support PacketTypeCodedFrames type for hevc in flv. > > > v9: > > > Add dependency codec object files for flvenc in Makefile. > > > Move the hevc,av1,vp9 codec out of FF_COMPLIANCE_UNOFFICIAL. > > > > > > v10: > > > modify first patch comment like the others before commit. > > > exheader mode should only happened in video stream this patchset. > > > > > > Steven Liu (6): > > > avformat/flvenc: support mux hevc in enhanced flv > > > avformat/flvdec: support demux hevc in enhanced flv > > > avformat/flvenc: support mux av1 in enhanced flv > > > avformat/flvdec: support demux av1 in enhanced flv > > > avformat/flvenc: support mux vp9 in enhanced flv > > > avformat/flvdec: support demux vp9 in enhanced flv > > > > > > libavformat/Makefile | 2 +- > > > libavformat/flv.h | 15 +++++++++ > > > libavformat/flvdec.c | 73 +++++++++++++++++++++++++++++++++++++++----- > > > libavformat/flvenc.c | 58 +++++++++++++++++++++++++++++------ > > > 4 files changed, 130 insertions(+), 18 deletions(-) > > > > > > > This version works for me. Thanks for this work! > > > > Tested-by: Neal Gompa <ngompa13@gmail.com> > > Reviewed-by: Neal Gompa <ngompa13@gmail.com> > > > > Is this patch set going to get pushed to master anytime soon? Hi Neal, Waiting for j-b check about the Enhanced-FLV status, i cannot sure if this patch can be pushed now. Thanks Steven
> you can publish hevc, av1 or vp9 codec stream to Youtube over rtmp. Were you able to push av1 or vp9 to Youtube with this patchset alone? Best, -t On Wed, May 31, 2023 at 8:03 PM Steven Liu <lingjiujianke@gmail.com> wrote: > > Neal Gompa <ngompa13@gmail.com> 于2023年5月31日周三 13:47写道: > > > > On Mon, May 15, 2023 at 10:41 PM Neal Gompa <ngompa13@gmail.com> wrote: > > > > > > On Mon, May 15, 2023 at 4:32 AM Steven Liu <lq@chinaffmpeg.org> wrote: > > > > > > > > Reference file: https://github.com/veovera/enhanced-rtmp/blob/main/enhanced-rtmp-v1.pdf > > > > The Enhanced flv has been supported by OBS, Simple Realtime Server, mpegts.js. > > > > you can publish hevc, av1 or vp9 codec stream to Youtube over rtmp. > > > > The enhanced flv documentation contributors include > > > > Jean-Baptiste Kempf (FFmpeg, VideoLAN). > > > > So this should be support by ffmpeg too. > > > > > > > > v8: > > > > Support vp9 codec according to enhanced flv. > > > > Support PacketTypeCodedFrames type for hevc in flv. > > > > v9: > > > > Add dependency codec object files for flvenc in Makefile. > > > > Move the hevc,av1,vp9 codec out of FF_COMPLIANCE_UNOFFICIAL. > > > > > > > > v10: > > > > modify first patch comment like the others before commit. > > > > exheader mode should only happened in video stream this patchset. > > > > > > > > Steven Liu (6): > > > > avformat/flvenc: support mux hevc in enhanced flv > > > > avformat/flvdec: support demux hevc in enhanced flv > > > > avformat/flvenc: support mux av1 in enhanced flv > > > > avformat/flvdec: support demux av1 in enhanced flv > > > > avformat/flvenc: support mux vp9 in enhanced flv > > > > avformat/flvdec: support demux vp9 in enhanced flv > > > > > > > > libavformat/Makefile | 2 +- > > > > libavformat/flv.h | 15 +++++++++ > > > > libavformat/flvdec.c | 73 +++++++++++++++++++++++++++++++++++++++----- > > > > libavformat/flvenc.c | 58 +++++++++++++++++++++++++++++------ > > > > 4 files changed, 130 insertions(+), 18 deletions(-) > > > > > > > > > > This version works for me. Thanks for this work! > > > > > > Tested-by: Neal Gompa <ngompa13@gmail.com> > > > Reviewed-by: Neal Gompa <ngompa13@gmail.com> > > > > > > > Is this patch set going to get pushed to master anytime soon? > > Hi Neal, > > Waiting for j-b check about the Enhanced-FLV status, i cannot sure if > this patch can be pushed now. > > > > > Thanks > Steven > _______________________________________________ > ffmpeg-devel mailing list > ffmpeg-devel@ffmpeg.org > https://ffmpeg.org/mailman/listinfo/ffmpeg-devel > > To unsubscribe, visit link above, or email > ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
Tristan Matthews <tmatth@videolan.org> 于2023年6月1日周四 13:03写道: > > > you can publish hevc, av1 or vp9 codec stream to Youtube over rtmp. > > Were you able to push av1 or vp9 to Youtube with this patchset alone? I've tested push them after after this patchset, do you mean you get some problems after this patchset? Thanks Steven
Hello, On Thu, 1 Jun 2023, at 02:02, Steven Liu wrote: > Neal Gompa <ngompa13@gmail.com> 于2023年5月31日周三 13:47写道: >> >> On Mon, May 15, 2023 at 10:41 PM Neal Gompa <ngompa13@gmail.com> wrote: >> > >> > On Mon, May 15, 2023 at 4:32 AM Steven Liu <lq@chinaffmpeg.org> wrote: >> > > >> > > Reference file: https://github.com/veovera/enhanced-rtmp/blob/main/enhanced-rtmp-v1.pdf >> > > The Enhanced flv has been supported by OBS, Simple Realtime Server, mpegts.js. >> > > you can publish hevc, av1 or vp9 codec stream to Youtube over rtmp. >> > > The enhanced flv documentation contributors include >> > > Jean-Baptiste Kempf (FFmpeg, VideoLAN). >> > > So this should be support by ffmpeg too. >> > > >> > > v8: >> > > Support vp9 codec according to enhanced flv. >> > > Support PacketTypeCodedFrames type for hevc in flv. >> > > v9: >> > > Add dependency codec object files for flvenc in Makefile. >> > > Move the hevc,av1,vp9 codec out of FF_COMPLIANCE_UNOFFICIAL. >> > > >> > > v10: >> > > modify first patch comment like the others before commit. >> > > exheader mode should only happened in video stream this patchset. >> > > >> > > Steven Liu (6): >> > > avformat/flvenc: support mux hevc in enhanced flv >> > > avformat/flvdec: support demux hevc in enhanced flv >> > > avformat/flvenc: support mux av1 in enhanced flv >> > > avformat/flvdec: support demux av1 in enhanced flv >> > > avformat/flvenc: support mux vp9 in enhanced flv >> > > avformat/flvdec: support demux vp9 in enhanced flv >> > > >> > > libavformat/Makefile | 2 +- >> > > libavformat/flv.h | 15 +++++++++ >> > > libavformat/flvdec.c | 73 +++++++++++++++++++++++++++++++++++++++----- >> > > libavformat/flvenc.c | 58 +++++++++++++++++++++++++++++------ >> > > 4 files changed, 130 insertions(+), 18 deletions(-) >> > > >> > >> > This version works for me. Thanks for this work! >> > >> > Tested-by: Neal Gompa <ngompa13@gmail.com> >> > Reviewed-by: Neal Gompa <ngompa13@gmail.com> >> > >> >> Is this patch set going to get pushed to master anytime soon? > > Hi Neal, > > Waiting for j-b check about the Enhanced-FLV status, i cannot sure if > this patch can be pushed now. I've just re-asked what is the final status of the spec. If you cannot wait, use experimental flags. jb
On Thu, Jun 1, 2023 at 2:08 AM Steven Liu <lingjiujianke@gmail.com> wrote: > > Tristan Matthews <tmatth@videolan.org> 于2023年6月1日周四 13:03写道: > > > > > you can publish hevc, av1 or vp9 codec stream to Youtube over rtmp. > > > > Were you able to push av1 or vp9 to Youtube with this patchset alone? > I've tested push them after after this patchset, do you mean you get > some problems after this patchset? Yeah for me at least vp9 and av1 are falling over when I try to push to youtube over RTMP, I was under the impression that beyond patching the FLV muxer you'd also need to add a `fourCcList` to the connect command of the rtmp muxer (see "Extending NetConnection connect command" of https://github.com/veovera/enhanced-rtmp/blob/main/enhanced-rtmp-v1.pdf). In any case that's not really the scope of this patchset and I don't want to derail the discussion, muxing to an flv file works fine. I just wanted to clarify what was possible with these changes and I'm surprised that you were able to push to youtube live with this given the above, as I am not. Best, -t > > > Thanks > Steven > _______________________________________________ > ffmpeg-devel mailing list > ffmpeg-devel@ffmpeg.org > https://ffmpeg.org/mailman/listinfo/ffmpeg-devel > > To unsubscribe, visit link above, or email > ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
Tristan Matthews <tmatth@videolan.org> 于2023年6月2日周五 01:58写道: > > On Thu, Jun 1, 2023 at 2:08 AM Steven Liu <lingjiujianke@gmail.com> wrote: > > > > Tristan Matthews <tmatth@videolan.org> 于2023年6月1日周四 13:03写道: > > > > > > > you can publish hevc, av1 or vp9 codec stream to Youtube over rtmp. > > > > > > Were you able to push av1 or vp9 to Youtube with this patchset alone? > > I've tested push them after after this patchset, do you mean you get > > some problems after this patchset? > > Yeah for me at least vp9 and av1 are falling over when I try to push > to youtube over RTMP, I was under the impression that beyond patching > the FLV muxer you'd also need to add a `fourCcList` to the connect > command of the rtmp muxer (see "Extending NetConnection connect > command" of https://github.com/veovera/enhanced-rtmp/blob/main/enhanced-rtmp-v1.pdf). > > In any case that's not really the scope of this patchset and I don't > want to derail the discussion, muxing to an flv file works fine. I > just wanted to clarify what was possible with these changes and I'm > surprised that you were able to push to youtube live with this given > the above, as I am not. I tested publish the two codecs type, av1,vp9 to youtube, and i can play by youtube player, but i saw the stream info always is vp9 in flv. Thanks Steven
Neal Gompa <ngompa13@gmail.com> 于2023年5月31日周三 13:47写道: > > On Mon, May 15, 2023 at 10:41 PM Neal Gompa <ngompa13@gmail.com> wrote: > > > > On Mon, May 15, 2023 at 4:32 AM Steven Liu <lq@chinaffmpeg.org> wrote: > > > > > > Reference file: https://github.com/veovera/enhanced-rtmp/blob/main/enhanced-rtmp-v1.pdf > > > The Enhanced flv has been supported by OBS, Simple Realtime Server, mpegts.js. > > > you can publish hevc, av1 or vp9 codec stream to Youtube over rtmp. > > > The enhanced flv documentation contributors include > > > Jean-Baptiste Kempf (FFmpeg, VideoLAN). > > > So this should be support by ffmpeg too. > > > > > > v8: > > > Support vp9 codec according to enhanced flv. > > > Support PacketTypeCodedFrames type for hevc in flv. > > > v9: > > > Add dependency codec object files for flvenc in Makefile. > > > Move the hevc,av1,vp9 codec out of FF_COMPLIANCE_UNOFFICIAL. > > > > > > v10: > > > modify first patch comment like the others before commit. > > > exheader mode should only happened in video stream this patchset. > > > > > > Steven Liu (6): > > > avformat/flvenc: support mux hevc in enhanced flv > > > avformat/flvdec: support demux hevc in enhanced flv > > > avformat/flvenc: support mux av1 in enhanced flv > > > avformat/flvdec: support demux av1 in enhanced flv > > > avformat/flvenc: support mux vp9 in enhanced flv > > > avformat/flvdec: support demux vp9 in enhanced flv > > > > > > libavformat/Makefile | 2 +- > > > libavformat/flv.h | 15 +++++++++ > > > libavformat/flvdec.c | 73 +++++++++++++++++++++++++++++++++++++++----- > > > libavformat/flvenc.c | 58 +++++++++++++++++++++++++++++------ > > > 4 files changed, 130 insertions(+), 18 deletions(-) > > > > > > > This version works for me. Thanks for this work! > > > > Tested-by: Neal Gompa <ngompa13@gmail.com> > > Reviewed-by: Neal Gompa <ngompa13@gmail.com> > > > > Is this patch set going to get pushed to master anytime soon? Hi Neal, Do you agree move the enhanced flv support into experimental flags? Thanks Steven
On Tue, Jun 6, 2023 at 2:43 AM Steven Liu <lingjiujianke@gmail.com> wrote: > > Neal Gompa <ngompa13@gmail.com> 于2023年5月31日周三 13:47写道: > > > > On Mon, May 15, 2023 at 10:41 PM Neal Gompa <ngompa13@gmail.com> wrote: > > > > > > On Mon, May 15, 2023 at 4:32 AM Steven Liu <lq@chinaffmpeg.org> wrote: > > > > > > > > Reference file: https://github.com/veovera/enhanced-rtmp/blob/main/enhanced-rtmp-v1.pdf > > > > The Enhanced flv has been supported by OBS, Simple Realtime Server, mpegts.js. > > > > you can publish hevc, av1 or vp9 codec stream to Youtube over rtmp. > > > > The enhanced flv documentation contributors include > > > > Jean-Baptiste Kempf (FFmpeg, VideoLAN). > > > > So this should be support by ffmpeg too. > > > > > > > > v8: > > > > Support vp9 codec according to enhanced flv. > > > > Support PacketTypeCodedFrames type for hevc in flv. > > > > v9: > > > > Add dependency codec object files for flvenc in Makefile. > > > > Move the hevc,av1,vp9 codec out of FF_COMPLIANCE_UNOFFICIAL. > > > > > > > > v10: > > > > modify first patch comment like the others before commit. > > > > exheader mode should only happened in video stream this patchset. > > > > > > > > Steven Liu (6): > > > > avformat/flvenc: support mux hevc in enhanced flv > > > > avformat/flvdec: support demux hevc in enhanced flv > > > > avformat/flvenc: support mux av1 in enhanced flv > > > > avformat/flvdec: support demux av1 in enhanced flv > > > > avformat/flvenc: support mux vp9 in enhanced flv > > > > avformat/flvdec: support demux vp9 in enhanced flv > > > > > > > > libavformat/Makefile | 2 +- > > > > libavformat/flv.h | 15 +++++++++ > > > > libavformat/flvdec.c | 73 +++++++++++++++++++++++++++++++++++++++----- > > > > libavformat/flvenc.c | 58 +++++++++++++++++++++++++++++------ > > > > 4 files changed, 130 insertions(+), 18 deletions(-) > > > > > > > > > > This version works for me. Thanks for this work! > > > > > > Tested-by: Neal Gompa <ngompa13@gmail.com> > > > Reviewed-by: Neal Gompa <ngompa13@gmail.com> > > > > > > > Is this patch set going to get pushed to master anytime soon? > > Hi Neal, > > Do you agree move the enhanced flv support into experimental flags? > I don't think we should mark it experimental. Aside from the fact that other implementations haven't done that, it's in production now with YouTube.
On Wed, Jun 7, 2023 at 8:02 PM Neal Gompa <ngompa13@gmail.com> wrote: > > On Tue, Jun 6, 2023 at 2:43 AM Steven Liu <lingjiujianke@gmail.com> wrote: > > > > Neal Gompa <ngompa13@gmail.com> 于2023年5月31日周三 13:47写道: > > > > > > On Mon, May 15, 2023 at 10:41 PM Neal Gompa <ngompa13@gmail.com> wrote: > > > > > > > > On Mon, May 15, 2023 at 4:32 AM Steven Liu <lq@chinaffmpeg.org> wrote: > > > > > > > > > > Reference file: https://github.com/veovera/enhanced-rtmp/blob/main/enhanced-rtmp-v1.pdf > > > > > The Enhanced flv has been supported by OBS, Simple Realtime Server, mpegts.js. > > > > > you can publish hevc, av1 or vp9 codec stream to Youtube over rtmp. > > > > > The enhanced flv documentation contributors include > > > > > Jean-Baptiste Kempf (FFmpeg, VideoLAN). > > > > > So this should be support by ffmpeg too. > > > > > > > > > > v8: > > > > > Support vp9 codec according to enhanced flv. > > > > > Support PacketTypeCodedFrames type for hevc in flv. > > > > > v9: > > > > > Add dependency codec object files for flvenc in Makefile. > > > > > Move the hevc,av1,vp9 codec out of FF_COMPLIANCE_UNOFFICIAL. > > > > > > > > > > v10: > > > > > modify first patch comment like the others before commit. > > > > > exheader mode should only happened in video stream this patchset. > > > > > > > > > > Steven Liu (6): > > > > > avformat/flvenc: support mux hevc in enhanced flv > > > > > avformat/flvdec: support demux hevc in enhanced flv > > > > > avformat/flvenc: support mux av1 in enhanced flv > > > > > avformat/flvdec: support demux av1 in enhanced flv > > > > > avformat/flvenc: support mux vp9 in enhanced flv > > > > > avformat/flvdec: support demux vp9 in enhanced flv > > > > > > > > > > libavformat/Makefile | 2 +- > > > > > libavformat/flv.h | 15 +++++++++ > > > > > libavformat/flvdec.c | 73 +++++++++++++++++++++++++++++++++++++++----- > > > > > libavformat/flvenc.c | 58 +++++++++++++++++++++++++++++------ > > > > > 4 files changed, 130 insertions(+), 18 deletions(-) > > > > > > > > > > > > > This version works for me. Thanks for this work! > > > > > > > > Tested-by: Neal Gompa <ngompa13@gmail.com> > > > > Reviewed-by: Neal Gompa <ngompa13@gmail.com> > > > > > > > > > > Is this patch set going to get pushed to master anytime soon? > > > > Hi Neal, > > > > Do you agree move the enhanced flv support into experimental flags? > > > > I don't think we should mark it experimental. Aside from the fact that > other implementations haven't done that, it's in production now with > YouTube. > Just wanted to add that v11 also worked for me (successfully tested pushing RTMP 720p and 1080p AV1 from a live source, tried VP9 but YouTube doesn't seem to support it as ingest). I can also confirm what Steven reported that YouTube will output VP9 or AVC given AV1 RTMP (from the "Stats for nerds" menu). Great work! Tested-by: Tristan Matthews <tmatth@videolan.org> Reviewed-by: Tristan Matthews <tmatth@videolan.org>
Please merge. On Thu, 1 Jun 2023, at 12:29, Jean-Baptiste Kempf wrote: > Hello, > > On Thu, 1 Jun 2023, at 02:02, Steven Liu wrote: >> Neal Gompa <ngompa13@gmail.com> 于2023年5月31日周三 13:47写道: >>> >>> On Mon, May 15, 2023 at 10:41 PM Neal Gompa <ngompa13@gmail.com> wrote: >>> > >>> > On Mon, May 15, 2023 at 4:32 AM Steven Liu <lq@chinaffmpeg.org> wrote: >>> > > >>> > > Reference file: https://github.com/veovera/enhanced-rtmp/blob/main/enhanced-rtmp-v1.pdf >>> > > The Enhanced flv has been supported by OBS, Simple Realtime Server, mpegts.js. >>> > > you can publish hevc, av1 or vp9 codec stream to Youtube over rtmp. >>> > > The enhanced flv documentation contributors include >>> > > Jean-Baptiste Kempf (FFmpeg, VideoLAN). >>> > > So this should be support by ffmpeg too. >>> > > >>> > > v8: >>> > > Support vp9 codec according to enhanced flv. >>> > > Support PacketTypeCodedFrames type for hevc in flv. >>> > > v9: >>> > > Add dependency codec object files for flvenc in Makefile. >>> > > Move the hevc,av1,vp9 codec out of FF_COMPLIANCE_UNOFFICIAL. >>> > > >>> > > v10: >>> > > modify first patch comment like the others before commit. >>> > > exheader mode should only happened in video stream this patchset. >>> > > >>> > > Steven Liu (6): >>> > > avformat/flvenc: support mux hevc in enhanced flv >>> > > avformat/flvdec: support demux hevc in enhanced flv >>> > > avformat/flvenc: support mux av1 in enhanced flv >>> > > avformat/flvdec: support demux av1 in enhanced flv >>> > > avformat/flvenc: support mux vp9 in enhanced flv >>> > > avformat/flvdec: support demux vp9 in enhanced flv >>> > > >>> > > libavformat/Makefile | 2 +- >>> > > libavformat/flv.h | 15 +++++++++ >>> > > libavformat/flvdec.c | 73 +++++++++++++++++++++++++++++++++++++++----- >>> > > libavformat/flvenc.c | 58 +++++++++++++++++++++++++++++------ >>> > > 4 files changed, 130 insertions(+), 18 deletions(-) >>> > > >>> > >>> > This version works for me. Thanks for this work! >>> > >>> > Tested-by: Neal Gompa <ngompa13@gmail.com> >>> > Reviewed-by: Neal Gompa <ngompa13@gmail.com> >>> > >>> >>> Is this patch set going to get pushed to master anytime soon? >> >> Hi Neal, >> >> Waiting for j-b check about the Enhanced-FLV status, i cannot sure if >> this patch can be pushed now. > > I've just re-asked what is the final status of the spec. > > If you cannot wait, use experimental flags. > > jb > -- > Jean-Baptiste Kempf - President > +33 672 704 734 > _______________________________________________ > ffmpeg-devel mailing list > ffmpeg-devel@ffmpeg.org > https://ffmpeg.org/mailman/listinfo/ffmpeg-devel > > To unsubscribe, visit link above, or email > ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
Jean-Baptiste Kempf <jb@videolan.org>于2023年7月17日 周一19:37写道: > Please merge. will apply > > > On Thu, 1 Jun 2023, at 12:29, Jean-Baptiste Kempf wrote: > > Hello, > > > > On Thu, 1 Jun 2023, at 02:02, Steven Liu wrote: > >> Neal Gompa <ngompa13@gmail.com> 于2023年5月31日周三 13:47写道: > >>> > >>> On Mon, May 15, 2023 at 10:41 PM Neal Gompa <ngompa13@gmail.com> > wrote: > >>> > > >>> > On Mon, May 15, 2023 at 4:32 AM Steven Liu <lq@chinaffmpeg.org> > wrote: > >>> > > > >>> > > Reference file: > https://github.com/veovera/enhanced-rtmp/blob/main/enhanced-rtmp-v1.pdf > >>> > > The Enhanced flv has been supported by OBS, Simple Realtime > Server, mpegts.js. > >>> > > you can publish hevc, av1 or vp9 codec stream to Youtube over rtmp. > >>> > > The enhanced flv documentation contributors include > >>> > > Jean-Baptiste Kempf (FFmpeg, VideoLAN). > >>> > > So this should be support by ffmpeg too. > >>> > > > >>> > > v8: > >>> > > Support vp9 codec according to enhanced flv. > >>> > > Support PacketTypeCodedFrames type for hevc in flv. > >>> > > v9: > >>> > > Add dependency codec object files for flvenc in Makefile. > >>> > > Move the hevc,av1,vp9 codec out of FF_COMPLIANCE_UNOFFICIAL. > >>> > > > >>> > > v10: > >>> > > modify first patch comment like the others before commit. > >>> > > exheader mode should only happened in video stream this > patchset. > >>> > > > >>> > > Steven Liu (6): > >>> > > avformat/flvenc: support mux hevc in enhanced flv > >>> > > avformat/flvdec: support demux hevc in enhanced flv > >>> > > avformat/flvenc: support mux av1 in enhanced flv > >>> > > avformat/flvdec: support demux av1 in enhanced flv > >>> > > avformat/flvenc: support mux vp9 in enhanced flv > >>> > > avformat/flvdec: support demux vp9 in enhanced flv > >>> > > > >>> > > libavformat/Makefile | 2 +- > >>> > > libavformat/flv.h | 15 +++++++++ > >>> > > libavformat/flvdec.c | 73 > +++++++++++++++++++++++++++++++++++++++----- > >>> > > libavformat/flvenc.c | 58 +++++++++++++++++++++++++++++------ > >>> > > 4 files changed, 130 insertions(+), 18 deletions(-) > >>> > > > >>> > > >>> > This version works for me. Thanks for this work! > >>> > > >>> > Tested-by: Neal Gompa <ngompa13@gmail.com> > >>> > Reviewed-by: Neal Gompa <ngompa13@gmail.com> > >>> > > >>> > >>> Is this patch set going to get pushed to master anytime soon? > >> > >> Hi Neal, > >> > >> Waiting for j-b check about the Enhanced-FLV status, i cannot sure if > >> this patch can be pushed now. > > > > I've just re-asked what is the final status of the spec. > > > > If you cannot wait, use experimental flags. > > > > jb > > -- > > Jean-Baptiste Kempf - President > > +33 672 704 734 > > _______________________________________________ > > ffmpeg-devel mailing list > > ffmpeg-devel@ffmpeg.org > > https://ffmpeg.org/mailman/listinfo/ffmpeg-devel > > > > To unsubscribe, visit link above, or email > > ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". > > -- > Jean-Baptiste Kempf - President > +33 672 704 734 >
diff --git a/libavformat/flv.h b/libavformat/flv.h index 3571b90279..91e0a4140c 100644 --- a/libavformat/flv.h +++ b/libavformat/flv.h @@ -35,6 +35,12 @@ #define FLV_VIDEO_FRAMETYPE_OFFSET 4 +/* Extended VideoTagHeader + * defined in reference link: + * https://github.com/veovera/enhanced-rtmp/blob/main/enhanced-rtmp-v1.pdf + * */ +#define FLV_IS_EX_HEADER 0x80 + /* bitmasks to isolate specific values */ #define FLV_AUDIO_CHANNEL_MASK 0x01 #define FLV_AUDIO_SAMPLESIZE_MASK 0x02 @@ -112,6 +118,15 @@ enum { FLV_CODECID_MPEG4 = 9, }; +enum { + PacketTypeSequenceStart = 0, + PacketTypeCodedFrames = 1, + PacketTypeSequenceEnd = 2, + PacketTypeCodedFramesX = 3, + PacketTypeMetadata = 4, + PacketTypeMPEG2TSSequenceStart = 5, +}; + enum { FLV_FRAME_KEY = 1 << FLV_VIDEO_FRAMETYPE_OFFSET, ///< key frame (for AVC, a seekable frame) FLV_FRAME_INTER = 2 << FLV_VIDEO_FRAMETYPE_OFFSET, ///< inter frame (for AVC, a non-seekable frame) diff --git a/libavformat/flvenc.c b/libavformat/flvenc.c index fbf7eabaf8..57a26245ff 100644 --- a/libavformat/flvenc.c +++ b/libavformat/flvenc.c @@ -28,6 +28,7 @@ #include "libavcodec/mpeg4audio.h" #include "avio.h" #include "avc.h" +#include "hevc.h" #include "avformat.h" #include "flv.h" #include "internal.h" @@ -46,6 +47,7 @@ static const AVCodecTag flv_video_codec_ids[] = { { AV_CODEC_ID_VP6, FLV_CODECID_VP6 }, { AV_CODEC_ID_VP6A, FLV_CODECID_VP6A }, { AV_CODEC_ID_H264, FLV_CODECID_H264 }, + { AV_CODEC_ID_HEVC, MKBETAG('h', 'v', 'c', '1') }, { AV_CODEC_ID_NONE, 0 } }; @@ -492,7 +494,7 @@ static void flv_write_codec_header(AVFormatContext* s, AVCodecParameters* par, i FLVContext *flv = s->priv_data; if (par->codec_id == AV_CODEC_ID_AAC || par->codec_id == AV_CODEC_ID_H264 - || par->codec_id == AV_CODEC_ID_MPEG4) { + || par->codec_id == AV_CODEC_ID_MPEG4 || par->codec_id == AV_CODEC_ID_HEVC) { int64_t pos; avio_w8(pb, par->codec_type == AVMEDIA_TYPE_VIDEO ? @@ -535,10 +537,19 @@ static void flv_write_codec_header(AVFormatContext* s, AVCodecParameters* par, i } avio_write(pb, par->extradata, par->extradata_size); } else { - avio_w8(pb, par->codec_tag | FLV_FRAME_KEY); // flags - avio_w8(pb, 0); // AVC sequence header - avio_wb24(pb, 0); // composition time - ff_isom_write_avcc(pb, par->extradata, par->extradata_size); + if (par->codec_id == AV_CODEC_ID_HEVC) { + avio_w8(pb, FLV_IS_EX_HEADER | PacketTypeSequenceStart); // ExVideoTagHeader mode with PacketTypeSequenceStart + avio_write(pb, "hvc1", 4); + } else { + avio_w8(pb, par->codec_tag | FLV_FRAME_KEY); // flags + avio_w8(pb, 0); // AVC sequence header + avio_wb24(pb, 0); // composition time + } + + if (par->codec_id == AV_CODEC_ID_HEVC) + ff_isom_write_hvcc(pb, par->extradata, par->extradata_size, 0); + else + ff_isom_write_avcc(pb, par->extradata, par->extradata_size); } data_size = avio_tell(pb) - pos; avio_seek(pb, -data_size - 10, SEEK_CUR); @@ -628,7 +639,8 @@ static int flv_init(struct AVFormatContext *s) return unsupported_codec(s, "Video", par->codec_id); if (par->codec_id == AV_CODEC_ID_MPEG4 || - par->codec_id == AV_CODEC_ID_H263) { + par->codec_id == AV_CODEC_ID_H263 || + par->codec_id == AV_CODEC_ID_HEVC) { int error = s->strict_std_compliance > FF_COMPLIANCE_UNOFFICIAL; av_log(s, error ? AV_LOG_ERROR : AV_LOG_WARNING, "Codec %s is not supported in the official FLV specification,\n", avcodec_get_name(par->codec_id)); @@ -836,13 +848,13 @@ static int flv_write_packet(AVFormatContext *s, AVPacket *pkt) if (par->codec_id == AV_CODEC_ID_VP6F || par->codec_id == AV_CODEC_ID_VP6A || par->codec_id == AV_CODEC_ID_VP6 || par->codec_id == AV_CODEC_ID_AAC) flags_size = 2; - else if (par->codec_id == AV_CODEC_ID_H264 || par->codec_id == AV_CODEC_ID_MPEG4) + else if (par->codec_id == AV_CODEC_ID_H264 || par->codec_id == AV_CODEC_ID_MPEG4 || par->codec_id == AV_CODEC_ID_HEVC) flags_size = 5; else flags_size = 1; if (par->codec_id == AV_CODEC_ID_AAC || par->codec_id == AV_CODEC_ID_H264 - || par->codec_id == AV_CODEC_ID_MPEG4) { + || par->codec_id == AV_CODEC_ID_MPEG4 || par->codec_id == AV_CODEC_ID_HEVC) { size_t side_size; uint8_t *side = av_packet_get_side_data(pkt, AV_PKT_DATA_NEW_EXTRADATA, &side_size); if (side && side_size > 0 && (side_size != par->extradata_size || memcmp(side, par->extradata, side_size))) { @@ -862,7 +874,7 @@ static int flv_write_packet(AVFormatContext *s, AVPacket *pkt) "Packets are not in the proper order with respect to DTS\n"); return AVERROR(EINVAL); } - if (par->codec_id == AV_CODEC_ID_H264 || par->codec_id == AV_CODEC_ID_MPEG4) { + if (par->codec_id == AV_CODEC_ID_H264 || par->codec_id == AV_CODEC_ID_MPEG4 || par->codec_id == AV_CODEC_ID_HEVC) { if (pkt->pts == AV_NOPTS_VALUE) { av_log(s, AV_LOG_ERROR, "Packet is missing PTS\n"); return AVERROR(EINVAL); @@ -907,6 +919,10 @@ static int flv_write_packet(AVFormatContext *s, AVPacket *pkt) if (par->extradata_size > 0 && *(uint8_t*)par->extradata != 1) if ((ret = ff_avc_parse_nal_units_buf(pkt->data, &data, &size)) < 0) return ret; + } else if (par->codec_id == AV_CODEC_ID_HEVC) { + if (par->extradata_size > 0 && *(uint8_t*)par->extradata != 1) + if ((ret = ff_hevc_annexb2mp4_buf(pkt->data, &data, &size, 0, NULL)) < 0) + return ret; } else if (par->codec_id == AV_CODEC_ID_AAC && pkt->size > 2 && (AV_RB16(pkt->data) & 0xfff0) == 0xfff0) { if (!s->streams[pkt->stream_index]->nb_frames) { @@ -968,7 +984,12 @@ static int flv_write_packet(AVFormatContext *s, AVPacket *pkt) avio_wb32(pb, data_size + 11); } else { av_assert1(flags>=0); - avio_w8(pb,flags); + if (par->codec_id == AV_CODEC_ID_HEVC) { + avio_w8(pb, FLV_IS_EX_HEADER | PacketTypeCodedFramesX); // ExVideoTagHeader mode with PacketTypeCodedFramesX + avio_write(pb, "hvc1", 4); + } else { + avio_w8(pb, flags); + } if (par->codec_id == AV_CODEC_ID_VP6) avio_w8(pb,0); if (par->codec_id == AV_CODEC_ID_VP6F || par->codec_id == AV_CODEC_ID_VP6A) {
Signed-off-by: Steven Liu <lq@chinaffmpeg.org> --- libavformat/flv.h | 15 +++++++++++++++ libavformat/flvenc.c | 41 +++++++++++++++++++++++++++++++---------- 2 files changed, 46 insertions(+), 10 deletions(-)