FFMPEG视音频编解码学习(一)

ADAS系统架构与核心功能解析:从感知到执行的智能驾驶方案 高级驾驶员辅助系统(ADAS)是现代汽车智能化的核心技术,其本质是通过传感器融合、算法决策与车辆控制,构建一个“感知-决策-执行”的闭环系统。在技术原理上,ADAS依赖摄像头、毫米波雷达、激光雷达等多源传感器进行环境感知,并通过深度学习模型与融合算法(如卡尔曼滤波)构建精准的环境模型。其技术价值在于提供主动安全冗余与驾驶舒适性,核心应用场景包括自动紧急制动(AEB)、自适应巡航(ACC)及车道保持辅助(LKA)等。随着传感器成本下降与域控制器算力提升,ADAS正从高端配置向主流车型快速普及,并逐步向高阶导航 阅读详情

目录

前言

项目的一部分暂时告一段落了!主要真正需要测试需要网络视频流,如果没有输入,图像处理就没有意义!在有了差强人意的效果之后,是时候转到视频流的解码上了!对于网络流、视音频又是一块新的未知区域,这时候选择FFMEPG还是vlc来做解码呢?看到网上对雷神的ffmepg教程非常推崇,为了降低门槛,还是选择FFMEPG!人们离去的时候,如果remeber me,分享!感谢!学习!

背景知识

使用FFMEPG做内核播放器:Mplayer、ffplay、暴风影音、KMPlayer、QQ影音
使用FFMEPG作为内核的Directshow Filter:ffdshow、lav filter(博主不知道是什么)
使用FFMEPG作为内核的转码工具:格式工厂

FFmpeg官方说明

FFmpeg是一个领先的多媒体框架,能够编码,解码,转码,多路复用,解复用,流,滤波,同时播放任何机器和人创造的美好的事物。它支持非常多的视频格式包括那些很老的格式。不管它们是被一些标准委员会、社区或者公司设计的。它也是高度可移植的:FFmpeg 在各种构建环境下,机器体系架构下和配置下编译,可以在Linux, Mac OS X,Microsoft Windows, BSDS, Solaris等基础机构下运行。
FFmpeg包含可供应用程序使用的libavcodec,libavutil,libavformat,libavdevice,libwscale和libswresample。和ffmpeg,ffplay和ffprobe一样,用户可以使用ffmpeg来进行转码和播放。

FFmpeg库 for developers

  • libavutil
    libavutil是一个包含简化编程的函数库,包含随机数生成器,数据结构,数学例程,核心多媒体实用程序等等。
  • libavcodec
    libavcodec是一个包含音频/视频编解码器的解码器和编码器。
  • libavformat
    libavformat是一个包含多媒体容器格式的多路解复用器和多路复用器库。其实就是封装格式,比如ts,mp4。
  • libavdevice是一个包含输入和输出设备的库,用于抓取和渲染许多场景的多媒体输入/输出软件框架,包括Video4Linux,Video4Linux2,VfW和ALSA。
  • libavfilter
    libavfilter是一个媒体滤波的库
  • libswscale
    libswscale是一个执行高度优化的图像缩放(视频)和色彩空间/像素格式转换操作的库。
  • libswresample
    libswresample是执行高度优化的音频重采样,视频不存在这个概念,重新矩阵转换和样本格式转换操作的库。

大约每3个月,FFmpeg项目推出一个新的主分支release版本。在主分支release版本主要是对重大bug的修复,但是没有添加新的特性。注意:这些版本面向分销商和系统集成商。强烈建议希望从源代码自行编译的用户考虑使用开发者分支,这是唯一FFmpeg开发者活跃工作的版本。这个版本会选择从开发者分支,将会收到更多更快的错误修复,如附加功能和安全补丁。

ffmpeg是用于转码的应用程序(推流);ffplay是用于播放的应用程序;ffprobe是用于查看文件格式的应用程序(分析流)。
0

为什么需要ffmpeg

手动获取rtsp视频流保存到本地

  1. 实现rtsp客户端,接收音视频包
  2. 解视频包(rtp->h264)
  3. 解音频包(rtp->PCM(alaw))
  4. 音频转码(PCM->AAC)
  5. 重新封装音视频包

视音频编解码技术学习

不同的电影有不同的格式,用不同的后缀表示:avi、rmvb、mp4、flv、mkv等等,这些格式代表的是封装格式。封装格式就是把视频数据和音频数据打包成一个文件的规范。仅仅靠看文件的后缀,很难看出具体使用的是什么视音频编码标准。总的来说,不同的封装格式之间差距不大,各有优劣。

