音视频入门

最近在熟悉iOS音视频相关的内容。音视频主要内容包括:编解码、封装与解封装、相关网络传输协议以及音视频同步。

大致关系如下图(从网上搜到的):

 

协议:

类似于http一样,音视频通讯有rtmp、hls等网络应用层协议,这些应用层协议规定了按照怎样的规则对数据进行传输。比如hls就规定将数据进行分段,然后首先拉取一个根index文件,之后根据这个索引文件拉取次级索引文件,最后根据这些索引文件拉取到数据。

封装:

我们平常看到的很多格式比如mp4、rmvb、avi这些其实都是封装格式,所谓的封装格式其实就是如何对音频压缩数据以及视频压缩数据进行组装。同时给出音频数据以及视频数据同步的一些信息。

编解码:

编解码的含义就是对数据进行压缩和解压缩,比如音频文件,原始采样得到的文件格式是pcm,一般来说初始的文件都很大,因此我们需要使用一些算法来对文件进行有损压缩(牺牲部分音质来降低传输量),因此就有了编码,音频文件的编码方式有:aac、mp3,视频文件的编码有:h264,这三个比较著名。

视频文件其实就是很多很多的图片组成的,那么压缩的方式分为帧(我们把视频文件中的某一张图片成为帧)内压缩以及帧间压缩,帧内压缩其实就是图片的压缩,有jpg、png等。帧间压缩,主要是利用相邻帧之间具有连贯性,一般不会有太多变化这样的一个理念来进行压缩。

解码就是反过来将压缩过后的文件重新恢复成原来的样子(由于是有损压缩,所以只能变成跟原来很像的样子)。

编解码还分为软编解码和硬编解码,说白了就是使用软件方式还是直接使用硬件来编解码。

音视频同步:

平常我们看视频,场景和声音都是需要对应起来的,这个其实就是音视频同步,通过解封装获得了音频数据以及视频数据,通过解码以后需要进行同步,然后再将音视频数据放到对应的出口进行播放。

以上就是一个完整的音视频播放过程。

 

主要内容

具体的协议什么的这里就不再继续介绍,我们需要将重心放到代码上来。

iOS音视频方面分两块,一个是苹果自带的AVFoundation框架。一个就是通用的框架FFmpeg,AVFoundation框架封装的挺好的,但是只支持苹果自家的hls协议,像rtmp等协议就不支持,hls用于点播(点播其实就是指我们平常观看视频网站的已经录好的内容)还可以,但是对于直播的支持就很不友好,比如延迟非常的高(当然这个主要是由于协议本身造成的,需要分段加载完成才能播放)。因此很多直播网站都是采用rtmp协议来实现直播的。

到这里FFmpeg就显示出了它在音视频开发中非常重要的地位,FFmpeg开源框架支持了很多音视频通信协议以及编解码方式和多种封装格式,另外iOS开源的播放器里面比较著名的ijkplayer就是对FFmpeg中的ffplay播放器进行的封装。因此之后的内容就是先学习FFmpeg框架的使用,然后再对AVFoundation框架的使用进行学习,最后学习一些相对重要的协议。我会将学习的一些心得同步到博客上以记录iOS音视频开发中的知识与技巧。

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值