本文介绍了HLS(HTTP Live Streaming)协议如何支持多分辨率,并通过M3U8文件示例解释了不同分辨率的切换。在视频流处理中,AVProgram用于指定不同的分辨率流,其discard属性决定是否启用。动态切换分辨率时,需要注意流畅性和无缝衔接,例如字节跳动和爱奇艺的不同策略。理解AVFormatContext和AVProgram结构对于实现平滑的视频流切换至关重要。
typedefstructAVFormatContext{...unsignedint nb_programs;
AVProgram **programs;...}typedefstructAVProgram{int id;int flags;enumAVDiscard discard;///< selects which program to discard and which to feed to the callerunsignedint*stream_index;unsignedint nb_stream_indexes;
AVDictionary *metadata;int program_num;int pmt_pid;int pcr_pid;int pmt_version;int64_t start_time;int64_t end_time;int64_t pts_wrap_reference;///< reference dts for wrap detectionint pts_wrap_behavior;///< behavior on wrap detection} AVProgram;