注:有些封装格式支持视音频编码标准十分广泛,算比较优秀的封装格式,比如MKV;而有些封装格式支持的视音频编码标准很少,应该属于落后的封装格式,比如RMVB。

按照博主的理解,封装格式和视频编码关系不大,但是封装格式决定了其能够支持的视频编码格式。

视频播放器原理

视音频技术主要包含以下几点:封装技术、视频压缩编码技术以及音频压缩编码技术。如果考虑到网络传输的话,还包括流媒体协议技术。
视频播放器原理:视频播放器播放一个互联网上的视频文件,需要经过以下几个步骤:解协议,解封装,解码视音频,视音频同步。如果播放本地文件则不需要解协议,只需要解封装、解码视音频,视音频同步。
1
解协议的作用:将流媒体协议的数据,解析为标准的相应封装格式数据。视音频在网络上传输的时候,常常采用各种流媒体协议,如HTTP、RTMP、MMS等。这些协议在传输视音频数据的同时,也会传输一些信令数据。这些信令数据包括对播放的控制,或者对网络状态的描述等。解协议的过程中会去掉信令数据而只保留视音频数据。例如,采用RTMP协议传输的数据,经过解协议操作后,输出FLV格式的数据。
解封装的作用:将输入的封装格式数据,分离成为音频流压缩编码数据和视频流压缩编码数据。封装格式种类很多,例如MP4、MKV、RMVB、TS、FLV、AVI等,它的作用就是将已经压缩编码的视频数据和音数据按照一定的格式放到一起。例如,FLV格式的数据,经过解封装操作后,输出H264编码的视频码流和AAC编码的音频码流。
解码的作用,就是将视频/音频压缩编码数据,解码成为非压缩的视频/音频原始数据。**音频的压缩编码标准包含AAC,MP3,AC-3等,视频的压缩编码标准包含H264,H265,MPEG2,VC-1等。解码是整个系统中最重要最复杂的一个环节。通过解码,压缩编码的视频数据输出成为非压缩的颜色数据,例如YUV420P,RGB等;压缩编码的音频数据输出成为非压缩的音频抽样数据,例如PCM数据。
视音频同步的作用:就是根据解封装模块处理过程中获取到的参数信息,同步解码出来的视频和音频数据,并将视频音频数据送至系统的显卡和声卡播放出来。

流媒体协议

流媒体协议是服务器和客户端之间通信遵循的规定。当前网络上主要的流媒体协议如表所示。

名称推出机构传输层协议客户端目前使用领域
RTSP+RTPIETFTCP+UDPVLC,WMPIPTV
RTMPAdobe Inc.TCPFlash互联网直播
RTMFPAdobe Inc.UDPFlash互联网直播
MMSMicrosoft Inc.TCP/UDPWMP互联网直播+点播
HTTPWWW+IETFTCPFlash互联网直播

RTSP+RTP经常用于IPTV领域。因为其采用UDP传输视音频,支持组播,效率较高。但其缺点是网络不好的情况下可能会丢包,影响视频观看质量。

博主的理解是UDP在网络传输不稳定的过程中,容易产生丢包!

因为互联网网络环境的不稳定性,RTSP和RTP较少用于互联网视音频传输。互联网视频服务通常采用TCP作为其流媒体的传输层协议,因为像RTMP,MMS,HTTP这类的协议广泛应用于互联网视音频服务中。这类协议不会发生丢包,因而保证了视频的质量,但是传输的效率会相对低一些。

此外RTMFP是一种比较新的流媒体协议,特点是支持P2P。

封装格式

封装格式的主要作用是把视频码流和音频码流安装一定的格式存储到一个文件中。现如今流行的封装格式如下:

名称推出机构流媒体支持的视频编码支持的音频编码目前使用领域
AVIMicrosoft Inc.不支持几乎所有格式几乎所有格式BT下载影视
MP4MPEG支持MPEG-2,MPEG-4,H.264,H.263等AAC,MPEG-1 layers I, II, III, AC-3互联网视频网站
TSMPEG支持MPEG-1,MPEG-2,MPEG-4,H.264MPEG-1 Layers I, II, III, AACIPTV,数字电视
FLVAdobe Inc.支持Sorenson, VP6, H.264MP3, ADPCM, Linear PCM, AAC等互联网视频网站
MKVCoreCodec Inc.支持几乎所有格式几乎所有格式互联网视频网站
RMVBReal Networks Inc.支持RealVideo 8, 9, 10AAC, Cook Codec, RealAudio LosslessBT下载影视

视频编码

