Android 视频播放技术

1.HTTP渐进下载流媒体播放
2.RTSP/RTP流媒体协议
3.HTTP Live Streaming协议
4.常用的视频播放框架

什么是流媒体技术?

简单的说,就是边下载,边播放
也就是说,客户端在播放前,无需下载整个媒体文件,而是在播放缓存区已下载的媒体数据同时,持续不断的接收媒体流的剩余部分。

更专业一点的定义是:
流媒体技术的主要特点是以“流(Streaming)”的形式在基于IP协议的互联网中进行多媒体数据的实时、连续传播。

常用的流媒体协议有哪些?

流媒体协议有很多,常见的例如:

 MMS
 RTSP (RTP, SDP), RTMP
 HTTP progressive streaming
 HLS - HTTP live streaming (M3U8)

本文会介绍下面三种常见的流媒体协议,主要是比较三种协议的优缺点和适用范围:

HTTP渐进下载流媒体播放(HTTP progressive streaming)

什么是HTTP progressive streaming
  • 基于HTTP的渐进下载,是在下载完成后再播放的模式基础上做了一些小的改进。
  • 客户端在开始播放前仅需等待一段较短的时间用于下载和缓冲该媒体文件最前面一部分的数据,之后便可以一边下载一边播放。开始播放前的缓冲通常需要几十秒甚至上百秒的时间。
  • 只有满足特定封装条件的媒体文件格式才支持渐进下载播放,例如编码参数必须放在文件的起始部位,音视频文件完全按照时间顺序交织等。
HTTP progressive streaming的缺点
  • 仅能支持点播,不能支持直播。
  • 媒体流数据到达客户端的速率无法精确控制。
  • 客户端需维持一个与服务器上媒体文件同样大小的缓冲存储空间。
  • 在开始播放之前需要等待一段较长的缓冲时间从而导致实时性较差。
  • 播放过程中,由于网络带宽的波动,可能导致画面卡顿。
  • 不支持全时间范围的搜索、快进、快退等操作。
这些缺点的来源是什么?
  • 渐进下载采用标准HTTP协议传递数据,而HTTP基于TCP之上。
  • TCP最初是为非实时性数据传输而设计的,它通过重传丢失的分组来达到可靠传输的目的。
  • 对于流媒体数据,TCP无法保证所有重传的数据能在它们预定的播放时间之前到达客户端,这种情况下,客户端不能跳过这些数据,必须停下来等待,导致播放器画面卡顿。

RTSP/RTP流媒体协议

什么是RTSP/RTP流媒体协议

RTSP/RTP是目前最流行、使用最广泛的实时流媒体协议,它实际上由一组标准化协议构成:

其中,RTSP是Real Time Streaming Protocol(实时流媒体协议),RTP是Real Time Transport Protocol(实时传输协议)
RTSP/RTP流媒体协议栈需要专门的流媒体服务器参与。
媒体数据以匹配音视频码率的速率主动、智能地发送。
在数据递送过程中,服务器和客户端紧密联系,并能对客户端的反馈信息作出响应。

RTSP/RTP的优点
  • RTP是真正的实时传输协议,客户端仅需维持一个很小的解码缓冲区用于缓存视频解码所需的少量参考帧数据,从而大大减少播放时延,通常可控制在1秒内。
  • 使用UDP承载RTP数据包,可提高媒体数据的实时性和吞吐量。当丢包时,服务器可以根据媒体编码特性智能选择性重传,故意丢弃不重要的数据包。
  • 客户端不必等待未按时到达的数据,继续向前播放,保证媒体播放的流程性。

HTTP Live Streaming协议

什么是HTTP Live Streaming

最初是苹果公司针对其移动设备开发的流媒体协议。
让内容提供者通过普通Web服务器向客户端提供接近实时的音视频流媒体服务,包括直播和点播。
支持将同一节目编码为不同码率的多个替换流,客户端可以根据带宽变化在替换流之间智能切换。

一个典型的HTTP Live Streaming流媒体系统由内容准备、内容分发和客户端软件三部分组成:

HTTP Live Streaming解决的问题
  • 放弃专门的流媒体服务器,使用标准的Web服务器递送媒体数据,相比RTSP/RTP降低部署难度。
  • 使用HTTP协议,相比RTSP/RTP降低开发难度。
  • 将大媒体数据分隔为众多小文件来传输,并采用一个不断更新的轻量级索引文件来控制分隔后的小媒体文件的下载和播放,使得流间切换,运维和数据加密变得更方便。

但是,HTTP Live Streaming的最大缺点在于它并非一个真正的实时流媒体系统,在服务器和客户端都存在一定的起始延迟,对于更高码率特别是高清视频的支持程度尚需进一步的探究和验证。

结论

HTTP渐进下载系统部署起来最为简单,但仅适用于较小规模的短视频点播应用;
基于RTSP/RTP的协议栈适合于大规模可扩展的交互式实时流媒体应用,但需要专门流媒体服务 器的支持,安装和维护起来都较为复杂;

HTTP Live Streaming可直接部署于目前拥有广泛运营基础的Web服务器网络环境,不需要对网络基础设施进行升级改造,特别适合对实时性要求不是太高的消费级移动互联网流媒体应用。

常用Android视频播放技术:

FFmpeg

谈到视频播放,就绕不开FFmpeg。它是一个功能非常强大的音视频录制和编解码库。大部分Android开源视频播放技术,例如上面提到的Vitamio,VLC,ijkplayer,底层都是以FFmpeg作为编解码引擎。

但是,FFmpeg以C来开发,在Android中使用jni调用,还涉及到专业的视频编解码技术,开发和集成难度非常高,需要专业团队来做。做Android应用开发的,一般不太可能直接在项目中使用它。

VLC多媒体播放器

VLC多媒体播放器是VideoLAN计划的多媒体播放器,它融合了FFmpeg计划的解码器与libdvdcss程序库使其有播放多媒体文件及加密DVD影碟的功能。

在Android上有一个开源的播放器vlc for android,它基于VLC开发,具备所有播放控制特性,是很好的参考资料。

使用VLC比直接使用FFmpeg要简单得多,但相比Android原生sdk,它要处理的事情还是非常多,集成比较费时间。

Vitamio

Vitamio是中国团队开发的,基于FFmpeg的视频播放框架,支持的音视频格式和流媒体协议非常全面。它的api基本和Android原生sdk一样,集成难度最小。

但是,Vitamio分成标准版和至尊版,标准版免费限个人开发者使用,部分多媒体播放功能只有付费版才能使用。这在公司开发中是一个比重很大的影响因素。

参考链接

Android 多媒体视频播放一 (多媒体理解与经验分享)
FFmpeg vs Vitamio – Stack Overflow
Exoplayer vs Vitamio – Stack Overflow

关注微信公众号获取更多相关资源

Android小先生

猜你喜欢

转载自blog.csdn.net/guofudong2/article/details/81299118