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

news/2024/7/10 21:09:29 标签: 音视频, ffmpeg

介绍

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

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

解析

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

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 的结构体如下

typedef struct AVRational {
    int num; ///< Numerator (分子)
    int den; ///< Denominator (分母)
} AVRational;

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

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

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


http://www.niftyadmin.cn/n/5195402.html

相关文章

AI绘画使用Stable Diffusion(SDXL)绘制三星堆风格的图片

一、前言 三星堆文化是一种古老的中国文化&#xff0c;它以其精湛的青铜铸造技术闻名&#xff0c;出土文物中最著名的包括青铜面具、青铜人像、金杖、玉器等。这些文物具有独特的艺术风格&#xff0c;显示了高度的工艺水平和复杂的社会结构。 青铜面具的巨大眼睛和突出的颧骨&a…

Qt遇到常见问题记录

1.Qt版本选择 Qt4.8.7是Qt4的终结版本&#xff0c;是Qt4系列版本中最稳定最经典的 &#xff08;很多嵌入式板子还是用Qt4.8&#xff09;&#xff0c;其实该版本是和Qt5.5差不多时间发布的。 参考链接 Qt 5.5 Released Qt5.6.3最最后支持xp系统的长期支持版本&#xff0c;Q…

hypermesh常用快捷键

#hypermesh常用快捷键

ScalableMap

问题引入 传统方案在处理线性地图元素时忽略了其结构性约束&#xff0c;建图距离太近 方法 简介 结构引导BEV特征提取 一种新的层次稀疏地图表示方法 设计渐进解码机制和基于此表示的监督策略 组件 结构引导BEV表征 通过车载摄像头捕捉的环绕视图图像&#xff0c;利用Res…

第7天:信息打点-资产泄漏amp;CMS识别amp;Git监控amp;SVNamp;DS_Storeamp;备份

第7天&#xff1a;信息打点-资产泄漏&CMS识别&Git监控&SVN&DS_Store&备份 知识点&#xff1a; 一、cms指纹识别获取方式 网上开源的程序&#xff0c;得到名字就可以搜索直接获取到源码。 cms在线识别&#xff1a; CMS识别&#xff1a;https://www.yun…

【机器学习】划分训练集和测试集的方法

在机器学习中&#xff0c;我们的模型建立完成后&#xff0c;通常要根据评估指标来对模型进行评估&#xff0c;以此来判断模型的可用性。而评估指标主要的目的是让模型在未知数据上的预测能力最好。因此&#xff0c;我们在模型训练之前&#xff0c;要对训练集和测试集进行划分。…

em/px/rem/vh/vw 的区别?

px px表示像素&#xff0c;所谓像素就是呈现在显示器上的一个个小点&#xff0c;每个像素点都是大小等同的&#xff0c;所以像素为绝对长度单位。 在移动端中存在设备像素比&#xff0c;px实际显示的大小是不确定&#xff0c;之所以认为px为绝对单位&#xff0c;在于px的大小和…

mybatis使用xml形式配置

以这个注解形式的查询代码为例 Select("select * from emp where name like concat(%,#{name},%) and gender #{gender} and entrydate between #{begin} and #{end} order by update_time desc ")public List<Emp> list(String name, Short gender, LocalDat…