FFmpeg --01-播放器框架介绍

FFmeg快速入门 FFmpeg简介 FFmpeg是什么? FFmpeg是用于录制、转换和流化音频和视频的完整解决方案, 包括 libavcodec ,一套领先的音/视频编解码类库。FFmpeg 在Linux上开发,当可以在大多数操作系统下编译,包括Windows。 Note FFmpeg对GCC的依赖很强,所以就算是在Windows上, 用VC编译FFmpeg也不是一件轻松的事情。请尽量使用 GCC来编译FFm 阅读详情

播放器框架

1媒体文件:
AVFormatContext
avformat_alloc_context avformat_open_input
2解复用器:
AVStream
av_read_frame —
3音频(视频)包队列:
AVPacket
4音频(视频)解码:
AVCodecContext
avcodec_send_packet avcodec_receive_frame
采样(音频)/图像帧队列:
AVFrame
音频(视频)处理:

术语

容器/文件:如mp4、flv、mkv
媒体流:视频流:avc(h264) 音频流:aac
aac:1024个采样点为一帧 mp3:1152个采用点为一帧
数据帧/数据包(Frame/Packet)

编解码器

H264编码器: 图像YUV数据----H264帧,反之解码器
AAC编码器: 声音PCM数据—AAC帧

FFmeg 结构

ffplay:
ffprovbe: libavformat libavcodec …
ffmpeg:

FFmeg库简介

AVUtil:核心工具库
AVFormat:文件格式和协议库
AVCodec:编解码库

FFmpeg 函数介绍

注册
avdevice_register_all()对设备进行注册
封装
avformat_alloc_context();负责申请一个AVFormatContext
结构的内存,并进行简单初始化
avformat_open_input();打开输入视频文件
avformat_find_stream_info():获取音视频文件信息
av_read_frame(); 读取音视频包 / avformat_seek_file(); 定位文件
avformat_close_input();关闭解复用器

解码

avcodec_alloc_context3(): 分配解码器上下文
avcodec_find_decoder():根据ID查找解码器 /
avcodec_find_decoder_by_name():根据解码器名字
avcodec_open2(): 打开编解码器
avcodec_send_packet(): 发送编码数据包
avcodec_receive_frame(): 接收解码后数据
avcodec_free_context():释放解码器上下文,包含了
avcodec_close():关闭解码器

查找解码器:
AVCodec_ff_h264_decoder = {
.name = “h264”; // 不同厂家,个人 命名不同
.id = “AV_CODEC_ID_H264”; //FFmpeg内部表示,ID相同
}

如果上下本数据保存在解码器里面,多路解码的时候数据会有冲突?
设计解码器,要做到可重入,AVCodecContex保存解码器数据

h264_decode_frame(AVcodecContext *avctx), 作为参数传入

FFmpg 3.x 组件注册方式

行av_register_all,把全局的解码器、编码器等结
构体注册到各自全局的对象链表里

FFmeg 数据结构简介

AVFormatContext: 封装格式上下文结构体(类似c++中的类),统领全局的结构体

AVInputFormat demuxer : 每种封装格式(FLV)对应的结构体

AVStream:视频文件中的每个视频(音频)流对应的结构体

AVCodecContext: 解编码器上下文结构体,保存了视频编码相关的信息

AVCodec:每种视频(音频)编码器(h264解码器)对应的一个结构体

AVPacket: 存储一帧压缩编码数据

AVFrame: 存储一帧解码后像素(采样(音频))数据

AVFormateContext 和 AVInputFormate 之间的关系?
avFormatContex API 调用 , AVInputFormate 主要是ffmpeg内部调用
数据:
struct AVInputFormate *iformate; // 封装格式结构体
方法:
int (*read_header)(struct AVFormateContext * ); //函数指针

AVFormateContex AVStream AVCodecContext 之间的关系?
AVFormatContext -->
avformat_find_stream_info() : AVStream[0]/n—>
avcodec_parameters_to_context() —AVCodecContext[0]

