热门标签 | 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


推荐阅读
  • 高效解决应用崩溃问题!友盟新版错误分析工具全面升级
    友盟推出的最新版错误分析工具,专为移动开发者设计,提供强大的Crash收集与分析功能。该工具能够实时监控App运行状态,快速发现并修复错误,显著提升应用的稳定性和用户体验。 ... [详细]
  • 导航栏样式练习:项目实例解析
    本文详细介绍了如何创建一个具有动态效果的导航栏,包括HTML、CSS和JavaScript代码的实现,并附有详细的说明和效果图。 ... [详细]
  • 基于KVM的SRIOV直通配置及性能测试
    SRIOV介绍、VF直通配置,以及包转发率性能测试小慢哥的原创文章,欢迎转载目录?1.SRIOV介绍?2.环境说明?3.开启SRIOV?4.生成VF?5.VF ... [详细]
  • 深入解析 Apache Shiro 安全框架架构
    本文详细介绍了 Apache Shiro,一个强大且灵活的开源安全框架。Shiro 专注于简化身份验证、授权、会话管理和加密等复杂的安全操作,使开发者能够更轻松地保护应用程序。其核心目标是提供易于使用和理解的API,同时确保高度的安全性和灵活性。 ... [详细]
  • 采用IKE方式建立IPsec安全隧道
    一、【组网和实验环境】按如上的接口ip先作配置,再作ipsec的相关配置,配置文本见文章最后本文实验采用的交换机是H3C模拟器,下载地址如 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • Explore a common issue encountered when implementing an OAuth 1.0a API, specifically the inability to encode null objects and how to resolve it. ... [详细]
  • PHP 5.2.5 安装与配置指南
    本文详细介绍了 PHP 5.2.5 的安装和配置步骤,帮助开发者解决常见的环境配置问题,特别是上传图片时遇到的错误。通过本教程,您可以顺利搭建并优化 PHP 运行环境。 ... [详细]
  • 几何画板展示电场线与等势面的交互关系
    几何画板是一款功能强大的物理教学软件,具备丰富的绘图和度量工具。它不仅能够模拟物理实验过程,还能通过定量分析揭示物理现象背后的规律,尤其适用于难以在实际实验中展示的内容。本文将介绍如何使用几何画板演示电场线与等势面之间的关系。 ... [详细]
  • RecyclerView初步学习(一)
    RecyclerView初步学习(一)ReCyclerView提供了一种插件式的编程模式,除了提供ViewHolder缓存模式,还可以自定义动画,分割符,布局样式,相比于传统的ListVi ... [详细]
  • libsodium 1.0.15 发布:引入重大不兼容更新
    最新发布的 libsodium 1.0.15 版本带来了若干不兼容的变更,其中包括默认密码散列算法的更改和其他重要调整。 ... [详细]
  • 本文介绍了如何利用npm脚本和concurrently工具,实现本地开发环境中多个监听服务的同时启动,包括HTTP服务、自动刷新、Sass和ES6支持。 ... [详细]
  • 本题探讨如何通过最大流算法解决农场排水系统的设计问题。题目要求计算从水源点到汇合点的最大水流速率,使用经典的EK(Edmonds-Karp)和Dinic算法进行求解。 ... [详细]
  • 全面解析运维监控:白盒与黑盒监控及四大黄金指标
    本文深入探讨了白盒和黑盒监控的概念,以及它们在系统监控中的应用。通过详细分析基础监控和业务监控的不同采集方法,结合四个黄金指标的解读,帮助读者更好地理解和实施有效的监控策略。 ... [详细]
  • 精致小屏灰色风格苹果CMS v10模板,支持DIY主题管理系统
    探索一款专为影视站设计的苹果CMS v10模板,具备强大的主题管理系统和500多个设置项,无需二次开发即可轻松配置。下载地址:https://www.mytheme.cn/maccms/244.html,演示地址:http://demo.mytheme.cn/index.php?id=244。 ... [详细]
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社区 版权所有