[FFmpeg-devel] [PATCH v3 2/2] avformat/rtmpproto: support enhanced rtmp

Marton Balint cus at passwd.hu
Sat Aug 26 12:25:35 EEST 2023



On Sat, 26 Aug 2023, Steven Liu wrote:

> Marton Balint <cus at passwd.hu> 于2023年8月26日周六 15:52写道:
> Hi Marton,

[...]

>> >
>> >> +                    av_strlcpy(fourcc, fourcc_data, sizeof(fourcc));
>> >> +                    ff_amf_write_string(&p, fourcc);
>> >> +            } else {
>> >> +                    av_log(s, AV_LOG_ERROR, "Unsupported codec fourcc, %.*s\n", 4, fourcc_data);
>> >> +                    return AVERROR_PATCHWELCOME;
>>
>> As far as I saw the specs does not provide an explicit list of fourcc
>> that can be used, so we should not limit it either, it makes the code more
>> future-proof. Therefore I suggest we accept unknown fourccs, but warn the
>> user about them.
> I set unsupported codec fourcc, and return a patchwelcome is because
> there just add hevc,av1,vp9 codec supported in flvenc and flvdec,
> dose not add the others in the flv right, so if user want use another
> codecs, it should give a error and patch welcome.

Ok, but if you only want to support a strict list, then maybe 
AV_OPT_TYPE_FLAGS type would be a better option type? Fine with me either 
way.

>>
>> >> +            }
>> >> +
>> >> +            fourcc_data += 5;
>> >> +        }
>> >> +    }
>> >> +
>> >>      if (!rt->is_input) {
>> >>          ff_amf_write_field_name(&p, "type");
>> >>          ff_amf_write_string(&p, "nonprivate");
>> >> @@ -3104,6 +3140,7 @@ static const AVOption rtmp_options[] = {
>> >>      {"rtmp_conn", "Append arbitrary AMF data to the Connect message", OFFSET(conn), AV_OPT_TYPE_STRING, {.str = NULL }, 0, 0, DEC|ENC},
>> >>      {"rtmp_flashver", "Version of the Flash plugin used to run the SWF player.", OFFSET(flashver), AV_OPT_TYPE_STRING, {.str = NULL }, 0, 0, DEC|ENC},
>> >>      {"rtmp_flush_interval", "Number of packets flushed in the same request (RTMPT only).", OFFSET(flush_interval), AV_OPT_TYPE_INT, {.i64 = 10}, 0, INT_MAX, ENC},
>> >> +    {"rtmp_enhanced_codecs", "Specify the codec(s) to use in an enhanced rtmp live stream", OFFSET(enhanced_codecs), AV_OPT_TYPE_STRING, {.str = NULL }, 0, 0, ENC},
>>
>> Maybe make the default "av01,vp09,hevc"? This is a list of codecs the
> I think make it null should better, because not should every body's
> ffmpeg has been support hevc/av1/vp9 codec,

And not everybody is using libavcodec for decoding hevc/av1/vp9, so which 
decoders are compiled in does not really matter. Do we really want the 
default to *not support* any recent codec?

> so I set it null default, and the other reason is not sure all rtmp
> server has beed support enhanced rtmp, so make it null default
> when user not use codec hevc/av1/vp9.

I'd expect that legacy rtmp servers will just ignore "fourCcList" 
property as an unknown/unsupported property, but I am not sure what would 
actually happen... Maybe some tests should be made with the most common 
implementations. If it actually causes issues, then I am fine with 
the NULL default.

Regards,
Marton


More information about the ffmpeg-devel mailing list