ffmeg将多段视频合成一个视频 使用 FFmpeg concat 分离器时,如果文件名有奇怪的字符,要在 filelist.txt中转义。如你所见,上面的命令合并了三种不同格式的文件,FFmpeg concat 过滤器会重新编码它们。注意在 bash 等 shell 中需要用引号,防止通配符扩展。此外ffmpeg拼接的视频和原视频的封装格式有关。这种方法不友好,有些情况下用不成功。ffmpeg视频拼接需要用。 阅读详情

相关推荐

基于FFmpeg和Qt的播放器 QtAV库

参与项目开发: https://github.com/wang-bin/QtAV 下载编译好的文件等:https://sourceforge.net/projects/qtav win下编译好的可执行文件及编译所需的文件在这:https://sourceforge.net/projects/qtav win下编译要用到的库如ffmpeg,portaudio可以在https://sourcef

ibingow的专栏 3万+

ffmeg环境搭建

搭建ffmeg环境描述部署资源安装包安装步骤1.yasm安装2.ffmpeg安装后续 描述 1.结合网上文档以及本地虚拟机环境配置一致的测试服务器进行环境搭建,在测试的时候,强烈建议环境适用的操作系统内核与本文档保持一致,因为ffmpeg会存在内核要求,可能会由于兼容性问题导致安装不成功 2.服务器操作系统以及内核为2.6.32-431.el6.x86_64 2013 x86_64 x86_64 x86_64 GNU/Linux,这是属于红帽的系统,系统一些必须的环境还是需要提前配置好,如JDK\MAVEN

笔痕墨影 1286

《FFmpeg Basics》中文版-01-FFmpeg基本介绍

正文 为了最优地使用各种FFmpeg组件,需要正确理解FFmpeg的基本属性和特性。如果你基础差了点,看了不知道说的啥,您可以继续下一章,并在遇到需要了解的内容的时候再回来看。 FFmpeg介绍 FFmpeg是根据GNU通用公共许可证获得许可的多媒体处理自由软件项目的名称。 该项目最受欢迎的部分是用于视频和音频编码/解码的ffmpeg命令行工具,其主要特点是速度快,输出质量高和文件大小比较小。 FFmpeg中的“FF”表示 媒体播放器上的表示“快进”的控制按钮,“mpeg”是Moving Pictur

qq_52703909的博客 3670

ffmeg一款功能极其强大的跨平台音视频处理工具

ffmpeg:核心命令行工具(转码、剪辑、格式转换)ffprobe:音视频信息分析工具ffplay:简单的音视频播放器的开源套件,支持几乎所有音视频格式(MP4/MP3/FLV/MKV/AVI 等)。FFmpeg 是音视频处理的核心工具,通过命令行实现转码、剪辑、格式转换等几乎所有需求。-i(输入)、-c(编码器)、-ss/-t(剪辑)、-vn/-an(分离音视频)是新手最常用的。优先用-c copy减少编码耗时,编码器优先选 h264(视频)、aac/mp3(音频)保证兼容性。

欢迎来到我的博客! 913

FFmpeg简易播放器的实现-最简版

本文首发地址:https://www.cnblogs.com/leisure_chn/p/10040202.html,转载请注明出处 基于FFmpeg和SDL实现的简易视频播放器,主要分为读取视频文件解码和调用SDL播放两大部分。 本实验仅实现最简单的视频播放流程,不考虑细节,不考虑音频。本实验主要参考如下两篇文章: [1]. 最简单的基于FFMPEG+SDL的视频播放器ver2(采用SDL2.0...

叶余的博客 689

音视频领域强大的辅助工具-ffmpeg常用操作介绍

