视频封装概述

MP4 格式分析

解封装流程

AVFormatContext

nb_streams: 有多少条流,比如视频流、音频流

streams: 流的相关信息

AVStream

AVCodecParameters

avformat_open_input 打开文件或者网络地址

avformat_find_stream_info

av_read_frame 读取一帧数

测试代码

121_test_demux.cpp

#include <iostream>using namespace std;extern "C"  // 指定函数是 C 语言函数,函数目标名不包含重载标识,C++ 中调用 C 函数需要使用 extern "C"
{
// 引用 ffmpeg 头文件
#include "libavcodec/avcodec.h"
#include "libavformat/avformat.h"
}// 预处理指令导入库
#pragma comment(lib, "avcodec.lib")
#pragma comment(lib, "avformat.lib")
#pragma comment(lib, "avutil.lib")#define CERR(err)  if(err != 0)                \{                      \PrintError(err);   \return -1;         \}static void PrintError(int err)
{char buf[1024] = { 0 };av_strerror(err, buf, sizeof(buf) - 1);cerr << buf << endl;
}int main()
{int ret = 0;AVFormatContext* ic = nullptr;  // 解封装输入上下文const char* url = "v1080.mp4";AVPacket packet;AVStream* vs = nullptr;  //视频流AVStream* as = nullptr;  //音频流ret = avformat_open_input(&ic, url, nullptr,   // 封装器格式 nullptr 自动探测 根据后缀名或者文件头 nullptr      // 参数设置,rtsp需要设置);  CERR(ret);// 获取媒体信息 无头部格式ret = avformat_find_stream_info(ic, nullptr);CERR(ret);// 打印封装信息av_dump_format(ic, 0, url, 0    // 0表示上下文是输入 1 输出);for (int i = 0; i < ic->nb_streams; i++){if (ic->streams[i]->codecpar->codec_type == AVMEDIA_TYPE_VIDEO){vs = ic->streams[i];cout << "video: " << "width = " << vs->codecpar->width << " hwight = " << vs->codecpar->height << " bitrate = " << vs->codecpar->bit_rate << endl;}else if (ic->streams[i]->codecpar->codec_type == AVMEDIA_TYPE_AUDIO){as = ic->streams[i];cout << "audio: " << "sample rate = " << as->codecpar->sample_rate << endl;}}while (1){ret = av_read_frame(ic, &packet);  // 此函数不会是否 packet 中原先的 buf 空间,需要手动调用 av_packet_unref 来释放 buf 空间CERR(ret);if (vs && (packet.stream_index == vs->codecpar->codec_type)){cout << "video ";}else if (as && (packet.stream_index == as->codecpar->codec_type)){cout << "audio ";}cout << packet.pts << " : " << packet.dts << endl;av_packet_unref(&packet);}avformat_close_input(&ic);return 0;
}

测试结果如下图所示:

