* [FFmpeg-devel] [PATCH] Add enhanced rtmp codec vp8 to flv format
@ 2024-08-05 14:01 Mondain
2024-08-05 19:55 ` Timo Rothenpieler
0 siblings, 1 reply; 6+ messages in thread
From: Mondain @ 2024-08-05 14:01 UTC (permalink / raw)
To: ffmpeg-devel
Fixes: Reading and writing of VP8 media in FLV files, to match
existing enhanced codecs
Signed-off-by: Paul Gregoire <mondain@gmail.com>
---
libavformat/flvdec.c | 12 +++++++++--
libavformat/flvenc.c | 51 +++++++++++++++++++++++++++++---------------
2 files changed, 44 insertions(+), 19 deletions(-)
diff --git a/libavformat/flvdec.c b/libavformat/flvdec.c
index 22a9b9e4a7..2383682a63 100644
--- a/libavformat/flvdec.c
+++ b/libavformat/flvdec.c
@@ -340,6 +340,8 @@ static int flv_same_video_codec(AVCodecParameters
*vpar, uint32_t flv_codecid)
return vpar->codec_id == AV_CODEC_ID_AV1;
case MKBETAG('v', 'p', '0', '9'):
return vpar->codec_id == AV_CODEC_ID_VP9;
+ case MKBETAG('v', 'p', '0', '8'):
+ return vpar->codec_id == AV_CODEC_ID_VP8;
case FLV_CODECID_H263:
return vpar->codec_id == AV_CODEC_ID_FLV1;
case FLV_CODECID_SCREEN:
@@ -378,6 +380,10 @@ static int flv_set_video_codec(AVFormatContext
*s, AVStream *vstream,
par->codec_id = AV_CODEC_ID_VP9;
vstreami->need_parsing = AVSTREAM_PARSE_HEADERS;
break;
+ case MKBETAG('v', 'p', '0', '8'):
+ par->codec_id = AV_CODEC_ID_VP8;
+ vstreami->need_parsing = AVSTREAM_PARSE_HEADERS;
+ break;
case FLV_CODECID_H263:
par->codec_id = AV_CODEC_ID_FLV1;
break;
@@ -1443,7 +1449,8 @@ retry_duration:
st->codecpar->codec_id == AV_CODEC_ID_MPEG4 ||
st->codecpar->codec_id == AV_CODEC_ID_HEVC ||
st->codecpar->codec_id == AV_CODEC_ID_AV1 ||
- st->codecpar->codec_id == AV_CODEC_ID_VP9) {
+ st->codecpar->codec_id == AV_CODEC_ID_VP9 ||
+ st->codecpar->codec_id == AV_CODEC_ID_VP8) {
int type = 0;
if (enhanced_flv && stream_type == FLV_STREAM_TYPE_VIDEO) {
type = flags & 0x0F;
@@ -1481,7 +1488,8 @@ retry_duration:
}
if (type == 0 && (!st->codecpar->extradata ||
st->codecpar->codec_id == AV_CODEC_ID_AAC ||
st->codecpar->codec_id == AV_CODEC_ID_H264 ||
st->codecpar->codec_id == AV_CODEC_ID_HEVC ||
- st->codecpar->codec_id == AV_CODEC_ID_AV1 ||
st->codecpar->codec_id == AV_CODEC_ID_VP9)) {
+ st->codecpar->codec_id == AV_CODEC_ID_AV1 ||
st->codecpar->codec_id == AV_CODEC_ID_VP9 ||
+ st->codecpar->codec_id == AV_CODEC_ID_VP8)) {
AVDictionaryEntry *t;
if (st->codecpar->extradata) {
diff --git a/libavformat/flvenc.c b/libavformat/flvenc.c
index f34df61c0e..32678e3136 100644
--- a/libavformat/flvenc.c
+++ b/libavformat/flvenc.c
@@ -54,6 +54,7 @@ static const AVCodecTag flv_video_codec_ids[] = {
{ AV_CODEC_ID_H264, FLV_CODECID_H264 },
{ AV_CODEC_ID_HEVC, MKBETAG('h', 'v', 'c', '1') },
{ AV_CODEC_ID_AV1, MKBETAG('a', 'v', '0', '1') },
+ { AV_CODEC_ID_VP8, MKBETAG('v', 'p', '0', '8') },
{ AV_CODEC_ID_VP9, MKBETAG('v', 'p', '0', '9') },
{ AV_CODEC_ID_NONE, 0 }
};
@@ -497,7 +498,7 @@ static void
flv_write_metadata_packet(AVFormatContext *s, AVCodecParameters *par
if (flv->metadata_pkt_written) return;
if (par->codec_id == AV_CODEC_ID_HEVC || par->codec_id ==
AV_CODEC_ID_AV1 ||
- par->codec_id == AV_CODEC_ID_VP9) {
+ par->codec_id == AV_CODEC_ID_VP8 || par->codec_id == AV_CODEC_ID_VP9) {
int flags_size = 5;
side_data = av_packet_side_data_get(par->coded_side_data,
par->nb_coded_side_data,
AV_PKT_DATA_CONTENT_LIGHT_LEVEL);
@@ -519,12 +520,18 @@ static void
flv_write_metadata_packet(AVFormatContext *s, AVCodecParameters *par
put_timestamp(pb, ts); //ts = pkt->dts, gen
avio_wb24(pb, flv->reserved);
- if (par->codec_id == AV_CODEC_ID_HEVC) {
- avio_w8(pb, FLV_IS_EX_HEADER | PacketTypeMetadata|
FLV_FRAME_VIDEO_INFO_CMD); // ExVideoTagHeader mode with
PacketTypeMetadata
+ if (par->codec_id == AV_CODEC_ID_VP8) {
+ avio_w8(pb, FLV_IS_EX_HEADER | PacketTypeMetadata |
FLV_FRAME_VIDEO_INFO_CMD); // ExVideoTagHeader mode with
PacketTypeMetadata
+ avio_write(pb, "vp08", 4);
+ } else if (par->codec_id == AV_CODEC_ID_VP9) {
+ avio_w8(pb, FLV_IS_EX_HEADER | PacketTypeMetadata |
FLV_FRAME_VIDEO_INFO_CMD);
+ avio_write(pb, "vp09", 4);
+ } else if (par->codec_id == AV_CODEC_ID_HEVC) {
+ avio_w8(pb, FLV_IS_EX_HEADER | PacketTypeMetadata |
FLV_FRAME_VIDEO_INFO_CMD);
avio_write(pb, "hvc1", 4);
- } else if (par->codec_id == AV_CODEC_ID_AV1 || par->codec_id
== AV_CODEC_ID_VP9) {
- avio_w8(pb, FLV_IS_EX_HEADER | PacketTypeMetadata|
FLV_FRAME_VIDEO_INFO_CMD);
- avio_write(pb, par->codec_id == AV_CODEC_ID_AV1 ? "av01"
: "vp09", 4);
+ } else if (par->codec_id == AV_CODEC_ID_AV1) {
+ avio_w8(pb, FLV_IS_EX_HEADER | PacketTypeMetadata |
FLV_FRAME_VIDEO_INFO_CMD);
+ avio_write(pb, "av01", 4);
}
avio_w8(pb, AMF_DATA_TYPE_STRING);
@@ -639,7 +646,8 @@ static void
flv_write_codec_header(AVFormatContext* s, AVCodecParameters* par, i
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_HEVC
- || par->codec_id == AV_CODEC_ID_AV1 || par->codec_id ==
AV_CODEC_ID_VP9) {
+ || par->codec_id == AV_CODEC_ID_AV1 || par->codec_id ==
AV_CODEC_ID_VP9
+ || par->codec_id == AV_CODEC_ID_VP8) {
int64_t pos;
avio_w8(pb,
par->codec_type == AVMEDIA_TYPE_VIDEO ?
@@ -682,23 +690,28 @@ static void
flv_write_codec_header(AVFormatContext* s, AVCodecParameters* par, i
}
avio_write(pb, par->extradata, par->extradata_size);
} else {
- if (par->codec_id == AV_CODEC_ID_HEVC) {
+ if (par->codec_id == AV_CODEC_ID_VP8) {
avio_w8(pb, FLV_IS_EX_HEADER |
PacketTypeSequenceStart | FLV_FRAME_KEY); // ExVideoTagHeader mode
with PacketTypeSequenceStart
+ avio_write(pb, "vp08", 4);
+ } else if (par->codec_id == AV_CODEC_ID_VP9) {
+ avio_w8(pb, FLV_IS_EX_HEADER |
PacketTypeSequenceStart | FLV_FRAME_KEY);
+ avio_write(pb, "vp09", 4);
+ } else if (par->codec_id == AV_CODEC_ID_HEVC) {
+ avio_w8(pb, FLV_IS_EX_HEADER |
PacketTypeSequenceStart | FLV_FRAME_KEY);
avio_write(pb, "hvc1", 4);
- } else if (par->codec_id == AV_CODEC_ID_AV1 ||
par->codec_id == AV_CODEC_ID_VP9) {
+ } else if (par->codec_id == AV_CODEC_ID_AV1) {
avio_w8(pb, FLV_IS_EX_HEADER |
PacketTypeSequenceStart | FLV_FRAME_KEY);
- avio_write(pb, par->codec_id == AV_CODEC_ID_AV1 ?
"av01" : "vp09", 4);
+ avio_write(pb, "av01", 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 if (par->codec_id == AV_CODEC_ID_AV1)
ff_isom_write_av1c(pb, par->extradata, par->extradata_size, 1);
- else if (par->codec_id == AV_CODEC_ID_VP9)
+ else if (par->codec_id == AV_CODEC_ID_VP9 ||
par->codec_id == AV_CODEC_ID_VP8)
ff_isom_write_vpcc(s, pb, par->extradata,
par->extradata_size, par);
else
ff_isom_write_avcc(pb, par->extradata, par->extradata_size);
@@ -1001,7 +1014,7 @@ static int flv_write_packet(AVFormatContext *s,
AVPacket *pkt)
flags_size = 2;
else if (par->codec_id == AV_CODEC_ID_H264 || par->codec_id ==
AV_CODEC_ID_MPEG4 ||
par->codec_id == AV_CODEC_ID_HEVC || par->codec_id ==
AV_CODEC_ID_AV1 ||
- par->codec_id == AV_CODEC_ID_VP9)
+ par->codec_id == AV_CODEC_ID_VP9 || par->codec_id ==
AV_CODEC_ID_VP8)
flags_size = 5;
else
flags_size = 1;
@@ -1011,7 +1024,8 @@ static int flv_write_packet(AVFormatContext *s,
AVPacket *pkt)
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_HEVC
- || par->codec_id == AV_CODEC_ID_AV1 || par->codec_id ==
AV_CODEC_ID_VP9) {
+ || par->codec_id == AV_CODEC_ID_AV1 || par->codec_id ==
AV_CODEC_ID_VP9
+ || par->codec_id == AV_CODEC_ID_VP8) {
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))) {
@@ -1034,7 +1048,7 @@ static int flv_write_packet(AVFormatContext *s,
AVPacket *pkt)
}
if (par->codec_id == AV_CODEC_ID_H264 || par->codec_id ==
AV_CODEC_ID_MPEG4 ||
par->codec_id == AV_CODEC_ID_HEVC || par->codec_id ==
AV_CODEC_ID_AV1 ||
- par->codec_id == AV_CODEC_ID_VP9) {
+ par->codec_id == AV_CODEC_ID_VP9 || par->codec_id == AV_CODEC_ID_VP8) {
if (pkt->pts == AV_NOPTS_VALUE) {
av_log(s, AV_LOG_ERROR, "Packet is missing PTS\n");
return AVERROR(EINVAL);
@@ -1150,9 +1164,12 @@ static int flv_write_packet(AVFormatContext *s,
AVPacket *pkt)
avio_write(pb, "hvc1", 4);
if (pkttype == PacketTypeCodedFrames)
avio_wb24(pb, pkt->pts - pkt->dts);
- } else if (par->codec_id == AV_CODEC_ID_AV1 || par->codec_id
== AV_CODEC_ID_VP9) {
+ } else if (par->codec_id == AV_CODEC_ID_AV1) {
+ avio_w8(pb, FLV_IS_EX_HEADER | PacketTypeCodedFrames | frametype);
+ avio_write(pb, "av01", 4);
+ } else if (par->codec_id == AV_CODEC_ID_VP9 || par->codec_id
== AV_CODEC_ID_VP8) {
avio_w8(pb, FLV_IS_EX_HEADER | PacketTypeCodedFrames | frametype);
- avio_write(pb, par->codec_id == AV_CODEC_ID_AV1 ? "av01"
: "vp09", 4);
+ avio_write(pb, par->codec_id == AV_CODEC_ID_VP8 ? "vp08"
: "vp09", 4);
} else {
avio_w8(pb, flags);
}
--
2.34.1
--
Paul Gregoire
about.me/mondain
_______________________________________________
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".
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [FFmpeg-devel] [PATCH] Add enhanced rtmp codec vp8 to flv format
2024-08-05 14:01 [FFmpeg-devel] [PATCH] Add enhanced rtmp codec vp8 to flv format Mondain
@ 2024-08-05 19:55 ` Timo Rothenpieler
2024-08-06 16:29 ` Mondain
0 siblings, 1 reply; 6+ messages in thread
From: Timo Rothenpieler @ 2024-08-05 19:55 UTC (permalink / raw)
To: ffmpeg-devel
On 05.08.2024 16:01, Mondain wrote:
> Fixes: Reading and writing of VP8 media in FLV files, to match
> existing enhanced codecs
This will be part of the already finished enhanced rtmp v2 patch set,
but the spec needs to be out of alpha first.
VP8 is in fact missing, since I didn't think anyone would care about it
specifically.
If you like, send it as PR to
https://github.com/BtbN/FFmpeg/blob/enhanced-flv
_______________________________________________
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".
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [FFmpeg-devel] [PATCH] Add enhanced rtmp codec vp8 to flv format
2024-08-05 19:55 ` Timo Rothenpieler
@ 2024-08-06 16:29 ` Mondain
2024-08-06 16:37 ` Mondain
2024-08-06 16:39 ` Timo Rothenpieler
0 siblings, 2 replies; 6+ messages in thread
From: Mondain @ 2024-08-06 16:29 UTC (permalink / raw)
To: FFmpeg development discussions and patches
Just a curiosity thing; why would the spec need to be out of alpha, yet the
other codecs are already in ffmpeg? Just no preference for VP8 itself,
while its still in-spec for tech like WebRTC? Again, just seems odd that
I've run into this type of messaging before.
Best Regards,
Paul
On Mon, Aug 5, 2024 at 12:55 PM Timo Rothenpieler <timo@rothenpieler.org>
wrote:
> On 05.08.2024 16:01, Mondain wrote:
> > Fixes: Reading and writing of VP8 media in FLV files, to match
> > existing enhanced codecs
>
> This will be part of the already finished enhanced rtmp v2 patch set,
> but the spec needs to be out of alpha first.
> VP8 is in fact missing, since I didn't think anyone would care about it
> specifically.
> If you like, send it as PR to
> https://github.com/BtbN/FFmpeg/blob/enhanced-flv
> _______________________________________________
> 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".
>
--
<https://about.me/mondain?promo=email_sig&utm_source=product&utm_medium=email_sig&utm_campaign=edit_panel&utm_content=thumb>
Paul Gregoire
about.me/mondain
<https://about.me/mondain?promo=email_sig&utm_source=product&utm_medium=email_sig&utm_campaign=edit_panel&utm_content=thumb>
_______________________________________________
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".
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [FFmpeg-devel] [PATCH] Add enhanced rtmp codec vp8 to flv format
2024-08-06 16:29 ` Mondain
@ 2024-08-06 16:37 ` Mondain
2024-08-06 16:39 ` Timo Rothenpieler
1 sibling, 0 replies; 6+ messages in thread
From: Mondain @ 2024-08-06 16:37 UTC (permalink / raw)
To: FFmpeg development discussions and patches
Timo, I've created the PR here: https://github.com/BtbN/FFmpeg/pull/2
On Tue, Aug 6, 2024 at 9:29 AM Mondain <mondain@gmail.com> wrote:
> Just a curiosity thing; why would the spec need to be out of alpha, yet
> the other codecs are already in ffmpeg? Just no preference for VP8 itself,
> while its still in-spec for tech like WebRTC? Again, just seems odd that
> I've run into this type of messaging before.
>
> Best Regards,
> Paul
>
> On Mon, Aug 5, 2024 at 12:55 PM Timo Rothenpieler <timo@rothenpieler.org>
> wrote:
>
>> On 05.08.2024 16:01, Mondain wrote:
>> > Fixes: Reading and writing of VP8 media in FLV files, to match
>> > existing enhanced codecs
>>
>> This will be part of the already finished enhanced rtmp v2 patch set,
>> but the spec needs to be out of alpha first.
>> VP8 is in fact missing, since I didn't think anyone would care about it
>> specifically.
>> If you like, send it as PR to
>> https://github.com/BtbN/FFmpeg/blob/enhanced-flv
>> _______________________________________________
>> 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".
>>
>
>
> --
>
> <https://about.me/mondain?promo=email_sig&utm_source=product&utm_medium=email_sig&utm_campaign=edit_panel&utm_content=thumb>
> Paul Gregoire
> about.me/mondain
> <https://about.me/mondain?promo=email_sig&utm_source=product&utm_medium=email_sig&utm_campaign=edit_panel&utm_content=thumb>
>
--
<https://about.me/mondain?promo=email_sig&utm_source=product&utm_medium=email_sig&utm_campaign=edit_panel&utm_content=thumb>
Paul Gregoire
about.me/mondain
<https://about.me/mondain?promo=email_sig&utm_source=product&utm_medium=email_sig&utm_campaign=edit_panel&utm_content=thumb>
_______________________________________________
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".
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [FFmpeg-devel] [PATCH] Add enhanced rtmp codec vp8 to flv format
2024-08-06 16:29 ` Mondain
2024-08-06 16:37 ` Mondain
@ 2024-08-06 16:39 ` Timo Rothenpieler
2024-08-06 17:17 ` Mondain
1 sibling, 1 reply; 6+ messages in thread
From: Timo Rothenpieler @ 2024-08-06 16:39 UTC (permalink / raw)
To: ffmpeg-devel
On 06.08.2024 18:29, Mondain wrote:
> Just a curiosity thing; why would the spec need to be out of alpha, yet the
> other codecs are already in ffmpeg? Just no preference for VP8 itself,
> while its still in-spec for tech like WebRTC? Again, just seems odd that
> I've run into this type of messaging before.
Cause it can still change, though it seems unlikely at this point.
Only v1 stuff is merged yet, since it's not in alpha anymore.
_______________________________________________
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".
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [FFmpeg-devel] [PATCH] Add enhanced rtmp codec vp8 to flv format
2024-08-06 16:39 ` Timo Rothenpieler
@ 2024-08-06 17:17 ` Mondain
0 siblings, 0 replies; 6+ messages in thread
From: Mondain @ 2024-08-06 17:17 UTC (permalink / raw)
To: FFmpeg development discussions and patches
Ok, sounds good; I'll get this rebased; one small patch is gonna take
longer than expected.
On Tue, Aug 6, 2024 at 9:39 AM Timo Rothenpieler <timo@rothenpieler.org> wrote:
>
> On 06.08.2024 18:29, Mondain wrote:
> > Just a curiosity thing; why would the spec need to be out of alpha, yet the
> > other codecs are already in ffmpeg? Just no preference for VP8 itself,
> > while its still in-spec for tech like WebRTC? Again, just seems odd that
> > I've run into this type of messaging before.
>
> Cause it can still change, though it seems unlikely at this point.
> Only v1 stuff is merged yet, since it's not in alpha anymore.
> _______________________________________________
> 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".
--
Paul Gregoire
about.me/mondain
_______________________________________________
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".
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2024-08-06 17:18 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-08-05 14:01 [FFmpeg-devel] [PATCH] Add enhanced rtmp codec vp8 to flv format Mondain
2024-08-05 19:55 ` Timo Rothenpieler
2024-08-06 16:29 ` Mondain
2024-08-06 16:37 ` Mondain
2024-08-06 16:39 ` Timo Rothenpieler
2024-08-06 17:17 ` Mondain
Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
This inbox may be cloned and mirrored by anyone:
git clone --mirror https://master.gitmailbox.com/ffmpegdev/0 ffmpegdev/git/0.git
# If you have public-inbox 1.1+ installed, you may
# initialize and index your mirror using the following commands:
public-inbox-init -V2 ffmpegdev ffmpegdev/ https://master.gitmailbox.com/ffmpegdev \
ffmpegdev@gitmailbox.com
public-inbox-index ffmpegdev
Example config snippet for mirrors.
AGPL code for this site: git clone https://public-inbox.org/public-inbox.git