ffmpeg -i [输入文件名/地址] [参数选项] -f [格式] [输出文件/地址]-i后为媒体流的输入,可以为文件,也可以是视频流地址[参数选项]定义流媒体转换的参数,详细定义了转换的方式-f 后为输出的媒体流格式,定义输出媒体流的输出格式之后直接为输出媒体流到文件或者到推送地址参数-i后为流媒体的输入,为H264裸流文件test.h264;参数选型为-vcodec copy 表示视频的编码格式为流媒体源的格式,即还是H264;-f mpegts表示输出的流媒体为ts;

技术控的笔记 21万+

ffmpeg播放器实现详解 - 框架搭建

ffmpeg播放器实现详解 - 框架搭建

m0_48578207的博客 2805

FFmpeg 开发(01):FFmpeg 编译和集成

尽管 FFmpeg 功能强大,但是由于其采用的是带有传染性的 LGPL/GPL 开源协议,所以一些大厂基本上都是自己独立开发类似的音视频处理库,甚至在接口和组织模块上模仿 FFmpeg 。

字节流动 1万+

C++ QT结合FFmpeg实战开发视频播放器-17FFmpeg基本介绍

作者:虚坏叔叔 博客:https://xuhss.com 早餐店不会开到晚上,想吃的人早就来了!😄 一、FFmpeg基本介绍 本节介绍ffmpeg基本情况以及项目中怎么使用它。 打开官网ffmpeg.org。 他是一个能够跨平台的多媒体框架,它 包括编码 解码 转码 播放等功能。 它支持的格式非常多,可以跨越多个操作系统,解码效率非常高,很多的播放器都是基于ffmpeg,它部分基于GPL协议,部分基于LGPL。GPL是开源社区非常流行的协议,包括Linux的版本也是这个,它要求你基于它开发的软件也必须是

编辑编辑器 3809

FFmpeg 开发(07):FFmpeg + OpenGLES 实现 3D 全景播放器

该文章首发于微信公众号:字节流动 FFmpeg 开发系列连载: FFmpeg 开发(01):FFmpeg 编译和集成 FFmpeg 开发(02):FFmpeg + ANativeWindow 实现视频解码播放 FFmpeg 开发(03):FFmpeg + OpenSLES 实现音频解码播放 FFmpeg 开发(04):FFmpeg + OpenGLES 实现音频可视化播放 FFmpeg 开发(05):FFmpeg + OpenGLES 实现视频解码播放和视频滤镜 FFmpeg 开发(06):FFmp..

字节流动 4万+

FFmpeg 开发(06):FFmpeg 播放器实现音视频同步的三种方式

该文章首发于微信公众号:字节流动 FFmpeg 开发系列连载: FFmpeg 开发(01):FFmpeg 编译和集成 FFmpeg 开发(02):FFmpeg + ANativeWindow 实现视频解码播放 FFmpeg 开发(03):FFmpeg + OpenSLES 实现音频解码播放 FFmpeg 开发(04):FFmpeg + OpenGLES 实现音频可视化播放 FFmpeg 开发(05):FFmpeg + OpenGLES 实现视频解码播放和视频滤镜 前文中,我们基于 FFmpeg 利用 ..

字节流动 1万+

基于 FFmpeg 的跨平台视频播放器简明教程(十):在 Android 运行 FFmpeg

在前九章的学习中,我们已经成功地实现了一个基础的播放器,它拥有视频播放、音画同步、快进/快退等基本功能。当然,这个简易的示例还有许多可以优化的地方,比如添加更美观的用户界面,或者增加字幕功能等。然而,这并不是本教程的主要关注点。本系列文章更关注于跨平台播放器框架的构建,特别是在移动端。因此,从本章开始,我们将把重点转向 Android 端播放器的开发。前置知识包括一些 Android 的基本开发,以及 JNI 开发等。这些前置知识默认你有所了解,本文不会涉及。关于 JNI 可以参考笔者之前写的。

记录学习的过程 2058

FFmpeg 开发(08):FFmpeg 播放器视频渲染优化

