Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【Android FFMPEG 开发】FFMPEG 获取 AVStream 音视频流 ( AVFormatContext 结构体 | 获取音视频流信息 | 获取音视频流个数 | 获取音视频流 )

【Android FFMPEG 开发】FFMPEG 获取 AVStream 音视频流 ( AVFormatContext 结构体 | 获取音视频流信息 | 获取音视频流个数 | 获取音视频流 )

作者头像
韩曙亮
发布于 2023-03-27 10:04:21
发布于 2023-03-27 10:04:21
84400
代码可运行
举报
运行总次数:0
代码可运行

文章目录

代码语言:txt
AI代码解释
复制
        - [博客简介 . FFMPEG 音视频流 获取流程](https://cloud.tencent.com/developer)
        - [I . FFMPEG 获取音视频流信息 ( AVFormatContext 结构体 )](https://cloud.tencent.com/developer)
        - [II . FFMPEG 获取 音视频流 数量](https://cloud.tencent.com/developer)
        - [III . FFMPEG 获取音视频流](https://cloud.tencent.com/developer)
博客简介 . FFMPEG 音视频流 获取流程

FFMPEG 音视频流 AVStream ( 结构体 ) 获取流程 :

① 获取音视频流信息 : avformat_find_stream_info ( ) , 在 【Android FFMPEG 开发】FFMPEG 初始化 ( 网络初始化 | 打开音视频 | 查找音视频流 ) 博客中 , FFMPEG 初始化完毕后 , 获取了音视频流 , 本博客中讲解获取该音视频流对应的编解码器 , 从获取该音视频流开始 ;

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
int avformat_find_stream_info(AVFormatContext *ic, AVDictionary **options);

② 音视频流数量 : 获取的音视频流信息存储在 AVFormatContext *formatContext 结构体中 , nb_streams 元素的值就是音视频流的个数 ;

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//音视频流的个数
formatContext->nb_streams

③ 音视频流 : AVFormatContext *formatContext 结构体中的 音视频流数组元素 AVStream **streams 元素 , 通过数组下标可以获取指定位置索引的音视频流 ;

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//取出一个媒体流 ( 视频流 / 音频流 )
AVStream *stream = formatContext->streams[i];
I . FFMPEG 获取音视频流信息 ( AVFormatContext 结构体 )

1 . 获取音视频流信息 : avformat_find_stream_info ( ) , 在 【Android FFMPEG 开发】FFMPEG 初始化 ( 网络初始化 | 打开音视频 | 查找音视频流 ) 博客中 , FFMPEG 初始化完毕后 , 获取了音视频流 , 本博客中讲解获取该音视频流对应的编解码器 , 从获取该音视频流开始 ;

2 . 信息存放载体 : 调用 avformat_find_stream_info ( ) 方法 , 获取音视频流信息存储在 AVFormatContext *formatContext 结构体中 ; 可以通过 formatContext->结构体元素 获取相应的 FFMPEG 数据 ;

II . FFMPEG 获取 音视频流 数量

1 . 结构体元素 : 音视频流数量信息存储在 AVFormatContext *formatContext 结构体中 的 unsigned int nb_streams 元素中 ;

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
 * Number of elements in AVFormatContext.streams.
 *
 * Set by avformat_new_stream(), must not be modified by any other code.
 */
unsigned int nb_streams;

2 . 获取示例 : 调用 AVFormatContext *formatContext 结构体指针的 “->” 运算符获取其结构体中的元素值 ;

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//stream_count 是音视频流数量
int stream_count = formatContext->nb_streams;
III . FFMPEG 获取音视频流

1 . 音视频流结构体 AVStream : 音视频流在 FFMPEG 中被定义成了结构体 , typedef struct AVStream , 该结构体定义在了 avformat.h 中 ;

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
 * Stream structure.
 * New fields can be added to the end with minor version bumps.
 * Removal, reordering and changes to existing fields require a major
 * version bump.
 * sizeof(AVStream) must not be used outside libav*.
 */
typedef struct AVStream {
	...
} AVStream

2 . 结构体元素 : 音视频流结构体 AVStream 存储在 AVFormatContext *formatContext 结构体中 的 AVStream **streams 元素中 , 这是一个 AVStream 结构体指针数组 ;

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
 * A list of all streams in the file. New streams are created with
 * avformat_new_stream().
 *
 * - demuxing: streams are created by libavformat in avformat_open_input().
 *             If AVFMTCTX_NOHEADER is set in ctx_flags, then new streams may also
 *             appear in av_read_frame().
 * - muxing: streams are created by the user before avformat_write_header().
 *
 * Freed by libavformat in avformat_free_context().
 */
AVStream **streams;

2 . 使用 AVStream ** 数组下标获取音视频流 :

① 获取 AVStream **streams 数组 : 调用 AVFormatContext *formatContext 结构体指针的 “->” 运算符获取其结构体中的 AVStream **streams 元素值 ;

② 获取 AVStream *stream 音视频流 : 再使用数组下标获取指定索引的 AVStream * 音视频流 ;

③ 常用使用场景 : 一般是在 for 循环中遍历解析音视频流 ;

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//formatContext->nb_streams 是 音频流 / 视频流 个数 ;
//  循环解析 视频流 / 音频流 , 一般是两个 , 一个视频流 , 一个音频流
for(int i = 0; i < formatContext->nb_streams; i ++){

    //取出一个媒体流 ( 视频流 / 音频流 )
    AVStream *stream = formatContext->streams[i];
    
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-03-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【音视频连载-011】第二季 FFmpeg 一层一层获取文件信息
https://github.com/glumes/av-beginner/blob/master/resource/video/video-avi-320x320.avi
音视频开发进阶
2020/05/24
7760
ffmpeg实战实现音视频解封装!
大家好,很长一段时间没有继续更新ffmpeg的相关技术文章了,最近更多的时间和精力主要集中在给自己不断灌入新的知识,所以接下来只要有时间就会疯狂输出所学习到的技术干货!
用户6280468
2022/03/21
1.1K0
ffmpeg实战实现音视频解封装!
FFmpeg获取音视频流信息
本文记录用 FFmpeg 获取视频流+音频流的信息(编码格式、分辨率、帧率、播放时长…),所用的工程基于上个博客编译成功的工程:使用FFmpeg4.3.1的SDK官方开发包编译ffmpeg.c
Gnep@97
2024/01/10
7340
FFmpeg获取音视频流信息
【Android FFMPEG 开发】FFMPEG 直播功能完整流程 + 源码 ( 源码交叉编译 -> AS工程配置 -> 音视频打开/读取/解码/格式转换 -> 原生绘制播放 -> 音视频同步 )
2 . 效果展示 : 使用的是湖南卫视的直播源 rtmp://58.200.131.2:1935/livetv/hunantv
韩曙亮
2023/03/27
2.5K0
【Android FFMPEG 开发】FFMPEG 直播功能完整流程 + 源码 ( 源码交叉编译 -> AS工程配置 -> 音视频打开/读取/解码/格式转换  -> 原生绘制播放 -> 音视频同步 )
基于FFmpeg进行RTMP推流(二)
在前面一节基于FFmpeg进行RTMP推流(一)我们写了最简单的一版推流代码。但细心调试过的兄弟会发现当我们把文件换成mp4后,发现上面的代码在写入文件头时报错。也就是说上一版的代码是有bug的。
用户2929716
2018/08/23
8.8K0
基于FFmpeg进行RTMP推流(二)
FFmpeg菜鸡互啄#第7篇#文件/rtsp推流到rtmp
关键步骤 avformat_open_input//打开输入文件/rtsp avformat_find_stream_info////获取音视频流信息 avformat_alloc_output_context2//创建输出上下文 avformat_new_stream//创建输出流 avcodec_copy_context//复制配置输出流 avio_open//打开io avformat_write_header//写入头信息 av_int
_gongluck
2018/03/08
3.3K0
【Android FFMPEG 开发】FFMPEG 初始化 ( 网络初始化 | 打开音视频 | 查找音视频流 )
FFMPEG 初始化流程 : FFMPEG 执行任何操作前 , 都需要初始化一些环境 , 及相关数据参数 ;
韩曙亮
2023/03/27
8170
FFmpeg4.0+SDL2.0笔记01:Making Screencaps
背景:在系统性学习FFmpeg时,发现官方推荐教程还是15年的,不少接口已经弃用,大版本也升了一级,所以在这里记录下FFmpeg4.0+SDL2.0的学习过程。
非一
2021/04/06
6870
ffmpeg直播项目
一个描述数字音视频传输和播放流程的简单步骤:录制 -> 编码 -> 网络传输 -> 解码 -> 播放
Gnep@97
2023/12/30
3380
ffmpeg直播项目
【Android FFMPEG 开发】FFMPEG 视频播放进度控制 ( 显示播放进度 | 拖动进度条播放 )
FFMPEG 播放进度控制 : 为 FFMPEG 播放视频添加拖动进度条功能 , 主要包含以下两个功能 ;
韩曙亮
2023/03/27
2.4K0
【Android FFMPEG 开发】FFMPEG 视频播放进度控制 ( 显示播放进度 | 拖动进度条播放 )
基于FFmpeg进行RTMP推流(一)简介
这里的bin、include、lib就是我们刚才在FFmpeg下载的相关文件。 src是我们的项目源码目录。 新建Win32控制台应用程序、选择位置、项目名称。注意:去掉“为结局方案创建目录”的勾选
用户2929716
2018/08/23
14.2K0
基于FFmpeg进行RTMP推流(一)简介
【FFmpeg】FFmpeg 播放器框架 ① ( “ 解封装 - 解码 - 播放 过程 “ 涉及到的函数和结构体 | AVFormatContext 结构体详解 )
在之前的 【音视频原理】音视频 “ 采样 - 编码 - 封装 过程 “ 和 “ 解封装 - 解码 - 播放 过程 “ 分析 ( 视频采集处理流程 | 音频采集处理流程 | 音视频文件解封装播放流程 ) 博客中 , 介绍了
韩曙亮
2024/09/25
4590
【FFmpeg】FFmpeg 播放器框架 ① ( “ 解封装 - 解码 - 播放 过程 “ 涉及到的函数和结构体 | AVFormatContext 结构体详解 )
【Android FFMPEG 开发】FFMPEG 读取音视频流中的数据到 AVPacket ( 初始化 AVPacket 数据 | 读取 AVPacket )
① FFMPEG 初始化 : 参考博客 【Android FFMPEG 开发】FFMPEG 初始化 ( 网络初始化 | 打开音视频 | 查找音视频流 )
韩曙亮
2023/03/27
5640
FFmpeg API 基础
FFmpeg 本身是 LGPL 的,但是 FFmpeg 可以引入其他第三方库,比如 libfdkaac 是 nonfree 的,就有可能存在专利收费的法律风险。
Cellinlab
2023/05/17
7690
FFmpeg API 基础
音视频八股文(11)-- ffmpeg avio 内存输入和内存输出。内存输出有完整代码,网上很少有的。
avio提供了一系列API,可以将数据从内存读取到缓冲区中,也可以将缓冲区中的数据写入到内存中。其实现依赖于IOContext结构体,该结构体定义了当前输入/输出事件的状态、数据、回调函数等信息,并支持通过自定义回调函数实现不同的输入/输出方式。
福大大架构师每日一题
2023/05/09
2.2K0
音视频八股文(11)-- ffmpeg avio 内存输入和内存输出。内存输出有完整代码,网上很少有的。
FFmpeg解封装实验!
大家好,我是txp,好久没有写技术原创文章了,久等了,记得之前写的播放器学习文章后面也没有继续更了;主要原因这段时间一个是由于工作的原因,二来主要是最近利用空闲时间看完了今年的第四本非技术书籍,目前又买了几本新的非技术书籍学习!在书上看到学到的知识,目前我都在总结输出!一些学习经验和工作当中的经验,我会慢慢录制视频出来,视频比文字更加生动(ps:因为之前录制的视频,不知道如何添加字幕,所以现在知道了,做就要认真做,就要把一件事情做好!)
用户6280468
2022/03/21
6940
FFmpeg解封装实验!
c/c++使用ffmepg库获取视频信息(宽高时长等)
备忘一个使用ffmepg获取视频的宽高时长等信息的代码,是使用ffmepg的api不是通过exe命令行的方式。至于用的ffmepg库和头文件等,我传github和CSDN各一份。地址在最后。
大菊观
2023/10/16
8220
【C++】FFmpeg:音视频库介绍与使用示例
FFmpeg是一款开源的音视频库,提供了处理音视频文件、转码、解码、编码、播放等功能。它是一个完整的跨平台解决方案,支持多种音视频格式,并提供多种API和工具来处理音视频数据。
DevFrank
2024/07/24
7440
【Android 音视频开发打怪升级:FFmpeg音视频编解码篇】六、FFmpeg简单合成MP4:视屏解封与重新封装
前面的文章中,对 FFmpg 视频的解码,以及如何利用 OpenGL 对视频进行编辑和渲染,做了详细的讲解,接来非常重要的,就是对编辑好的视频进行编码和保存。
开发的猫
2020/08/11
9820
【Android 音视频开发打怪升级:FFmpeg音视频编解码篇】六、FFmpeg简单合成MP4:视屏解封与重新封装
ffmpeg音视频合成
原理 : 主要是拿到视频文件得视频流,然后拿到音频文件的音频流,根据时间戳一帧一帧的封装成一个新的视频文件
曾大稳
2018/09/11
3.1K1
推荐阅读
【音视频连载-011】第二季 FFmpeg 一层一层获取文件信息
7760
ffmpeg实战实现音视频解封装!
1.1K0
FFmpeg获取音视频流信息
7340
【Android FFMPEG 开发】FFMPEG 直播功能完整流程 + 源码 ( 源码交叉编译 -> AS工程配置 -> 音视频打开/读取/解码/格式转换 -> 原生绘制播放 -> 音视频同步 )
2.5K0
基于FFmpeg进行RTMP推流(二)
8.8K0
FFmpeg菜鸡互啄#第7篇#文件/rtsp推流到rtmp
3.3K0
【Android FFMPEG 开发】FFMPEG 初始化 ( 网络初始化 | 打开音视频 | 查找音视频流 )
8170
FFmpeg4.0+SDL2.0笔记01:Making Screencaps
6870
ffmpeg直播项目
3380
【Android FFMPEG 开发】FFMPEG 视频播放进度控制 ( 显示播放进度 | 拖动进度条播放 )
2.4K0
基于FFmpeg进行RTMP推流(一)简介
14.2K0
【FFmpeg】FFmpeg 播放器框架 ① ( “ 解封装 - 解码 - 播放 过程 “ 涉及到的函数和结构体 | AVFormatContext 结构体详解 )
4590
【Android FFMPEG 开发】FFMPEG 读取音视频流中的数据到 AVPacket ( 初始化 AVPacket 数据 | 读取 AVPacket )
5640
FFmpeg API 基础
7690
音视频八股文(11)-- ffmpeg avio 内存输入和内存输出。内存输出有完整代码,网上很少有的。
2.2K0
FFmpeg解封装实验!
6940
c/c++使用ffmepg库获取视频信息(宽高时长等)
8220
【C++】FFmpeg:音视频库介绍与使用示例
7440
【Android 音视频开发打怪升级:FFmpeg音视频编解码篇】六、FFmpeg简单合成MP4:视屏解封与重新封装
9820
ffmpeg音视频合成
3.1K1
相关推荐
【音视频连载-011】第二季 FFmpeg 一层一层获取文件信息
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档