视频编码的主要作用是将视频像素数据压缩成为视频码流,从而降低视频的数据量。如果视频不经过压缩编码的话,体积通常是非常大的。视频编码是视音频中最重要的技术之一。视频码流的数据量占了视音频总数据量的绝大部分。高效率的视频编码在同等的码率下,可以获得更高的视频质量。
注:视频编码技术在整个视音频中应该是最复杂的技术。

名称推出机构推出时间
HEVC(H.265)MPEG/ITU-T2013
H.264MPEG/ITU-T2003
MPEG4MPEG2001
MPEG5MPEG1994
VP9Google2013
VP8Google2008
VC-1Microsoft Inc.2006

目前,H.265已经用的很广了,感觉!海思也已经实现了硬编码H.264和H.265。博主感觉也要扎进这个大坑里面游一游了!
H.264仅仅只是一个编码标准,而不是一个具体的编码器,基于H.264标准的编码器有很多。实际中使用最多的是x264,性能强悍,而且开源。
H.265的性能比H.264的性能更加强悍,HEVC将会取代H.264的原因

音频编码

音频编码的主要作用是将音频采样数据(PCM等)压缩成为音频码流,从而降低音频的数据量。音频编码也是互联网视音频中一个重要的技术。但是一般情况在音频的数据量要远小于视频的数据量,因为即使使用稍微落后的音频编码标准,而导致音频数据量有所增加,也不会对视音频的总数据量产生太大的影响。高效率的音频编码在同等的码率下,可以获得更高的音质。

名称推出机构推出时间
AACMPEG1997
AC-3Dolby Inc.1992
MP3MPEG1993
WMAMicrosoft Inc.1999

现有网络视音频平台对比

现有的网络视音频服务主要包括两种方式:点播和直播。点播就是根据用户的需要播放相应的视频节目,这是互联网视音频服务最主要的方式。绝大部分视频网站都提供了点播服务。直播即互联网视音频平台直接将视频内容实时发送给用户(网红的诞生)。直播在网络电视台,社交视频网站较为常见。

直播平台

直播服务普遍采用RTMP作为流媒体协议,FLV作为封装格式,H.264作为视频编码格式,AAC作为音频编码格式。采用RTMP作为直播协议的好处在于其被Flash播放器支持(好像Flash播放器要改,不太懂诶)。而Flash播放器如今已经安装在全球99%的电脑上,并且与浏览器结合的很好。因此这种流媒体直播平台可以实现“无插件直播”,极大的简化了客户端的操作。封装格式,视频编码,音频编码方面,无一例外的使用了FLV + H.264 + AAC的组合。FLV是RTMP使用的封装格式,H.264是当今实际应用中编码效率最高的视频编码标准,AAC则是当今实际应用中编码效率最高的音频编码标准。视频播放器方面,都使用了Flash播放器。

点播平台

点播服务普遍采用了HTTP作为流媒体协议,H.264作为视频编码格式,AAC作为音频编码格式。采用HTTP作为点播协议有以下两点优势:一方面,HTTP是基于TCP协议的应用层协议,媒体传输过程中不会出现丢包等现象(TCP好像要经过三次握手,是可靠传输,看来需要补补计算机网络的知识了),从而保证了视频的质量;另一方面,HTTP被绝大部分的Web服务器支持,因而流媒体服务机构不必投资购买额外的流媒体服务器,从而节约了开支。点播服务采用的封装格式有多种:MP4,FLV,F4V等,它们之间的区别不是很大。视频编码标准和音频编码标准是H.264和AAC。这两种标准分别是当今实际应用中编码效率最高的视频标准和音频标准。视频播放器方面,无一例外的都使用了Flash播放器。

博主记:所有的内容都来自雷神,或许有些已经过时,但是依然引领这像我这样的小白!感觉来说对于我真的很幸运,能够在资源丰富的时代找到许多的教程,更快的了解一个领域!也会更加努力早点写出一些有贡献的好文章!在路上!加油!感谢雷神!

总结

高效率的视频编码在同等的码率下,可以获得更高的视频质量。高效率的音频编码在同等的码率下,可以获得更高的音质。虽然不太理解内部原理,但所谓编码,就是压缩,压缩就会损失数据量,损失数据量就会导致视音频质量变差,也就是说视音频编码就是挑出视频数据中更为有代表性的数据,然后传输,解码,获得更高质量的视音频。

参考链接

About FFmpeg
[总结]视音频编解码技术零基础学习方法
ffmpeg 跟我学 视频教程

C-Lodop打印服务系统存在任意文件读取 阅读详情

相关推荐

ROS入门(一)——ROS安装(vmware16+ubuntu20.04+ROS-Noetic)

