当前位置: 首页 > 编程日记 > 正文

FFmpeg 与媒体文件关系

1. 容器/文件(Container/File):即特定格式的多媒体文件,比如MP4,flv,mov等。

2. 媒体流(Stream):表示在时间轴上的一段连续的数据,比如一段声音数据、一段视频数据或者一段字母数据,可以是压缩的,也可以是非压缩的,压缩的数据需要关联特定的编解码器。

3. 数据帧/数据包(Frame/Packet):通常一个媒体流是由大量的数据帧组成的,对于压缩数据,帧对应着编解码器的最小处理单元,分属于不同媒体流的数据帧交错存储与容器之中。

4. 编解码器:编解码器是以帧为单位实现压缩数据和原始数据之间的相互转换的。

前面介绍的术语,就是FFmpeg中抽象出来的概念。其中:

1. AVFormatContext:就是对容器或者媒体文件层次的抽象。

2. AVStream:在文件中(容器里面)包含了多路流(音频流、视频流、字幕流),AVStream 就是对流的抽象。

3. AVCodecContext 与 AVCodec:在每一路流中都会描述这路流的编码格式,对编解码器格式以及编解码器的抽象就是AVCodecContext 与 AVCodec。

4. AVPacket 与 AVFrame:对于编码器或者解码器的输入输出部分,也就是压缩数据以及原始数据的抽象就是AVPacket与AVFrame。

5. AVFilter:除了编解码之外,对音视频的处理肯定是针对于原始数据的处理,也就是针对AVFrame的处理,使用的就是AVFilter。

FFmpeg视频解码过程

通常来说,FFmpeg的视频解码过程有以下几个步骤:

  1. 注册所支持的所有的文件(容器)格式及其对应的CODEC av_register_all()
  2. 打开文件 avformat_open_input()
  3. 从文件中提取流信息 avformat_find_stream_info()
  4. 在多个数据流中找到视频流 video stream(类型为MEDIA_TYPE_VIDEO
  5. 查找video stream 相对应的解码器 avcodec_find_decoder
  6. 打开解码器 avcodec_open2()
  7. 为解码帧分配内存 av_frame_alloc()
  8. 从流中读取读取数据到Packet中 av_read_frame()
  9. 对video 帧进行解码,调用 avcodec_decode_video2()

转载于:https://www.cnblogs.com/longyh/p/9410647.html

相关文章:

一些可能没用过的调试窗口

首先说明:如果没有进入调试模式的话,默认的调试窗口如下: 开始前的准备: 新建控制台程序DebugWindowDemo: 修改Program.cs 的代码为: using System; using System.Threading; using System.Threading.Tasks…

linux 系统崩溃完全没有操作空间的系统修复

linux 系统崩溃完全没有操作空间的系统修复 1、通过U盘系统启动 2、修复文件系统 https://editor.csdn.net/md/?articleId106213788 此时硬盘会被挂在到U盘系统下作为一个目录, 例如/dev/sda2 修复它: fsck -y /dev/sda2很多时候都有效 3、修复grub

搜索进程内存地址_Linux编程 6 (查看进程 ps 及输出风格)

一.查看进程命令ps1.1 默认ps 命令在默认情况下,ps命令只会显示运行在当前控制台下,属于当前用户的进程,在上图中,我们只运行了bash shell以及ps命令本身。 上图中显示了程序的进程ID(1538,1583),它们运行在…

关于最大子段和线性算法的证明

重复题目: 输入一个整形数组,数组里有正数也有负数。数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。求所有子数组的和的最大值。要求时间复杂度为O(n)。 此题最初载于 http://blog.csdn.net/v_JULY_v/article/details/6444021 我在文…

SQL Server使用侦听器IP访问时遇到The target principal name is incorrect. Cannot generate SSPI context...

SQL Server使用侦听器IP访问时遇到"The target principal name is incorrect. Cannot generate SSPI context" 原文:SQL Server使用侦听器IP访问时遇到"The target principal name is incorrect. Cannot generate SSPI context"在测试SQL Server 2016 Alwa…

linux+Qt 下利用D-Bus进行进程间高效通信的三种方式

linuxQt 下利用D-Bus进行进程间高效通信的三种方式 原文链接: https://www.cnblogs.com/wwang/archive/2010/10/27/1862552.html D-Bus概述 什么是D-Bus? D-Bus是一种进程间通信的机制,它被设计成为一种低开销、低延迟的IPC,并被多种桌面环…

xbmc-12.0稳定版代码初探 (2) —— XBMC_HOME

XBMC工程在debug时要设置XBMC_HOME的环境 用于指定ffmpeg的Dll文件位置,语言等等 xbmc/filesystem/SpecialProtocol.cpp 定义了一些如: CSpecialProtocol::SetXBMCPath();的函数 xbmc\Application.cpp InitDirectoriesWin32(); -> CUtil::GetHomePat…

python是最好的语言 永远二十岁_Python是世界上最好的语言吗?

编程语言的选择是IT圈子永远的争议。在任意一个程序员聚集的场合,喊一句类似于“PHP是世界上最好的语言”这样的话,肯定会惹来不少人和你争论得面红耳赤。那么,python是世界上最好的语言吗?这个我不敢说,但是至少他应该…

(转)Android笔记--handler机制

一、重要参考资料 【参考资料】目前来看,下面的几个网址中的内容质量比较不错,基本不需要再读别的网址了。1、android消息机制一http://xtfncel.javaeye.com/blog/6635172、Android消息机制二http://xtfncel.javaeye.com/blog/6635183、Android线程间通信…

自制操作系统Antz(9)——实现内核 (下) 实现图形化界面

Antz系统更新地址: https://www.cnblogs.com/LexMoon/category/1262287.html Linux内核源码分析地址:https://www.cnblogs.com/LexMoon/category/1267413.html Github项目地址:https://github.com/CasterWx/AntzOS 在前几天的任务中&#xff…

python迷宫万花筒代码_利用广度优先遍历搜索迷宫的python源代码

广度优先遍历简称为DFS,是数据结构中比较常用的一个算法,主要原理是采用队列先进先出的规则,一层一层的访问图的节点。而迷宫问题接近与遍历,但是不同于遍历,主要考虑是采用栈的形式标记路径,并对当前节点和…

联想拯救者Y9000-ubuntu-nvidia-驱动安装

概述 由于联想拯救者Y9000的硬件都比较新,所以在安装ubuntu 的时候会有很多驱动的问题,本文主要讲解安装nvidia驱动的问题,如网卡、触摸板无效的其他问题请在我的其他文章中查找 友情提示 安装完系统之后先插网线装ssh服务, 确…

修改远程桌面端口

修改远程桌面端口需要两个步骤:  1、打开注册表 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\Wds\rdpwd\Tds\tcp],修改右边PortNamber的值,其默认值是3389,修改成所希望的端口即可,例如3…

