手机比PC的优点除了便携外,她最重要特色就是能够快速方便的创做多媒体做品。照片分享,语音输入,视频录制,地理位置。一个成功的手机APP从产品形态上都有这其中的一项或多项,好比instagram,微信。若是把Web2.0的交互体验照搬到手机上就是死路一条。html
微视频能够说把手机的视频录制和碎片时间两个特色发挥到了极致,视频相关的APP如今无温不火的缘由我认为跟坑爹的运营商有关。虽然如今移动网络流量小速度慢,可是不妨碍咱们先把技术积累作起来。ios
纯粹的视频(不包括音频)实质上就是一组帧图片,通过视频编码成为视频(video)文件再把音频(audio)文件有些还有字幕文件组装在一块儿成为咱们看到的视频(movie)文件。1秒内出现的图片数就是帧率,图片间隔越小画面就越流畅,因此帧率越高效果就越好,须要的存储空间也就越多。浏览器
由于不进行编码的视频数据量很是大,会形成存储和传输上的困难,因此视频文件都须要在录制完成后进行编码。视频编码主要从两个维度压缩数据。一、单张图像某一区域相邻像素类似,好比一片红色只记录红色色值和区域,不用记录这个区域的每个像素点。二、相邻图像之间内容类似,由于相邻两帧要制造连续的效果,因此两帧之间的内容通常很是接近。目前主流的视频编码技术都是用图像编码方法对第一帧进行编码,而后用某种方式描述接下来的帧相对于附近的帧有什么区别。缓存
MP四、MOV、AVI、RMVB这些播放格式其实都是封装格式,除了RMVB比较特殊外,其余格式内封装的视频编码格式都是H264,H264以高压缩率闻名于世,压缩效率比MEPG-2提高一倍多,可是世上没有一箭双鵰的事,H264的解码难度提升了3倍多。服务器
视频文件的大小除以是视频的时长定义为码率。不少人搞不清楚码率和分辨率跟视频质量的关系,包括本人。码率能够理解为取样率,单位时间内取样率越大,精度就越高,同时体积也越大。当视频没有通过编码时,若是分辨率越高,那么视频图像的细节越清晰。但若是视频通过编码,被限制在必定码率内,编码器就必须舍弃掉一部分细节。因此分辨率和码率都同清晰度有关。微信
对H264的视频解码给CPU形成了很大负担,因此手机工程师把这部分工做交给了更善于进行处理简单工做可是数据量较大的GPU,GPU解码就是所谓的硬解码,CPU解码就是软解码。iOS提供的播放器类使用的是硬解码,因此视频播放对CPU不会有很大的压力,可是支持的播放格式比较单一,通常就是MP四、MOV、M4V这几个。网络
HTTP Live Streaming(缩写是 HLS)是一个由苹果公司提出的基于HTTP的流媒体网络传输协议。它的工做原理是把整个流分红一个个小的基于HTTP的文件来下载,每次只下载一些。当媒体流正在播放时,客户端能够选择从许多不一样的备用源中以不一样的速率下载一样的资源,容许流媒体会话适应不一样的数据速率。支持的视频流编码为H.264。咱们在视频网站上看到的M3U8后缀的播放连接就是使用HLS协议的视频。HLS优势,一、看完一段缓存一段,防止只看一段视频可是把整个视频文件都缓存下来的用户,减小服务器压力和节省流量。二、根据用户网速切换不一样的码率,兼顾流程性和清晰度。
HLS支持状况:iOS 3.0及以后的版本,Android 3.0及以后的版本,HTML5。ide
Android因为3.0以后才支持HLS,因此Android2.3只能用MP4,Android4.0、iOS、HTML5能够用m3u8,而不支持HTML5的浏览器只能用flash播放swf,而iOS又不支持flash。因为以上缘由,目前没法实现一个播放地址在全部的平台都通用。网站
iOS提供MPMoviePlayerController和AVPlayer类进行播放,关于播放开发的相关内容因为篇幅有限将在下一篇文章中展开。iOS视频流开发(2)—视频播放网络传输协议