嵌套:ROS可以在Ubuntu上运行,Ubuntu在虚拟机Vmware中安装。 从 虚拟机vmware安装→ubuntu安装→ros安装,逐步介绍安装ROS环境的过程。整个过程是我一步步跟着各种博客安装实现的,亲测可行。 版本: Vmware :Vmware Workstation16 Ubuntu :20.04 ROS :Noetic 其中vmware直接载当前最新版本就好,而ubuntu的版本要注意一下。 在ROS官网(cn - ROS Wiki),我们进入到ROS安装的步骤界面,可以看..

Netceor的博客 9741

海思音频开发

《音视频应用开发系列文章目录》 海思音频文档 原始音频信号以模拟信号的形式给出后,通过 Audio Codec,按一定采样率和采样精度转换为数字信号。 Audio Codec 以 I2S 时序或 PCM 时序的方式,将数字信号传输给 AI设备。芯片利用 DMA 将 AI 设备中的音频数据搬移到内存中,完成录音操作。播放和录音是基于同样的原理。芯片利用 DMA 将内存中的数据传输到 AO 设备。...

楷尘·极客 1900

python入门:Anaconda和Jupyter notebook的安装与使用

一、安装和使用Anaconda 1、anaconda是什么? Anaconda在英文中是“巨蟒”的意思,与python的意思相近,它是python的包管理器和环境管理器。 2、为什么需要安装anaconda? 原因有以下几点: 附带一大批常用的数据科学包,方便立即开始处理数据 管理包 anaconda是在conda(一个包管理器和环境管理器)上发展来的;而conda可以很方便地对第三方的包进行安装、卸载和更新。 管理环境 conda可以为不同的项目建立不同的运行环境,避免不同的项目或包版本

PY洋洋 1万+

海思多媒体(MPP)开发(7)——音频模块(AUDIO)

(一)前言: AUDIO 模块包括音频输入、音频输出、音频编码、音频解码四个子模块。音频输入和输出模块通过对 Hi35xx 芯片音频接口的控制实现音频输入输出功能。 音频编码和解码模块提供对 G711、G726、ADPCM 格式的音频编解码功能,并支持录制和播放 LPCM 格式的原始音频文件。 (二)音频接口: nvp6134: nvp6134支持4路声音和1路麦克风输入,其实也就是将模......

Biao 8450

Code Composer Studio 8.3.1安装与常见问题解决指南

本文提供了Code Composer Studio 8.3.1版本的详细安装指南与常见问题解决方案。内容涵盖从下载离线安装包、系统环境准备、自定义安装步骤,到首次启动配置及汉化建议。重点解析了安装过程中可能遇到的闪退、卡顿、Java虚拟机错误等典型问题的排查与修复方法,旨在帮助开发者高效部署这一稳定的嵌入式集成开发环境。

weixin_29195217的博客 332

Calibre电子书阅读器个性化样式定制指南

本文详细介绍了如何通过Calibre电子书阅读器的用户样式表功能进行深度个性化样式定制。从修改全局字体、行距、背景配色(包括深色/浅色模式)到美化代码块、引用等特殊元素,本指南提供了完整的CSS代码示例与实战技巧,帮助用户打造专属的舒适阅读环境,显著提升电子书阅读体验。

vv45678的博客 920

FFMPEG解码海思音频数据

解码流程: 1、  读取海思g726音频数据,海思g726音频会多4个字节的海思头信息。 2、选择ffmpeg g726编码器进行解码。ffmpeg g726解码器包括:AV_CODEC_ID_ADPCM_G726、AV_CODEC_ID_ADPCM_G726LE。如果海思g726码流类型为asf时,请选择AV_CODEC_ID_ADPCM_G726解码器类型;如果海思g726码流类型为RFC35...

Car_eye的博客 3132

在 SAP ECC 中定义 ledger 时遇到 “Define exactly one leading ledger“(消息号 FAGL_LEDGER_CUST012)的错误

摘要:SAP系统要求必须且只能定义一个主导分类账(Leading Ledger)。当出现错误消息FAGL_LEDGER_CUST012时,需通过事务码FINSC_LEDGER或SPRO路径检查分类账配置,确保仅有一个分类账被标记为"LeadingLedger",其余设为"Non-leadingLedger"。主导分类账是SAP默认用于标准报表的核心分类账,修改配置需谨慎以免影响已有数据。若问题未解决,建议检查未完成配置或查阅SAP Notes获取解决方案。

金牌架构师 802

ffmpeg解密海思音频

