热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Android视频播放技术

1.HTTP渐进下载流媒体播放2.RTSPRTP流媒体协议3.HTTPLiveStreaming协议4.常用的视频播放框架什么是流媒体技术?简单的说,就是边下载,边播放。也就是说,

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

《Android 视频播放技术》

什么是流媒体技术?

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

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

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

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

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

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

《Android 视频播放技术》

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

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

RTSP/RTP流媒体协议

什么是RTSP/RTP流媒体协议

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

《Android 视频播放技术》

其中,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流媒体系统由内容准备、内容分发和客户端软件三部分组成:

《Android 视频播放技术》

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

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

结论

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

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

《Android 视频播放技术》

常用Android视频播放技术:

  • android SDK: MediaPlayer + SurfaceView
  • android SDK: VideoView
  • Google开源库:Exoplayer
  • Vitamio
  • VLC
  • FFmpeg
  • 其它开源播放器,如ijkplayer

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


推荐阅读
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 深入解析Android自定义View面试题
    本文探讨了Android Launcher开发中自定义View的重要性,并通过一道经典的面试题,帮助开发者更好地理解自定义View的实现细节。文章不仅涵盖了基础知识,还提供了实际操作建议。 ... [详细]
  • 1.如何在运行状态查看源代码?查看函数的源代码,我们通常会使用IDE来完成。比如在PyCharm中,你可以Ctrl+鼠标点击进入函数的源代码。那如果没有IDE呢?当我们想使用一个函 ... [详细]
  • 本文介绍如何在 Android 中通过代码模拟用户的点击和滑动操作,包括参数说明、事件生成及处理逻辑。详细解析了视图(View)对象、坐标偏移量以及不同类型的滑动方式。 ... [详细]
  • 深入理解OAuth认证机制
    本文介绍了OAuth认证协议的核心概念及其工作原理。OAuth是一种开放标准,旨在为第三方应用提供安全的用户资源访问授权,同时确保用户的账户信息(如用户名和密码)不会暴露给第三方。 ... [详细]
  • Android 九宫格布局详解及实现:人人网应用示例
    本文深入探讨了人人网Android应用中独特的九宫格布局设计,解析其背后的GridView实现原理,并提供详细的代码示例。这种布局方式不仅美观大方,而且在现代Android应用中较为少见,值得开发者借鉴。 ... [详细]
  • 本文详细分析了JSP(JavaServer Pages)技术的主要优点和缺点,帮助开发者更好地理解其适用场景及潜在挑战。JSP作为一种服务器端技术,广泛应用于Web开发中。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • PHP 5.2.5 安装与配置指南
    本文详细介绍了 PHP 5.2.5 的安装和配置步骤,帮助开发者解决常见的环境配置问题,特别是上传图片时遇到的错误。通过本教程,您可以顺利搭建并优化 PHP 运行环境。 ... [详细]
  • 本文介绍了在使用Visual Studio 2015进行项目开发时,遇到类向导弹出“异常来自 HRESULT:0x8CE0000B”错误的解决方案。通过具体步骤和实践经验,帮助开发者快速排查并解决问题。 ... [详细]
  • 本文介绍了Java并发库中的阻塞队列(BlockingQueue)及其典型应用场景。通过具体实例,展示了如何利用LinkedBlockingQueue实现线程间高效、安全的数据传递,并结合线程池和原子类优化性能。 ... [详细]
  • 深入理解Cookie与Session会话管理
    本文详细介绍了如何通过HTTP响应和请求处理浏览器的Cookie信息,以及如何创建、设置和管理Cookie。同时探讨了会话跟踪技术中的Session机制,解释其原理及应用场景。 ... [详细]
  • 本文将介绍如何使用 Go 语言编写和运行一个简单的“Hello, World!”程序。内容涵盖开发环境配置、代码结构解析及执行步骤。 ... [详细]
  • 本文探讨了Hive中内部表和外部表的区别及其在HDFS上的路径映射,详细解释了两者的创建、加载及删除操作,并提供了查看表详细信息的方法。通过对比这两种表类型,帮助读者理解如何更好地管理和保护数据。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
author-avatar
落地有声800_491_431
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有