开发管理 CheckLists(4) -风险管理

本文章主要介绍在项目启动前怎么样分步骤的去识别风险,才去什么方式去识别风险. 有需要做风险识别的朋友可以按照下面的步骤简单的走上一遍,或者可以提高项目的成功率 注意:本文章只是你做风险识别的chekcLists ,上面提到的一些分析方法都只是简单的介绍…

python的深拷贝与浅拷贝

对于list, set, dict来说, 直接赋值. 其实是把内存地址交给变量. 并不是复制⼀份内容. 两个变量的内容其实为一个地址,如果要在复制的同时分配新的地址则需要用到深拷贝和浅拷贝的命令 lst1 ["何炅", "杜海涛","周渝⺠", ["麻花藤", …

safari post 请求接收不到_我是谁?我在哪?我要到哪去?——HTTP请求头

各位小白帽们好又到了新一期的知识点咯在正片开始之前再次提醒一下各位因为联盟管理的需要本周五(12月4日)5点半将会对各位在平台的答题分数进行统计筛选部分排名靠前的童鞋作为核心的正式会员考核压力来了大家是不是有点紧张呢只要积极学习知识积极参与答题向本AI卖萌要flag相…

SharePoint 2013 配置开发环境,需安装VS2012插件

SharePoint 2013已经安装好了,接下来就是配置开发环境,安装VS2012,但是,装好了以后,发现没有SharePoint 2013开发的支持,如下图: 然后,去网上查找资料,VS2012对SharePoin…

联想拯救者Y9000-ubuntu-U盘启动失败解决方法

注意事项 1、U盘要是USB3.0的U盘,否则基本会失败 安装到最后的时候报一个 cd/dvd 设备 low speed的故障 2、bios 设置 硬盘模式 选择 AHCImode 模式, 否则刷机不成功 3、 U盘镜像的烧录方式, 实测windows 下的rufus工具有效

RedHat Enterprise 5.1下OpenLDAP的配置及PAMNSS的配置

服务器端 192.1.0.160 客户机端 192.1.0.221 一、在服务器端配置LDAP服务: 1.下载 openldap-2.4.11.tar.gz和db-4.7.25.tar.gz 2.安装BerkeleyDB #rpm -qa|grep db # tar xvf db-4.7.25.tar.gz # cd db_4.7.25# cd build_unix/# ../dist/configure -prefix/usr/loca…

pwn with glibc heap(堆利用手册)

前言 ​ 对一些有趣的堆相关的漏洞的利用做一个记录,如有差错,请见谅。 ​ 文中未做说明 均是指 glibc 2.23 ​ 相关引用已在文中进行了标注,如有遗漏,请提醒。 简单源码分析 ​ 本节只是简单跟读了一下 malloc 和 free 的源码&am…

COCO KeyPoints关键点数据集准备

COCO KeyPoints关键点数据集准备 概述 网上搜了一圈,coco关键点数据集准备的内容比较少,这里写一篇完成的标注流程到数据集准备的文章,以备后忘 标注工具 coco官方标注工具: coco–annotator https://github.com/jsbroks/coco-annotator …

Boost 1.53.0 发布,可移植的C++标准库

Boost 1.53.0 发布了,包含了 5 个新的库,修复了一些安全漏洞以及 Boost.Locale 组件的 bug 。 新增的 5 个库包括: Boost.AtomicBoost.CoroutineBoost.MultiprecisionBoost.Numeric.OdeintBoost.Lockfree完整改进记录说明请看 changelog 下载…

华为云客户端_从技术角度解读华为云手机之于普通用户的可行性

9月1日,华为云宣布,华为首创全球首个ARM芯片的“云手机”正式公测。此消息一出,普通消费市场一片赞美之声,想必大家更多的想法是终于让华为找到了一个应对当前手机困局的解决方案了。据悉,华为云鲲鹏手机早在今年3月就…

c#获取应用程序目录

string str1 Process.GetCurrentProcess().MainModule.FileName;//可获得当前执行的exe的文件名。 string str2Environment.CurrentDirectory;//获取和设置当前目录(即该进程从中启动的目录)的完全限定路径。//备注 按照定义,如果该进程在本…

【BZOJ5311/CF321E】贞鱼/Ciel and Gondolas(动态规划,凸优化,决策单调性)

【BZOJ5311/CF321E】贞鱼/Ciel and Gondolas(动态规划,凸优化,决策单调性) 题面 BZOJCF洛谷 辣鸡BZOJ卡常数!!!!!! 辣鸡BZOJ卡常数!!&…

python定时任务contrib_django+celery配置(定时任务+循环任务)

下面介绍一下djangocelery的配置做定时任务1.首先介绍一下环境和版本python2.7django 1.8.1celery 3.1.23django-celery 3.1.172.celery的安装sudo pip install celery3.1.23sudo pip install django-celery3.1.173.新建一个项目(1)django-admin startproject django_celery…

CenterNet KeyPoints 关键点训练自己的数据

概述 网上搜了一圈,关于CenterNet 训练关键点数据的资料非常少,而且讲得都很模糊,没法解决实际问题,也未说明细节和要素。在踏坑许久之后,才跑通CenterNet的关键点训练,于是记录一下踏坑历程,以…

Java学习笔记---字符类型

一、字符类型也算是整数类型的一种 字符类型在内存中占有2个字节,可以用来保存英文字母等字符。计算机处理字符类型时,是把这些字符当成不同的整数来看待,因此,严格说来,字符类型也算是整数类型的一种(小写…

我的家庭私有云计划-16

嗯,上午测试S2S的稳定性,改掉几个bug。还挺忙的。这会儿让机器跑测试去,腾出点时间,我们接着聊。 呵呵,昨天哪,已经有朋友批评我了,说我有点贪大求全,这个论坛什么的没必要自己实现&…

“cyl projection cannot cross pole” 解决方法

解决方法: 1、尝试更新NumPy以及相关模块: 在CMD里面执行 conda update –all 遇到提示选择yes/y 更新完毕后看是否可以载入。 发现并不能成功更新,于是采取了下面方法: 2、如果方法一不能解决,那么尝试卸载相关库&…