FFmpeg 解封装简单流程

打开文件,主要是探测协议类型,如果是网络文件则创建网络链接

avformat_open_input(&ifmt_ctx, in_filename, NULL, NULL);

获取流信息

avformat_find_stream_info(ifmt_ctx, NULL);

打印媒体信息

av_dump_format(ifmt_ctx, 0, in_filename, 0);

遍历查找视频/音频流索引

for (uint32_t i = 0; i < ifmt_ctx->nb_streams; i++)

fmt_ctx->streams[i]->codecpar->codec_type == AVMEDIA_TYPE_VIDEO

fmt_ctx->streams[i]->codecpar->codec_type == AVMEDIA_TYPE_AUDIO

AVPacket *pkt = av_packet_alloc();

读取数据包

while (1)

{

av_read_frame(ifmt_ctx, pkt);

if (pkt->stream_index == audioindex)

...

if (pkt->stream_index == videoindex)

...

av_packet_unref(pkt);

}

av_packet_free(&pkt);

avformat_close_input(&ifmt_ctx);

相关推荐
郝学胜-神的一滴3 小时前
深入理解 Qt 元对象系统:QMetaEnum 的应用与实践
开发语言·c++·qt·软件工程
Brookty3 小时前
【Java学习】定时器Timer(源码详解)
java·开发语言·学习·多线程·javaee
ao_lang3 小时前
Qt事件处理全解析
开发语言·qt
艾莉丝努力练剑3 小时前
【C++STL :vector类 (二) 】攻克 C++ Vector 的迭代器失效陷阱:从源码层面详解原理与解决方案
linux·开发语言·c++·经验分享
weixin_417257064 小时前
Qt解决不同线程,调用对方的函数
开发语言·qt
梦终剧5 小时前
【Android之路】 Kotlin 的 data class、enum class、sealed interface
android·开发语言·kotlin
半夏知半秋5 小时前
基于skynet框架业务中的gateway实现分析
服务器·开发语言·后端·学习·gateway
Leo6553511 小时前
JDK8 的排序、分组求和,转换为Map
java·开发语言
磨十三12 小时前
C++ 标准库排序算法 std::sort 使用详解
开发语言·c++·排序算法