ffmpeg解封装代码示例相关推荐

  1. ffmpeg解封装及解码实战

    ffmpeg解封装及解码实战 目录 封装格式相关函数 解封装流程 补充 分离AAC和H264 1. 封装格式相关函数 1. 基本概念 2. 相关函数 1. avformat_alloc_context ...

  2. java集合框架的结构_集合框架(Collections Framework)详解及代码示例

    简介 集合和数组的区别: 数组存储基础数据类型,且每一个数组都只能存储一种数据类型的数据,空间不可变. 集合存储对象,一个集合中可以存储多种类型的对象.空间可变. 严格地说,集合是存储对象的引用,每个 ...

  3. FFmpeg入门详解之43:FFmpeg解封装的原理与实战

    FFMpeg 解封装 本例子实现的是将音视频分离,例如将封装格式为 FLV.MKV.MP4.AVI 等封装格式的文件,将音频.视频分离开来. 大致的解封装流程: 1.首先要对解复用器进行初始化. 2. ...

  4. 三维空间刚体运动1:旋转矩阵与变换矩阵(详解加代码示例)

    三维空间刚体运动1:旋转矩阵与变换矩阵(详解加代码示例) 1. 点.向量和坐标系 2.坐标系间的欧式变换 2.1 旋转 2.2 平移 3.齐次坐标和变换矩阵 4. 相似.仿射和射影变换 4.1 相似变 ...

  5. wait 和 waitpid 详解及代码示例

    wait 和 waitpid 详解及代码示例 1. 父子进程处理历史及父进程处理方法 2. wait 2.1 wait 功能 2.2 wait 接口 2.3 wait 原理 2.3.1 wait 源码 ...

  6. Java 泛型(generics)详解及代码示例、Java 类型通配符详解及代码示例

    Java 泛型(generics)详解及代码示例.Java 类型通配符详解及代码示例 - 概念 Java 泛型(generics)是 JDK 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机制 ...

  7. FFmpeg解封装、解码音频和视频(分别使用OpenGL和OpenAL播放)

    1 ffmpeg解码大致流程   下图是ffmpeg解码播放音视频的基本流程: 首先是网络媒体解协议,解协议之后得到对应的媒体文件比如mp4,ts等,这些格式是媒体文件的封装格式,也就是将音频,视频, ...

  8. ffmpeg解封装出来的h264裸流设置SPS、PPS

    注:本文转自https://blog.csdn.net/qingkongyeyue/article/details/54023323 SPS:H.264码流第一个 NALU是 SPS(序列参数集Seq ...

  9. 【FFmpeg】详解FFmpeg解封装、解码流程

    目录 1.获取媒体信息头 2.获取媒体流信息 3.准备解码器 3.1 获取视频.音频.字幕流在解封装上下文 AVFormatContext 的流列表 AVStream **streams 中的索引 3 ...

最新文章

  1. charts混合使用 elementui和e_vue模块化(echart+element ui)
  2. 360能删除mysql吗_如何彻底删除MYSQL
  3. 广联达2018模板算量步骤_工程人必须掌握:这9份软件算量教程+24份算量计算表,无偿分享...
  4. 04_pandas字符串函数;数据合并concat、merge;分组groupby;Reshaping;Pivot tables;时间处理(date_range、tz_localize等)
  5. #if defined 和 #if ! defined 的用法
  6. C# DllImport的用法(转)
  7. 对XML文件进行的添加、删除、修改、查询操作。
  8. 斜视术后融合训练方法_做斜视手术两年后又复发了怎么办?
  9. 5G 和 AI 双驱动,互联网有望迎来第二春
  10. SQL中Convert()函数的使用方法
  11. matlab 读取shp面文件,在matlab中将处理结果输出为shp文件
  12. android逻辑分辨率,移动端web页面知识小结之手机分辨率与手机像素
  13. 简述网卡的作用和工作原理_简述网卡的主要功能
  14. [轻笔记]Pytorch语义分割输出转换为图像显示
  15. java二进制对象_java 二进制搜索
  16. at91rm9200 rtl8201 网络不通
  17. PADS——PCB的制作
  18. Pr 入门教程:如何倾斜移位效果?
  19. iqoo手机计算机背景变白,更精准的色彩显示,出厂屏幕校准的手机大合集
  20. python实现图像透视投影

热门文章

  1. 高速Serdes串行接口
  2. STM32串口通信详解(嵌入式学习)
  3. 关于Deep learning和NLP实战应用项目
  4. android浏览器自动全屏,android-完整的网页和所有移动浏览器的禁用的缩放视口元标记...
  5. Python版本的Markdown工具:Handout使用教程!用Python代码直接排版!
  6. 4-CNN-demo-0401-数据增强OpenCV
  7. GCC编译优化应用预编译头
  8. Kotlin(四)匿名函数
  9. Theme.AppCompat.Light.DarkActionBar 问题解决方法
  10. 如何用PS制作褪色老旧照片效果