该文章首发于微信公众号:字节流动 FFmpeg 开发系列连载: FFmpeg 开发(01):FFmpeg 编译和集成 FFmpeg 开发(02):FFmpeg + ANativeWindow 实现视频解码播放 FFmpeg 开发(03):FFmpeg + OpenSLES 实现音频解码播放 FFmpeg 开发(04):FFmpeg + OpenGLES 实现音频可视化播放 FFmpeg 开发(05):FFmpeg + OpenGLES 实现视频解码播放和视频滤镜 FFmpeg 开发(06):FFmp..

字节流动 7004

如何用 FFmpeg 编写一个简单播放器详细步骤介绍(转载)

如何用 FFmpeg 编写一个简单播放器详细步骤介绍(转载) FFMPEG 是一个很好的库,可以用来创建视频应用或者生成特定的工具。FFMPEG几乎为你把所有的繁重工作都做了,比如解码、编码、复用和解复用。这使得多媒体应用程序变得容易编写。它是一个简单的,用 C 编写的,快速的并且能够解码几乎所有你能用到的格式,当然也包括编码多种格式。  唯一的问题是它的文档基本上是没有的。有一个单独的指导讲了它

qq_24735165的博客 1136

ffmeg实现视频编码格式转换(flv->mp4)

ffmeg实现视频编码格式转换(flv->mp4)

STM32驱动四位共阳极数码管实现高精度秒表计时器

本文详细介绍了如何使用STM32驱动四位共阳极数码管实现高精度秒表计时器。项目基于STM32F103C8T6最小系统板,通过定时器中断和GPIO控制,实现0.1秒精度的计时功能,并解析了共阳极数码管的动态扫描原理及按键消抖等关键技术。

n8m7b6v5c4的博客 951

(一). Android ffmpeg 播放器之编译ffmpeg-01

Android NDK ffmpeg

weixin_42547950的博客 4240

红外小目标检测新思路:当DETR遇上Mamba状态空间模型,速度提升3倍

本文探讨了将Mamba状态空间模型与DETR框架结合,用于解决红外小目标检测的难题。该创新方案通过线性复杂度的Mamba模块替代传统Transformer的自注意力机制,在保持高检测精度的同时,显著提升了推理速度,实现了实时性能的突破,为无人机巡检、安防监控等场景提供了高效解决方案。

hhh00的博客 666

FFmpeg —— 17.FFmpeg简易播放器的实现——视频播放

视频播放器基本原理 解协议 将流媒体协议的数据,解析为标准的相应的封装格式数据。视音频在网络上传播的时候,常常采用各种流媒体协议,例如 HTTP,RTMP,或是 MMS 等等。这些协议在传输视音频数据的同时,也会传输一些信令数据。这些信令数据包括对播放的控制(播放,暂停,停止),或者对网络状态的描述等。解协议的过程中会去除掉信令数据而只保留视音频数据。例如,采用 RTMP 协议传输的数据,...

天空的博客 1万+

基于 YOLO26 的车辆实时检测与计数系统

本文提出了一种基于YOLO26的车辆实时检测与计数系统。系统采用CSPDarknet53作为主干网络,结合特征金字塔和多尺度预测实现高精度车辆检测。通过DeepSORT算法进行目标跟踪,并统计车辆数量、行驶方向和交通流量。实验表明,该系统在保持实时性能的同时,检测精度达到92.3%,可有效应用于智能交通管理。系统采用Python实现,支持GPU加速,适用于多种交通场景下的车辆监测需求。

一键难忘的博客 909

2026年职业院校技能大赛中职移动应用与开发模块二10套题库开发培训视频(全套)

2026年职业院校技能大赛中职移动应用与开发模块二10套题库开发培训视频(全套)

我是网络安全兼技能大赛工程师,专注网络安全技术学习与技能大赛实战!持续分享最新的技术文章,帮你少走弯路,一起在技术赛道上进步~ 354
上一篇: FFmpeg --03-内存模型:AVPacket数据拷贝过程
下一篇: FFmpeg --07-视频格式FLV
八月的雨季997
博客等级 码龄8年 932粉丝 172原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

八月的雨季997

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值