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

 对于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': 被声明为已否决

    解决方法如下

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值