音视频项目—基于FFmpeg和SDL的音视频播放器解析(五)

介绍

在本系列,我打算花大篇幅讲解我的 gitee 项目音视频播放器,在这个项目,您可以学到音视频解封装,解码,SDL渲染相关的知识。您对源代码感兴趣的话,请查看基于FFmpeg和SDL的音视频播放器

如果您不理解本文,可参考我的前一篇文章音视频项目---基于FFmpeg和SDL的音视频播放器解析(四)

解析

接着上文,我们继续解析上次没讲完的四个函数,AudioCodecParameters,VideoCodecParameters,AudioStreamTimebase,VideoStreamTimebase。

cpp 复制代码
AVCodecParameters* DemuxThread::AudioCodecParameters(){
	if(audio_index != -1){
		return ifmt_ctx->streams[audio_index]->codecpar;
	}else{
		return nullptr;
	}
}

AVCodecParameters* DemuxThread::VideoCodecParameters(){
	if(video_index != -1){
		return ifmt_ctx->streams[video_index]->codecpar;
	}else{
		return nullptr;
	}
}

AVRational DemuxThread::AudioStreamTimebase(){
	if(audio_index != -1){
		return ifmt_ctx->streams[audio_index]->time_base;
	}else{
		return AVRational{0, 0};
	}
}

AVRational DemuxThread::VideoStreamTimebase(){
	if(video_index != -1){
		return ifmt_ctx->streams[video_index]->time_base;
	}else{
		return AVRational{0, 0};
	}
}

因为 video 和 audio 同理,因此我们就只讲 video 的例子,audio 同样理解就行。

我们首先将 AVCodecParameters,如果视频的 index 存在,就是不等于 -1 的时候,返回当前流中的 codecpar,即为 AVCodecParameters。这是用于保存音视频流的基本参数信息的结构体,想了解细节可看ffmpeg之AVCodecParameters结构体详细解释

接着,我们讲 AVRational,同理,如果当前的 index 存在时,则返回 time-base。

AVRational 的结构体如下

cpp 复制代码
typedef struct AVRational {
    int num; ///< Numerator (分子)
    int den; ///< Denominator (分母)
} AVRational;

主要用于时间戳和帧率的计算,例如,对于一个帧率为 25fps 的视频来说,其 AVRational 可以表示为 {25, 1}。

好了,demuxthread 我们就解析完了,下一篇文章我们会讲负责解码的线程 decodethread。

欲知后事如何,请听下回分解。

相关推荐
海南java第二人4 小时前
数据库范式详解:从冗余到规范的升华之旅
数据库·oracle·ffmpeg
EasyCVR6 小时前
智能守护绿水青山:视频融合平台EasyCVR在森林防火监控中的实战应用
音视频
ACP广源盛139246256736 小时前
GSV1016/ACP#HDMI2.0 HDCP1.4 发射器(TTL/LVDS 输入 + 音频插入)技术解析
单片机·嵌入式硬件·音视频
卜锦元6 小时前
Mediasoup的SFU媒体服务转发中心详解(与传统SFU的区别)
音视频·webrtc·媒体
小影译片6 小时前
zmaiFy音频转录介绍
音视频
ACP广源盛139246256737 小时前
GSV6505F---1 In to 4 Out HDMI 2.1 Splitter with Embedded MCU
单片机·嵌入式硬件·音视频
mortimer9 小时前
只需三步,动手搭建一个本地免费【实时语音转录】工具WhisperLiveKit
ffmpeg·github·openai
EasyCVR12 小时前
视频融合平台EasyCVR:构建智慧化城市/乡镇污水处理厂综合安防与运营监管方案
音视频
菠萝加点糖12 小时前
Android 使用MediaMuxer+MediaCodec编码MP4视频异步方案
android·音视频·编码
EasyCVR17 小时前
视频汇聚平台EasyCVR:构建通信基站“可视、可管、可控”的智慧安防体系
服务器·数据库·音视频