第六章 音视频-FFmpeg实现播放器解码和对应数据处理

第六章 音视频-FFmpeg实现播放器解码和对应数据处理

第一章 音视频-FFmpeg解码流程和对应结构参数意
第二章 音视频-FFmpeg对应解析格式说明
第三章 音视频-FFmpeg对应AVFrame解码处理思路和用途
第四章 音视频-FFmpeg实现播放器思维
第五章 音视频-FFmpeg实现播放器解封装、读AVPacket包
第六章 音视频-FFmpeg实现播放器解码和对应数据处理

音视频解码

根据播放器框架步骤,上一章说完读AVPacket包后解码,读AVPacket可以把包放进队列,分为音频队列audio_queue和视频队列video_queue进去入队。然后创建音频和视频解码线程thread,上面逻辑步骤自己实现。ffmpeg解码是把AVPacket的压缩包解码成AVFrame的数据结构体,下面通用音视频解码方法:

c 复制代码
// This does not quite work like avcodec_decode_audio4/avcodec_decode_video2.
// There is the following difference: if you got a frame, you must call
// it again with pkt=NULL. pkt==NULL is treated differently from pkt->size==0
// (pkt==NULL means get more output, pkt->size==0 is a flush/drain packet)
static int decode(AVCodecContext *avctx, AVFrame *frame, int *got_frame, AVPacket *pkt)
{
    int ret;

    *got_frame = 0;

    if (pkt) {
        ret = avcodec_send_packet(avctx, pkt);
        // In particular, we don't expect AVERROR(EAGAIN), because we read all
        // decoded frames with avcodec_receive_frame() until done.
        if (ret < 0 && ret != AVERROR_EOF)
            return ret;
    }

    ret = avcodec_receive_frame(avctx, frame);
    if (ret < 0 && ret != AVERROR(EAGAIN))
        return ret;
    if (ret >= 0)
        *got_frame = 1;

    return 0;
}

视频AVFrame

  • 要将视频AVFrame的时间戳(PTS)转换为毫秒,你需要考虑视频的时间基(time base)以及帧率(frame rate)。通常情况下,视频的时间戳是以基本时间单位(如秒)表示的,而帧率则指示每秒播放的帧数。
  • 要将视频的AVFrame转换为YUV420p格式,你可以使用FFmpeg的相关功能、libYUV等。
  • 然后上面转换后放在在视频帧队列进行渲染备用

音频AVFrame

  • 把音频解码出来AVFrame对应时间戳有两种,对于音频AVFrame的时间戳,一种常见的方式是跟视频一样根据时间戳(PTS),另一种方式是使用时间基(time base)和采样率(sample rate)来计算。
  • 音频AVFrame进行重采样匹配相关采样率、格式位数、通道等处理,原因扩张播放器匹配其他混音用途
  • 把音频帧保存在音频队列进行播放音频备用
相关推荐
木斯佳1 小时前
鸿蒙开发入门指南:前端开发者快速理解视频编码概念——输入模式
华为·音视频·harmonyos
EasyDSS6 小时前
私有化音视频系统/视频直播点播/高清点播/云点播/云直播EasyDSS优化升级重塑智慧文旅直播运营新体系
音视频
CV实验室7 小时前
Remote Sensing 29个SITS基准数据集综述:多模态遥感分类的新起点
人工智能·深度学习·计算机视觉·音视频
EasyDSS9 小时前
安全可控、全场景适配:私有化音视频系统/视频直播点播EasyDSS一站式云平台重构视频协作新模式
安全·重构·音视频
superantwmhsxx10 小时前
Seedance 2.0 初探:从文生视频到可控创作的 AI 视频工作流
人工智能·计算机视觉·音视频
EasyDSS10 小时前
私有化视频会议系统/企业级融媒体平台EasyDSS优化升级打造轻量化高效视频协作场景
网络·音视频·媒体
searchforAI11 小时前
网盘视频转文字后,如何高效做笔记并长期归档?
人工智能·笔记·学习·ai·音视频·语音识别·网盘
兆。11 小时前
LangChain语音音频集成指南:面向多媒体开发者
langchain·音视频
“码”力全开11 小时前
解耦品牌壁垒:基于 Docker 与边缘计算的高并发视频中台架构(支持 GB28181/RTSP 统一接入与源码交付)
docker·音视频·边缘计算
EasyCVR12 小时前
监控“孤岛”困局:国标GB28181视频监控平台EasyCVR一站式视频融合平台实现视频系统统一管理
android·音视频