VideoDecoder初始化与Open函数实现

注意事项

  1. FFmpeg版本兼容
1
av_register_all();  // 在新版本中其实可省略

图片1
2. 初始化函数调用

  • init函数在构造函数中始终未被调用

CMake配置问题

CMake设置的路径必须在add_executable()或qt_add_executable()之前配置
图片1
图片1
图片1
图片1

视频时长计算

1
m_totalTime = m_formatContext->duration / (AV_TIME_BASE / 1000);
  • 计算视频总时长(毫秒)
  • AV_TIME_BASE是基础时间单位
  • 1000用于转换为毫秒单位

有理数转换

1
qreal rationalToDouble(AVRational* rational);
  • 将AVRational结构体转换为double类型
  • AVRational包含分子和分母
  • 函数执行简单的除法运算
    图片1
    图片1

解码器识别

视频流中包含解码器ID信息:

1
videoStream->codecpar->codec_id  // 例如:AV_CODEC_ID_H264
  • 通过ID可以找到对应的解码器(如h264)

性能优化设置

1
2
3
4
5
// 允许不符合规范的加速技巧
m_codecContext->flags2 |= AV_CODEC_FLAG2_FAST;

// 设置解码线程数
m_codecContext->thread_count = 8;

注意:线程数设置需要根据具体机器情况调整,8线程并不一定是最优选择,某些情况下单线程可能更快。
图片1