FFmpeg-chapter7和chapter8-使用 FFmpeg 解码视频(原理篇和实站篇)

解码流程如下图

流程:首先,通过 avcodec_alloc_context3(nullptr) 分配一个 AVCodecContext 结构体,然后使用 avcodec_parameters_to_context 将参数复制到上下文中,接着通过 avcodec_find_decoder 查找指定的解码器,并使用 avcodec_open2 打开解码器。

接下来,使用 av_read_frame 从输入流中读取帧,如果读取到帧,则使用 avcodec_send_packet 将帧发送到解码器。然后,通过 avcodec_receive_packet 接收解码后的帧,如果接收到帧,则进一步处理。

如果没有接收到帧,则继续读取下一帧。

最后,当所有帧处理完毕后,使用 avcodec_close 关闭解码器,并使用 avcodec_free_context 释放上下文内存。

具体函数:

  1. avcodec_alloc_context3(nullptr)

    • 作用:分配一个 AVCodecContext 结构体,用于存储解码器的上下文信息。

    • 返回值 :返回一个指向 AVCodecContext 的指针 codecContext。

  2. avcodec_parameters_to_context

    • 作用:将 AVCodecParameters 中的参数复制到 AVCodecContext 中,以便解码器能够正确地初始化。

    • 参数:通常是从 AVFormatContext(如从文件读取)中获取的参数。

  3. avcodec_find_decoder

    • 作用:查找指定的解码器。

    • 返回值 :返回一个指向 AVCodec 的指针 codec。

  4. avcodec_open2

    • 作用:打开解码器,初始化解码器上下文。

    • 参数:需要传递 AVCodecContext 和 AVCodec。

  5. av_read_frame

    • 作用:从输入流中读取一个视频帧(或音频帧)。

    • 返回值:成功返回 0,失败返回负值。

  6. 判断是否读取到帧

    • 作用:检查是否成功读取到帧。

    • 是:继续处理。

    • 否 :跳转到 avcodec_send_packet(nullptr)。

  7. avcodec_send_packet

    • 作用:将读取到的 AVPacket 发送到解码器。

    • 参数:AVPacket。

  8. avcodec_receive_packet

    • 作用:从解码器中接收解码后的 AVPacket。

    • 返回值:成功返回 0,失败返回负值。

  9. 判断是否取到帧

    • 作用:检查是否成功接收到帧。

    • 是:继续处理。

    • 否 :跳转到 avcodec_receive_frame。

  10. avcodec_receive_frame

    • 作用:从解码器中接收解码后的 AVFrame。

    • 返回值:成功返回 0,失败返回负值。

  11. 判断是否取到帧

    • 作用:检查是否成功接收到帧。

    • 是:继续处理。

    • 否 :跳转到 avcodec_close。

  12. avcodec_close

    • 作用:关闭解码器。
  13. avcodec_free_context

    • 作用:释放 AVCodecContext 的内存。

流程图的逻辑

  • 初始化解码器:从分配上下文到打开解码器。

  • 读取帧:从输入流中读取帧,并发送到解码器。

  • 接收解码后的帧:从解码器中接收解码后的帧。

  • 循环处理:直到所有帧都被处理完毕。

  • 关闭解码器:释放资源。

具体代码在这里:https://github.com/StudyWinter/MMAVPlayer/tree/main/chapter8

相关推荐
霖霖71424 分钟前
【ESP32笔记】I2S的音频录制与播放
笔记·单片机·mcu·音视频
码上观世界3 小时前
Agent 对话里的图片与视频处理
音视频
lingyubb6 小时前
影视解说配音工具的技术选型与对比(行业观察)
音视频·ai配音·多语种
科技小E12 小时前
监控设备品牌杂乱无法互通?EasyGBS打通孤岛,统一汇聚视频
服务器·网络·音视频
EasyGBS17 小时前
通信基站/铁塔机房无人值守,国标GB28181公网平台EasyGBS视频能力怎么去管
深度学习·安全·音视频
鲲穹AI种草17 小时前
音频剪辑降噪格式转换,鲲穹音频处理大师实测分享
音视频·音频剪辑
江节胜-胜行全栈AI18 小时前
实现海康/宇视NVR硬盘录像机/IPC摄像机监控历史回放录像rstp流视频的倍数下载
音视频
林墨聊AIGC19 小时前
AI分镜模板:一键生成高效短剧视觉流程
人工智能·ai作画·aigc·音视频·ai写作
程序员JerrySUN19 小时前
Jetson Edge AI 实战05:Secure Boot 到底在保护什么?PKC、SBK、Fuse 与可信启动链一次讲清【视频讲解】
arm开发·人工智能·安全·计算机视觉·目标跟踪·音视频
voipmaker19 小时前
选煤厂智能化:UWB 人员定位系统 WebAPI 对接融合通信平台实战
物联网·实时互动·json·音视频·实时音视频·web·视频