基于FFmpeg的视频播放器开发系列教程(二)

news2024/11/24 0:27:54

 对于ffmpeg的架构介绍,请参考24岁“封神”雷霄骅的博客,他已离开江湖,但江湖仍有他的传说。

       FFmpeg源代码结构图 - 编码:https://blog.csdn.net/leixiaohua1020/article/details/44226355

       FFmpeg源代码结构图 - 解码:https://blog.csdn.net/leixiaohua1020/article/details/44220151

一.ffmpeg开发入门

      下面是一个打开视频的小例子。

     先用Win32控制台程序来讲解ffmpeg的简单开发,建立Win32的控制台项目,在项目属性中加入ffmpeg的库文件。没有ffmpeg3.2.4库文件的同学,请点击下载。

      代码如下:

// FFmpeg_打开视频文件.cpp : 定义控制台应用程序的入口点。
//
 
#include "stdafx.h"
#include <iostream>
 
extern "C"
{
    #include <libavformat/avformat.h>
}
 
#pragma comment(lib, "avformat.lib")
#pragma comment(lib, "avutil.lib")
#pragma comment(lib, "avcodec.lib")
 
using namespace std;
 
int main()
{
    av_register_all();  //ffmpeg程序的第一句,注册库
 
    AVFormatContext *afc = NULL;
 
    //打开视频文件
    int nRet = avformat_open_input(&afc, "天下有情人.mp4", 0, 0);
    if (nRet < 0)
    {
        cout << "找不到视频文件" << endl;
    }
    else
    {
        cout << "视频打开成功" << endl;
    }
    int durTime = afc->duration / AV_TIME_BASE;  //视频时间 4分20秒
    unsigned int numberOfStream = afc->nb_streams;  //包含流的个数2:一个视频流一个音频流
 
    for (int i = 0; i < afc->nb_streams; i++)
    {
        AVCodecContext *acc = afc->streams[i]->codec;
        if (acc->codec_type == AVMEDIA_TYPE_VIDEO)  //如果是视频类型
        {
            AVCodec *codec = avcodec_find_decoder(acc->codec_id);
            if (!codec)
            {
                cout << "没有该类型解码器" << endl;
            }
 
            int ret = avcodec_open2(acc, codec, NULL);
            if (ret != 0)
            {
                char buf[1024] = { 0 };
                av_strerror(ret, buf, sizeof(buf));
            }
 
            cout << "解码器打开成功" << endl;
        }
    }
 
    if (afc)
    {
        avformat_close_input(&afc);  //关闭视频流
    }
 
    system("pause");
    return 0;
}
   

    可能会出现以下编译错误:

    errorC4996: 'AVStream::codec': 被声明为已否决

    解决方法如下

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

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

相关文章

【剪辑教程】如何给视频添加配音旁白,三种文字转语音方法教给你

视频剪辑完成&#xff0c;应该如何给视频配音&#xff1f;三种配音方法快来学 现在许多自媒体都居家创作短视频&#xff0c;那么给短视频配音的问题就摆着了面前&#xff0c;怎么给我们的短视频配音呢&#xff0c;接下来就教大家三种给视频添加配音的方法。 方法一&#xff1a…

Linux权限(1)

Linux权限(1) &#x1f4df;作者主页&#xff1a;慢热的陕西人 &#x1f334;专栏链接&#xff1a;Linux &#x1f4e3;欢迎各位大佬&#x1f44d;点赞&#x1f525;关注&#x1f693;收藏&#xff0c;&#x1f349;留言 文章目录Linux权限(1)1. Linux权限的概念1.1 Linux上的用…

NLP之文本分类模型调优(模型基于tensorflow1.14)

项目链接&#xff1a;https://pan.baidu.com/s/1yOu0DogWkL8WOJksJmeiPw?pwd4bsg 提取码: 4bsg 复制这段内容后打开百度网盘手机App&#xff0c;操作更方便哦 --来自百度网盘超级会员v4的分享 1.基于上一篇文章中的文本分类项目进行精度调优&#xff0c;提升模型准确率&…

CET-4 week10 语法

0基础入门 point 谓语中自带 助动词 Such as ,I do like computer (强调且默认带有这个属性 大多数情况隐藏状态) 所有时态都有被动 do ->donewill do -> will be donehave down ->have been downbe doing ->be being donedid -> been downhad down ->ha…

flink-cdc-connectors-release-2.3.0自己编译

最新的cdc是2.21仅支持flink 1.13* 1.14*&#xff0c;而flink已经有1.15版本&#xff1b;自己编译支持1.15 下载官方包 https://github.com/ververica/flink-cdc-connectors/releases/tag/release-2.3.0 我下载的是source包&#xff0c;大家也可以去下载源码 1、下载后我们只需…

JUC并发编程第十三篇,AQS的作用与体系结构

JUC并发编程第十三篇&#xff0c;AQS的作用与体系结构一、AQS是什么&#xff1f;二、AQS在JUC中的地位与作用三、AQS体系结构一、AQS是什么&#xff1f; AbstractQueuedSynchronizer&#xff08;抽象队列同步器&#xff09;&#xff0c;是用来构建锁或者其它同步器组件的重量级…

[附源码]Node.js计算机毕业设计高校社团管理系统Express

项目运行 环境配置&#xff1a; Node.js最新版 Vscode Mysql5.7 HBuilderXNavicat11Vue。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分离等等。 环境需要 1.运行环境&#xff1a;最好是Nodejs最新版&#xff0c;我…

