目录

  • 目录
  • 前言
  • 背景知识
  • FFmpeg官方说明
    • FFmpeg库 for developers
  • 为什么需要ffmpeg
    • 手动获取rtsp视频流保存到本地
  • 视音频编解码技术学习
    • 视频播放器原理
    • 流媒体协议
    • 封装格式
    • 视频编码
    • 音频编码
    • 现有网络视音频平台对比
      • 直播平台
      • 点播平台
  • 总结
  • 参考链接

前言

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

为什么需要ffmpeg

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

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

视音频编解码技术学习

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

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

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

视频播放器原理

视音频技术主要包含以下几点:封装技术、视频压缩编码技术以及音频压缩编码技术。如果考虑到网络传输的话,还包括流媒体协议技术。
视频播放器原理:视频播放器播放一个互联网上的视频文件,需要经过以下几个步骤:解协议,解封装,解码视音频,视音频同步。如果播放本地文件则不需要解协议,只需要解封装、解码视音频,视音频同步。

解协议的作用:将流媒体协议的数据,解析为标准的相应封装格式数据。视音频在网络上传输的时候,常常采用各种流媒体协议,如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+RTP IETF TCP+UDP VLC,WMP IPTV
RTMP Adobe Inc. TCP Flash 互联网直播
RTMFP Adobe Inc. UDP Flash 互联网直播
MMS Microsoft Inc. TCP/UDP WMP 互联网直播+点播
HTTP WWW+IETF TCP Flash 互联网直播

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

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

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

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

封装格式

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

名称 推出机构 流媒体 支持的视频编码 支持的音频编码 目前使用领域
AVI Microsoft Inc. 不支持 几乎所有格式 几乎所有格式 BT下载影视
MP4 MPEG 支持 MPEG-2,MPEG-4,H.264,H.263等 AAC,MPEG-1 layers I, II, III, AC-3 互联网视频网站
TS MPEG 支持 MPEG-1,MPEG-2,MPEG-4,H.264 MPEG-1 Layers I, II, III, AAC IPTV,数字电视
FLV Adobe Inc. 支持 Sorenson, VP6, H.264 MP3, ADPCM, Linear PCM, AAC等 互联网视频网站
MKV CoreCodec Inc. 支持 几乎所有格式 几乎所有格式 互联网视频网站
RMVB Real Networks Inc. 支持 RealVideo 8, 9, 10 AAC, Cook Codec, RealAudio Lossless BT下载影视

视频编码

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

名称 推出机构 推出时间
HEVC(H.265) MPEG/ITU-T 2013
H.264 MPEG/ITU-T 2003
MPEG4 MPEG 2001
MPEG5 MPEG 1994
VP9 Google 2013
VP8 Google 2008
VC-1 Microsoft Inc. 2006

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

音频编码

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

名称 推出机构 推出时间
AAC MPEG 1997
AC-3 Dolby Inc. 1992
MP3 MPEG 1993
WMA Microsoft 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 跟我学 视频教程

FFMPEG视音频编解码学习(一)相关推荐

  1. FFMPEG视音频编解码学习(1)

    ###开篇 看过了FFMPEG视音频编解码的基础知识,接着还有许多比如制作一个基于FFMPEG的视频播放器等,但是好像比较抽象,而且在公司的mac上很多软件也没有(重点是看的一头雾水), 还是老老实实 ...

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

    总结]FFMPEG视音频编解码零基础学习方法 在CSDN上的这一段日子,接触到了很多同行业的人,尤其是使用FFMPEG进行视音频编解码的人,有的已经是有多年经验的"大神",有的是刚 ...

  3. 音视频开发(5)---FFMPEG视音频编解码零基础学习方法

    FFMPEG视音频编解码零基础学习方法 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/leixiaohua1020/article/details/ ...

  4. FFMPEG视音频编解码

    转自:http://blog.csdn.net/leixiaohua1020/article/details/15811977 [总结]FFMPEG视音频编解码零基础学习方法 标签: ffmpeg编解 ...

  5. 视音频编解码学习工程:JPEG分析器

    ===================================================== 视音频编解码学习工程系列文章列表: 视音频编解码学习工程:H.264分析器 视音频编解码学习 ...

  6. 视音频编解码学习工程:TS封装格式分析器

    ===================================================== 视音频编解码学习工程系列文章列表: 视音频编解码学习工程:H.264分析器 视音频编解码学习 ...

  7. 视音频编解码学习工程:FLV封装格式分析器

    ===================================================== 视音频编解码学习工程系列文章列表: 视音频编解码学习工程:H.264分析器 视音频编解码学习 ...

  8. 视音频编解码学习工程:H.264分析器

    ===================================================== 视音频编解码学习工程系列文章列表: 视音频编解码学习工程:H.264分析器 视音频编解码学习 ...

  9. 视音频编解码学习工程 H 264分析器

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! ==== ...

最新文章

  1. JavaScript 原型继承
  2. 不为人知的AI简史:“人机共生 ”梦想家 , 却意外促成互联网的出现
  3. 消息队列MQ/JMS/Kafka,你都了解多少?
  4. Xcode 新项目删除 storyboard 文件
  5. js中字符串编码函数escape()、encodeURI()、encodeURIComponent()区别详解
  6. TCC分布式实现原理及分布式应用如何保证高可用
  7. 仿淘宝Banner:左右滑动ViewPager+最后一张滑动查看详情
  8. ElasticSearch进阶(五)MetricBeat的简单使用
  9. Vue视频教程 向军Vue基础教程 共86课
  10. java门基础学习(五)
  11. 计算机专业提升计划范文,民航个人提升计划范文个人职业规划方案.doc
  12. 使用Fiddler抓公众号数据
  13. 最新三维立体画·换个角度看世界
  14. 某音漂亮小姐姐视频合集一键下载,想看就看!
  15. GIS开发入坑(一)--GeoServer发布DEM地形图
  16. Kafka触发Rebalance的场景分析
  17. 我的世界虚拟人生可以在服务器玩吗,我的世界虚拟人生全方位攻略 虚拟人生玩法介绍...
  18. 拉伯证券|A股延续强势格局 北向资金开年以来净买入超1500亿元
  19. lintcdoe: Number of Airplanes in the Sky
  20. 如何查看MySQL数据库的版本

热门文章

  1. KingSCADA系统实施标准手册(热网项目适用)
  2. 好多人,微软编程马拉松大赛欲创吉尼斯世界纪录
  3. [jdk]jdk7,jdk8,jdk14 linux版本,windows版本下载
  4. 组件化攻略 - 代码物理隔离
  5. zzulioj:1093: 验证哥德巴赫猜想(函数专题)
  6. JAVA面试汇总第四章 Spring及数据库相关
  7. js选择文件进行导入(FileSaver.js)
  8. Dubbo面试八股文—1
  9. mybatis尚硅谷跟学笔记
  10. 计算机课的万能导入,浅谈小学信息技术课的导入技巧