BTV
BTV
FLV 是 http 长连接,请求一次后服务器持续返回视频流数据。网络抖动断连需要重新连接 2RTT 额外延迟。flv 容器通过每帧的 tag 播放,无需等待延迟低。
HLS 是不断轮询的短请求序列,获取视频分片,等待切片延迟较大。hls 容器有时长和序列号,可以支持回退。fmp4 容器比 ts 容器的时间戳更精确,且使用索引文件保存初始化信息,每个分片精简。
https://www.cnblogs.com/yangchin9/p/18153222
https://blog.csdn.net/2301_79941386/article/details/154443573
MP4 重新封装核心步骤
- 创建 MP4 容器上下文
avformat_alloc_output_context2 - 首帧时间戳归零
avoid_negative_ts = AVFMT_AVOID_NEG_TS_MAKE_ZERO2. 复制原音视频流参数avcodec_parameters_copy - 配置
movflags = +faststart(moov前置) - 寻找首个关键帧对齐 (丢弃开头残帧)
- 时间基重缩放
av_packet_rescale_ts并写入 - 写入文件尾
av_write_trailer
CPU解码性能不足导致丢帧时怎么动态调整解码的策略?
FFmpeg 的 AVCodecContext 提供了专门应对算力不足的动态参数,在解码过程中就可以直接跳过高耗时运算,无需重启解码器:
- 跳过去块效应滤波:
skip_loop_filter,关闭非关键帧(B 帧)的滤波 - 直接跳过“非参考帧”解码:
skip_frame,跳过 B 帧的解码。 - 软解线程自适应调整,减少上下文切换。
- 跳 GOP 追赶
- 编解码格式降级、分辨率降级
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 逸人の博客!
评论