java EE初阶 — 多线程案例单例模式

文章目录1单例模式主要模式1.1 饿汉模式1.2 懒汉模式2 单例模式安全性问题1单例模式主要模式 在某些场景中&#xff0c;有些特定的类只能输出一个实例&#xff08;对象&#xff09;&#xff0c;不应该创建多个实例&#xff0c;此时就可以使用 单例模式。 使用了单例模式后&…

5款轻量级小软件,第一款更是近期必备!

今天的主题是简洁&#xff0c;轻便&#xff0c;都是轻量级的小软件&#xff0c;界面都是非常简洁&#xff0c;而且无广告的。 1.自动抢火车票工具——12306Bypass 12306Bypass是一款专用于帮助用户抢购火车车票的工具&#xff0c;春运马上就到了&#xff0c;又到了抢票回家的…

Docker数据卷操作

1. 为什么使用数据卷 卷是在一个或多个容器内被选定的目录&#xff0c;为docker提供持久化数据或共享数据&#xff0c;是docker存储容器生成和使用的数据的首选机制。对卷的修改会直接生效&#xff0c;当提交或创建镜像时&#xff0c;卷不被包括在镜像中。 总结为两个作用&am…

功率放大器在压电传感器矩形阵列成像研究中的应用

实验名称&#xff1a;激光和压电传感器密集型矩形阵列成像质量的比较分析 研究方向&#xff1a;Lamb波、无损检测、缺陷成像和定位 测试目的&#xff1a; 将密集型矩形阵列分别与压电传感器检测技术和激光检测技术相结合&#xff0c;利用幅值成像和符号相干因子成像实现对铝板结…

vector模拟实现下篇及迭代器失效和深浅拷贝问题详解

文章目录1:构造函数1.1默认构造函数1.2迭代器构造1.3用n个val构造1.4拷贝构造2:operator3:析构函数和clear4:迭代器失效问题4.1:删除偶数深浅拷贝1:构造函数 1.1默认构造函数 vector():_start(nullptr),_end(nullptr),_endofstorage(nullptr){}1.2迭代器构造 template<clas…

手动安装Kylin5.0版本的过程

官方文档 https://kylin.apache.org/目前kylin3,4版本是有docker版本和安装包的,5.0只有docker没有安装包 安装包 https://kylin.apache.org/download/安装kylin5.0 Kylin5.0文档拉取镜像 docker pull apachekylin/apache-kylin-standalone:5.0.0运行镜像 docker run -d \ …

linux-jdk、nginx

一、安装nginx Nginx是一个web服务器也可以用来做负载均衡及反向代理使用&#xff0c; 目前使用最多的就是负载均衡&#xff0c;这篇文章主要介绍了centos8 安装 nginx Nginx是一种开源的高性能HTTP和反向代理服务器&#xff0c;负责处理Internet上一些最大站点的负载。 它…

数据结构——重点代码汇总

顺序表 设计算法&#xff0c;从顺序表L中删除值为x的元素。要求算法的时间复杂度为O(n)&#xff0c;空间复杂度为O(1)。设计算法&#xff0c;判断一个字符串是否是回文。如abc3cba是回文序列&#xff0c;而1331不是回文序列。从顺序存储结构的线性表a中删除第i个元素起的k个元…

SuperMap GIS 倾斜摄影数据处理 QA

一、倾斜摄影数据简介 倾斜摄影&#xff08;Oblique photography&#xff09;是指由一定倾斜角度的航摄相机所获取的影像。倾斜摄影技术是国际摄影测量领域近十几年发展起来的一项高新技术&#xff0c;该技术通过从一个垂直、四个倾斜、五个不同的视角同步采集影像&#xff0c…

深度学习训练营之天气识别P3

深度学习训练营之天气识别原文链接环境介绍前置工作设置GPU导入数据数据查看数据预处理加载数据可视化数据检查数据配置数据集prefetch()功能详细介绍&#xff1a;构建CNN网络编译模型训练结果可视化原文链接 &#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记…

卫龙上市首日破发:高瓴、红杉、腾讯等账面亏损,刘卫平为董事长

12月15日&#xff0c;卫龙美味全球控股有限公司&#xff08;下称“卫龙”&#xff0c;HK:09985&#xff09;在港交所上市。本次上市&#xff0c;卫龙的发行价格为10.56港元/股&#xff0c;募资总额约为10.18亿港元&#xff0c;募资净额约为8.99亿港元。 上市首日&#xff0c;卫…

Web3中文|NFT如何助力项目进入Web3?

自NFT流行以来&#xff0c;一直有人将这些由区块链驱动的代币视作贯彻人类精神的最终疗法。 但是NFT真的都存储在区块链上了吗&#xff1f;如果是这样的话&#xff0c;怎么还会出现百万NFT被盗的事件呢&#xff1f; 如果你也想过这些问题&#xff0c;那么请相信我&#xff0c…

在现有项目里面添加 TSX 并编写组件过程记录

首先需要安装编译支持和 vite 支持插件 ## babel 基础插件 yarn add vue/babel-plugin-jsx -D## 项目用 vite 构建的就需要按照这个 yarn add vitejs/plugin-vue-jsx -D 使用插件 按照 babel-plugin-jsx 的指引在 babel 配置项中启用插件&#xff1a; {"plugins":…