使用海思语音编解码库进行 G711、G726、ADPCM 格式的编码,编码后的码流遵循以下表格中描述的帧结构,即在每帧码流数据的净荷数据之前填充有 4 个字节的帧头;使用语音编解码库进行以上格式的解码时,需要读取相应的帧头信息。                     这4个字节的帧头内容即为如下数组中的值:             static char aryHeard[4] = {0...

huabiaochen的博客 1302

第十二章 供水管网水力模型软件介绍

本文介绍了国内外主要供水管网建模软件及其特点,重点分析了某高建模软件V14的创新功能。国际主流软件包括开源的EPANET、商业软件InfoWorksWS、WaterGEMS和MIKEURBAN,各具特色但存在应用局限。某高V14软件实现了管网GIS与模型一体化管理,采用一G多网、一网多模、一模多案、网模合一技术路线,支持全信息模型建立和动态数据更新。其创新点包括水量分配理念革新(精确/模糊匹配、三种用水模式)和首创Web服务功能。通过并发计算、GPU加速等技术优化性能,具有较高性价比。

weixin_45258875的博客 208

LVGL(lv_canvas)

这篇文章介绍了LVGL图形库中的lv_canvas组件,主要内容包括: lv_canvas是一个绘图缓冲区对象,提供丰富的绘图API,可以理解为LVGL的"离屏画布"。 基本使用流程:创建缓冲区->创建canvas对象->设置缓存和尺寸->进行绘图操作。 详细列举了常用的绘图函数,如绘制线条、矩形、文字、图片等。 提供了示例代码展示如何创建画布并绘制一条红色线段。 介绍了canvas的典型应用场景,如动态波形绘制、自定义控件底图等。 对比了canvas与普通img的区别

m0_49476241的博客 1030

海思Hi3516A/D的mpp编码完整流程

系统初始化(SYS INT):1、配置VB视频缓冲池; 2、初始化VB 3、配置系统(字节对齐) 4、初始化系统配置视频捕获(VI+ISP):5、配置MIPI 6、初始化ISP 7、运行ISP线程 8、配置开启VI 设备捕获 9、配置开启VI 通道捕获配置视频处理子系统(VPSS):10、创建VPSS的group 11、获取,配置group属性 12、启动group 13、绑定V

C20130911 7888

上位机 寻边器 通讯实战

寻边器通讯接口实现 本文介绍了上位机与盖泽(Gazer)和JEL品牌寻边器的通讯接口实现方案。主要内容包括: 接口定义:创建了IAlignerOperation接口,定义了获取状态、控制运动、真空吸附等核心功能。 具体实现: 盖泽寻边器(GazerAlignerCjh):通过串口通讯,实现了回零、校准、移动位置等操作 JEL寻边器(JelAligner):同样基于串口通讯,包含错误处理、状态查询等功能 工厂模式:通过AlignerFactory工厂类根据设备品牌创建对应的实现对象。 设备加载:展示了如何在系

StevenChen的博客 378

[总结]FFMPEG视音频编解码零基础学习方法

[总结]FFMPEG视音频编解码零基础学习方法 置顶2013年11月16日 00:04:05雷霄骅阅读数:569933标签:ffmpeg编解码学习更多 个人分类:FFMPEG 所属专栏:FFmpeg 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.youkuaiyun.com/leixiaohua1020/article/details/1...

WeiWeiWqq的博客 187

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

FFMPEG视音频编解码零基础学习方法

http://blog.youkuaiyun.com/leixiaohua1020/article/details/15811977

forward 1356

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

[置顶] [总结]FFMPEG视音频编解码零基础学习方法

转载自:http://blog.youkuaiyun.com/leixiaohua1020/article/details/15811977/ 目录(?)[-] ffmpeg程序的使用ffmpegexeffplayexeffprobeexe 1 ffmpegexe2 ffplayexe3 ffprobeexe ffmpeg库的使用视频播放器 1 ffmpeg库的配

kinghzking的专栏 813

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

转载:FFMPEG视音频编解码零基础学习方法

[总结]FFMPEG视音频编解码零基础学习方法 转载于:https://my.oschina.net/u/3484671/blog/2988822...

chonghuan5167的博客 145

FFMPEG视音频编解码学习总结

本文为雷神博客学习总结记录,主要针对FFmpeg视频编码部分学习

布想学习 892

[总结]FFMPEG视音频编解码零基础学习方法(转)

[总结]FFMPEG视音频编解码零基础学习方法 转载于:https://www.cnblogs.com/chen-jt/p/3890747.html

weixin_30379911的博客 98
上一篇: C++输入和输出流(二)——文件输入输出
下一篇: (一) Ubuntu下Qt引入FFmpeg
simonXi-tech
博客等级 码龄10年 398粉丝 52原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值