音视频项目—基于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。

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

相关推荐
tokepson7 小时前
关于音频处理工具FFmpeg | 笔记备注
计算机·ffmpeg·技术·记录
零匠学堂20259 小时前
移动学习系统,如何提升企业培训效果?
java·开发语言·spring boot·学习·音视频
Silicore_Emma10 小时前
芯谷科技—D8227 双通道音频功率放大集成电路产品简介与应用推广
单片机·音视频·功率放大器·芯谷科技·便携式音频设备·双通道音频·车载音频系统
生活爱好者!10 小时前
【影视项目】NAS 部署稳定视频订阅源咪咕
服务器·网络·docker·容器·音视频
智算菩萨12 小时前
2025年Sora类视频生成模型架构剖析:时空编码与扩散机制
架构·音视频
Hello.Reader13 小时前
用纯 Go 实现一个 AES-128 加密 m3u8 视频下载器(不依赖 ffmpeg)
golang·ffmpeg·音视频·m3u8
EasyCVR13 小时前
安防监控EasyCVR视频汇聚平台RTSP流播放异常的原因排查
音视频
DisonTangor13 小时前
Step-Audio-R1 首个成功实现测试时计算扩展的音频语言模型
人工智能·语言模型·开源·aigc·音视频
音视频牛哥15 小时前
从低延迟到高可用:RTMP与 HTTP/HTTPS-FLV在App播放体系中的角色重构
人工智能·音视频·音视频开发·http-flv播放器·https-flv播放器·ws-flv播放器·wss-flv播放器
Hommy8815 小时前
如何利用剪映小助手实现视频批量剪辑?
aigc·音视频·批量剪辑·剪映