第六章 音视频-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进行重采样匹配相关采样率、格式位数、通道等处理,原因扩张播放器匹配其他混音用途
  • 把音频帧保存在音频队列进行播放音频备用
相关推荐
Ulyanov11 小时前
从零构建现代化Python音频播放器:ttk深度应用与皮肤系统设计
python·架构·音视频·数据可视化
Ulyanov12 小时前
音视频分离与音频处理核心技术深度解析 从MP4到高品质音乐文件的完整技术实现
python·音视频
2501_9219308312 小时前
Flutter for OpenHarmony三方库适配实战:image_picker 图片视频选择
flutter·音视频
Flamingˢ15 小时前
ZYNQ+OV5640+VDMA+HDMI视频链路搭建实录:从摄像头采集到实时显示
arm开发·嵌入式硬件·fpga开发·vim·音视频
Black蜡笔小新16 小时前
视频融合平台EasyCVR核心技术架构解析与多场景应用实践
架构·音视频
EasyGBS16 小时前
国标GB28181视频分析平台EasyGBS视频质量诊断重塑工业园区监控智能运维新生态
大数据·网络·音视频
Wxinxiaozhang16 小时前
音频生成bin文件步骤
音视频
TEL1369976275016 小时前
SSS1700音频对录线方案 SSS1700规格书
音视频
YWamy16 小时前
智能硬件音视频SDK选型:RTC关键指标全指南
音视频
wsoz17 小时前
音视频分布传输协议(AVDTP)
音视频·嵌入式·蓝牙br/edr·avdtp