ffmpeg——简单播放器代码

1.媒体文件播放总体过程

媒体文件——>解复用——>解码——>调用播放接口——>播放
在这里插入图片描述

2.解复用

2.1 什么是解复用?

解复用:将媒体文件分解为视频流和音频流

avformat_open_input() /*打开对应的文件,查找对应的解复用器,flv解复用规则最简单*/

解复用之后的视频流,音频流放在AVPacket的结构体中。

2.2 解复用相关函数

在这里插入图片描述

2.3 解复用流程

在这里插入图片描述

3.解码

解码:将视频流和音频流转化为视频帧和音频帧。

4.调用播放接口

5.实际操作

  1. 配置开发环境
    将编译好的ffmpeg动态库中的动态库文件(.so(dll)以及lib)复制到创建好的项目文件夹中,并修改配置文件。

  2. 主函数代码

#include <stdio.h>
#include "libavformat/avformat.h"  /*解复用器的库*/
#include "libavcodec/avcodec.h"
#include "SDL.h"L                  /*可能不用*//*
播放视频的代码流程
1 打开文件
2 查找视频流成分
3 读取视频包
4 解码视频包
5 播放解码后的视频
*/
int g_quit = 0;
int main(int argc, char *argv[])
{printf("open file:%s!\n", argv[1]);int ret = 0;AVFormatContext *pFormatCtx = NULL;/*分配解复用器的上下文*/pFormatCtx = avformat_alloc_context();/*打开媒体文件*/ret = avformat_open_input(&pFormatCtx, argv[1], NULL, NULL);if(ret < 0) {printf("avformat_open_input %s failed\n", argv[1]);return -1;}/*获取码流信息*/ret = avformat_find_stream_info(pFormatCtx, NULL);if(ret < 0) {printf("avformat_find_stream_info %s failed\n", argv[1]);return -1;}/*获取音频流和视频流索引,一般视频流索引是0,音频流索引是1*/int video_index = av_find_best_stream(pFormatCtx, AVMEDIA_TYPE_VIDEO, -1, -1, NULL, 0);if(video_index < 0) {printf("av_find_best_stream %s failed\n", argv[1]);return -1;}int audio_index = av_find_best_stream(pFormatCtx, AVMEDIA_TYPE_AUDIO, -1, -1, NULL, 0);if(audio_index < 0) {printf("av_find_best_stream %s failed\n", argv[1]);return -1;}/*查找解码器上下文*/AVCodecContext *pCodecCtx = avcodec_alloc_context3(NULL);if(!pCodecCtx) {printf("avcodec_alloc_context3 %s failed\n", argv[1]);return -1;}/*拷贝解码器参数*/ret = avcodec_parameters_to_context(pCodecCtx, pFormatCtx->streams[video_index]->codecpar);if(ret < 0) {printf("avcodec_parameters_to_context %s failed\n", argv[1]);return -1;}/*查找解码器*/AVCodec *pCodec = avcodec_find_decoder(pCodecCtx->codec_id);if(!pCodec) {printf("avcodec_find_decoder %d failed\n", pCodecCtx->codec_id);return -1;}/*打开解码器,将解码器和解码器上下文关联*/ret = avcodec_open2(pCodecCtx, pCodec, NULL);if(ret < 0) {printf("avcodec_open2 %s failed\n", argv[1]);return -1;}/*查看文件信息*//*av_dump_format(pFormatCtx, 0, argv[1], NULL);*//*分配一个AVPacket*/AVPacket *pkt = av_packet_alloc();/*pkt初始化*/av_init_packet(pkt);/*分配一个AVFrame*/AVFrame *frame = av_frame_alloc();while(g_quit != 1) {/*读取音视频包*/ret = av_read_frame(pFormatCtx, pkt);if(ret < 0) {printf("read end of\n");break;}/*通过索引判断音频流和视频流*/if(pkt->stream_index == video_index) {/*解码*//*发送原始视频流包去解码*/ret = avcodec_send_packet(pCodecCtx, pkt);if(ret != 0) {printf("avcodec_send_packet ret:%d\n", ret);}/*获取解码后的视频帧*/ret = avcodec_receive_frame(pCodecCtx, frame);if(ret != 0) {printf("avcodec_send_packet ret:%d\n", ret);}/*将视频帧播放,这个部分是根据sdl写的*/if(ret == 0) {}}else if(pkt->stream_index == audio_index) {}else {printf("read unkown packet\n");}/*释放包内存*/av_packet_unref(pkt);}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/482970.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Nature公布2022年值得关注的七大科学事件, 中国一项入选!

来源&#xff1a;科技日报 记者 刘霞 文中图片来自《自然》杂志官网&#xff0c;版权属于原作者&#xff0c;仅用于学术分享尽管今年新冠疫情仍然肆虐&#xff0c;给人类带来不少悲剧和灾难&#xff0c;但“每朵乌云都镶有金边”&#xff01;新冠疫苗成为抗击疫情的有力武器、…

计算机网络学习笔记-01-概念,组成,功能,分类

计算机网络-2019 王道考研 计算机网络-1-概念&#xff0c;组成&#xff0c;功能&#xff0c;分类 文章目录1.概念&#xff0c;组成&#xff0c;功能&#xff0c;分类1.1概念1.2功能1.3组成部分1.3分类1.4思维导图总结1.概念&#xff0c;组成&#xff0c;功能&#xff0c;分类 …

深度学习如炼丹,你有哪些迷信做法?网友:Random seed=42结果好

来源&#xff1a;机器学习研究组订阅调参的苦与泪&#xff0c;还有那些「迷信的做法」。每个机器学习领域的研究者都会面临调参过程的考验&#xff0c;当往往说来容易做来难。调参的背后往往是通宵达旦的论文研究与 GitHub 查阅&#xff0c;并需要做大量的实验&#xff0c;不仅…

计算机网络学习笔记-02-标准化工作以及相关组织

计算机网络-2019 王道考研 计算机网络-02-标准化工作以及相关组织 文章目录2.标准化工作以及相关组织2.1标准化工作2.2 相关组织2.3思维导图2.标准化工作以及相关组织 2.1标准化工作 标准的分类 法定标准&#xff1a;OSI事实标准&#xff1a;TCP/IP 举例子&#xff1a;手机卡…

Go-cron定时任务

1、cron(计划任务) 按照约定的时间&#xff0c;定时的执行特定的任务&#xff08;job&#xff09;。 cron 表达式 表达了这种约定。 cron 表达式代表了一个时间集合&#xff0c;使用 6 个空格分隔的字段表示。 秒 分 时 日 月 星期 2、Linux的cron与Go的cron区别 linux 中的 cr…

2021年突破人类想象力的6大科学纪录

来源&#xff1a;《科技日报》 人类每年都在创造历史&#xff0c;科学家们也在不断创造新纪录&#xff0c;今年也不例外&#xff01;美国《科学新闻》杂志网站在12月20日的报道中&#xff0c;为我们梳理了2021年令人惊奇的6大科学纪录&#xff0c;包括发现迄今最古老的黑洞以及…

操作系统学习笔记-01-操作系统的概念(定义),功能和目标

操作系统学习笔记-2019 王道考研 操作系统-01-操作系统的概念&#xff08;定义&#xff09;&#xff0c;功能和目标 文章目录1-操作系统的概念&#xff08;定义&#xff09;&#xff0c;功能和目标1.1常见的操作系统1.2概念&#xff08;定义&#xff09;1.3-操作系统的功能和目…

从复现人类智能到挑战AI大工程,智能计算正经历什么考验?

来源&#xff1a;AI科技评论作者&#xff1a;杏花编辑&#xff1a;青暮世界顶级机器学习专家Michael I.Jordan曾提出一个观点&#xff0c;他认为人工智能正逐步由原理性研究&#xff0c;走向人工智能大工程。Michael I.Jordan认为&#xff0c;随着机器学习的蓬勃发展&#xff0…

操作系统学习笔记-02-操作系统的特征

操作系统学习笔记-2019 王道考研 操作系统-2-操作系统的特征 文章目录02-操作系统四个的特征2.1-知识概览2.2并发2.3共享2.3并发和共享的关系2.4虚拟2.5小结&#xff1a;虚拟技术2.6-异步2.7知识回顾02-操作系统四个的特征 2.1-知识概览 2.2并发 并发:指两个或多个事件在同-一…

从宇宙、互联网和脑的关系看元宇宙的终极形态

作者 刘锋 曾经在2012年写过一篇论文《THE EVOLUTION ROAD MAP FROM THE ORIGIN OF LIFE TO THE INTELLIGENT UNIVERSE》&#xff0c;探讨了关于宇宙、互联网和脑之间的内在联系&#xff0c;阐述面本世纪以来&#xff0c;互联网为核心的科技生态出现越来越多的类脑特征&#xf…

操作系统学习笔记-03-操作系统的发展和分类

操作系统学习笔记-2019 王道考研 操作系统-01-操作系统的概念&#xff08;定义&#xff09;&#xff0c;功能和目标 文章目录3-操作系统的发展和分类3.1知识总览3.2 手工操作&#xff0c;纸带机&#xff0c;串行式3.3批处理阶段-单道批处理系统-多道批处理系统3.4分时操作系统3…

马斯克炮轰元宇宙与Web3.0:“我不觉得有人会成天把屏幕绑在脑袋上”

来源&#xff1a;雷峰网元宇宙和 Web3.0据称将是彻底改变数字世界的两种趋势。但现实世界中的首富、硅谷钢铁侠埃隆马斯克对两者似乎都并不怎么看好。在最近的一次采访中&#xff0c;马斯克表示&#xff0c;他在市场上并没有看到任何值得注意的元宇宙VR应用&#xff0c;并表示他…

操作系统学习笔记-04-操作系统的运行机制和体系结构

操作系统学习笔记-2019 王道考研 操作系统-04-操作系统的运行机制和体系结构 文章目录4-操作系统的运行机制和体系结构4.1知识总览4.2运行机制4.2.1预备知识&#xff1a;什么是指令&#xff1f;4.2.2两种指令&#xff0c;两种处理器状态&#xff0c;两种程序4.2.3运行机制小结4…

因果推断——现代统计的思想飞跃

来源&#xff1a;数学文化”公众号编辑&#xff1a;李达审核&#xff1a;范杰、李祺垣1 引言探求事物的原因&#xff0c;是人类永恒的精神活动之一。从古希腊的哲学到中国先秦的诗歌&#xff0c;都充满了对原因的追问和对因果关系的思考。比如&#xff0c;亚里士多德就在《物理…

操作系统学习笔记-05-中断和异常

操作系统学习笔记-2019 王道考研 操作系统-05-中断和异常 文章目录5-中断和异常5.1知识概览5.2 中断机制的诞生5.3中断概念和作用5.4中断的分类5.5 外中断的处理过程5.6思维导图5-中断和异常 5.1知识概览 5.2 中断机制的诞生 之前说的多道批处理系统&#xff0c;cpu给每个进程…

量化集体行为特刊:信息论为量化集体性提供形式化框架

来源&#xff1a;Theory in Biosciences译者&#xff1a;郭瑞东 审校&#xff1a;张澳 编辑&#xff1a;邓一雪 导语集体行为作为复杂系统的典型特征&#xff0c;存在大量有关同步、自组织的定量研究。然而&#xff0c;多数研究仅止步于以单一的视角或方法孤立量化集体性的某一…

操作系统学习笔记-06-系统调用

操作系统学习笔记-2019 王道考研 操作系统-06-系统调用 文章目录6-系统调用6.1 知识概览6.2什么是系统调用&#xff1f;有什么作用&#xff1f;6.3系统调用与库函数的区别6.4系统调用背后的过程6.5思维导图6-系统调用 6.1 知识概览 6.2什么是系统调用&#xff1f;有什么作用&a…

《Engineering》评选2021年全球十大工程成就

来源&#xff1a;中国工程院院刊“2021全球十大工程成就”发布工程是现实的、直接的生产力&#xff0c;是人类改变世界的重要活动。古往今来&#xff0c;人类创造了众多令人惊叹的工程成就&#xff0c;持续带动着经济发展和社会的深刻变革&#xff0c;推动人类文明迈上更高的台…

Gartner 2022年新兴技术和趋势影响力雷达图中五项具有影响力的技术

来源&#xff1a;Gartner公司编辑&#xff1a;蒲蒲如果一幢建筑能够告诉您暖通空调系统中的过滤器导致系统运行效率低下并需要更换&#xff0c;是不是会对您很有帮助&#xff1f;如果该系统还可以根据使用情况来调整暖风或通风呢&#xff1f;您目前的系统是否能够主动追踪建筑内…

计算机网络学习笔记-1.1.3-速率相关的性能指标

计算机网络-2019 王道考研 计算机网络-1.1.3-速率相关的性能指标 文章目录3-速率相关的性能指标性能指标之速率&#xff0c;带宽&#xff0c;吞吐量思维导图3.1速率--》传输单位你到底是咋转换的&#xff1f;3.2带宽--》网络水龙头你到底有多快&#xff1f;3.3吞吐量--》奸商&a…