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

目录

前言

项目的一部分暂时告一段落了!主要真正需要测试需要网络视频流,如果没有输入,图像处理就没有意义!在有了差强人意的效果之后,是时候转到视频流的解码上了!对于网络流、视音频又是一块新的未知区域,这时候选择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 跟我学 视频教程

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值