登录控制台
首页 文档中心 播放器SDK 移动端播放器

移动端播放器

作者:蔚可云 时间:2020-12-07
为移动端(包含iOS、Android)提供播放媒体流或媒体文件的功能支持,覆盖主流音视频格式,分为完整版(full)和精简版(live)。 精简版支持 RTMP 头部的直播流、HTTP/HTTPS 协议头部请求的 FLV/HLS/MP4 视频流或点播视频文件,库体积较小。
完整版覆盖精简版所有功能之外,还支持更多点播格式,包括WMV/AVI/TS等。

一、术语和缩写

移动端播放器

二、框架

移动端播放器 我们提供的移动端播放器 SDK 压缩包里主要包含两大部分,一部分是核心的 SDK 层代码,作为黑盒代码部分是不可见的,另一部分是 Demo 层代码,作为白盒是可参考的。我们在 Demo 层展示了 SDK 层内部各个功能的调用逻辑,客户只需要在外层封装一层 UI 界面,并根据自身需要进行功能的设置,即可快速拥有一个高质量的播放器。

三、产品功能说明

1.解码方式
移动端播放器双平台均支持硬件解码和软件解码,可由 App 厂商自定义需要选择何种解码方式。一般当手机硬件不支持硬解时,会自动切换到软解。 硬解具备更好的解码效率,但兼容性不够优良,软解具备更好的兼容性,但同时也会更耗费性能。
软件解码
移动端播放器 硬件解码
移动端播放器 2.直播功能
延时追赶
在直播观看中,由于网络环境的干扰,可能会出现延时越来越大的情况。为保证直播观看体验的实时性,播放器提供了延时追赶的策略。当延时达到设定值时,将旧的数据进行丢弃拉取当前最新数据,以达到追赶的效果。
延时追赶可设置的时间阈值:自然数,单位为 ms 。需要注意的是:直播的延时追赶值必须大于缓冲阈值,否则会造成频繁缓冲,建议相差 1000 ms 以上。
低延时模式(iOS)
目前仅 iOS 端提供此功能,建议 App 厂商在设计时不要与延时追赶的功能同时使用,择一即可。在一定的区间范围内(例如 50 - 100 ms),当延时时间小于该区间时,播放器采取稍快播的策略,当大于该区间时,采取稍慢播的策略,可有效降低延时。其中区间范围和播放速度等均可由 App 厂商自定义,具体可参见代码说明。
首屏秒开
此功能主要通过减少预准备阶段的数据分析,降低请求数据到首屏显示的时间,来达到首屏秒开的效果。
时移回看
此功能需在 CDN 方面已开启支持时移回看。播放过程中以当前时间点的直播内容为节点,回溯观看之前一段时间内的视频内容。
自定义 SEI 扩展字段
需配套客户端推流器使用,当推流带上 json 格式的 SEI 字段时,播放器解析到会自动展示,可用于直播答题等场景。支持 H264 编码的流,软硬编均支持。
3.点播功能
倍速播放
支持点播文件倍速播放,iOS 倍速区间为 [0.5,2.0],Android 倍速区间为 (0,32],App 可根据需要设定想支持的倍速速度。开启倍速功能后,音视频均进行倍速播放。需要注意的是,因倍速和录制/录屏功能均比较耗费手机性能,尽管我们已经做了一定的优化,但开启倍速后仍建议 App 厂商屏蔽掉录制/录屏功能,以保持更好的观看体验。
解密播放
支持 MP4 和 HLS 格式加密文件的解密播放。
需要注意的是,该功能必须配合 Cloudv 平台使用。通过 Cloudv 平台对文件进行加密,再提供该视频的唯一标识和加密的播放地址进行解密播放。
因业务的差异性,解密版本作为单独的解密播放器 SDK 另行提供。
HLS 码率自适应
在介绍 HLS 码率自适应之前先介绍一下 HLS 默认播放码率,当一个 HLS 文件包含多个码率的 m3u8 时,在默认播放码率处填入对应的码率数值即在每次播放该文件时优先播放该设定码率下的文件。如填写不规范的码率数值则默认会去播排序第一的 m3u8 文件。
HLS 码率自适应功能开启时,会结合当前的网络状况以及缓存数据块的大小,来判断是否需要切换其它码率的文件。例如当网络状况不好时,本应切换去播放更低码率的视频,但若此时缓存数据还较多,则不会进行切换,因为后续网络状况可能会变好。若网络持续较差,才会执行切换的行为,但这个行为依然是 App 可控的,比如不切换只是向最终用户抛出吐司提示。
视频拖拉
点播文件支持前后拖拉,如 seek 的目标位置在播放器缓存内,则不会重新加载,直接播放已缓存的视频,反之需重新加载。
可以通过以下方式调整播放进度和位置。当前提供两种 seek 方式:
普通 seek:在指定 seek 点向前寻找关键帧,从关键帧开始播放。seek 位置和起播位置会有误差,误差最大在一个 gop
精准 seek:拖动到哪即从哪开播,但是 seek 后的等待过程可能略耗时,没有普通 seek 反应快
需要注意的是,目前 ts 文件还未实现精准 seek,其他点播文件格式均支持。并且建议在精准 seek 的同时开启点播缓存功能,效果会更好。
本地缓存
自1.6.4版本以后支持当点播文件已经播放观看之后,用户如再进行二次观看,可以从本地磁盘取该文件的缓存内容,不仅可以节省流量,还可以有更流畅的观看体验。
支持格式:MP4、FLV
缓存内容可限制要缓存的数据大小或要缓存的视频个数
缓存内容已满时可自动去除旧的填进新的,清除的条件可由 App 自行定义。
Dash多码率播放
自1.7.1版本开始,支持Dash多码率视频播放和主动切换,封装类型为
移动端播放器 循环播放
可通过相关接口控制循环播放,若开启点播缓存功能,则此时仅使用本地缓存数据,不再通过网络请求获取。
4.通用功能
手势控制
可通过手势控制部分功能增减,可设置类型包括:
(1)控制音量大小
(2)控制屏幕亮度
(3)划屏拖拉进度条
(4)双击切换画面比例
通常采用左音量右亮度,或左亮度右音量设计。
缓冲等待
在网络状况较差等情况下,如果数据一接收就马上播放会造成频繁卡顿,如接收到很多再播放会造成卡顿时间长,为了平衡这两种极端情况,播放器可对缓冲阈值部分进行设置,这其中就包含缓存上限和缓冲等待时间。
(1)缓存上限:可设置大小,存放在内存中用于提前加载未播放内容的区域,数据会一直缓冲直到达到上限值时停止,需要注意的是,并非越长的上限越好,较长的缓存上限可能会对带宽进行一定的浪费。目前仅 iOS 开放了设置接口
(2)缓冲等待时间:也称为缓冲阈值,可设置时间长短,等待接收到所设置的时间后再继续播放
可以说在关系上,缓存上限的数据量包含缓冲等待时间的数据量,但 SDK 并没有在二者的大小关系上做关联限制,建议 App 自行定义。
纯音频流播放
支持播放纯音频的流文件。此种情况下,建议 App 考虑截图或录制、录屏等功能是否有必要屏蔽。
后台播放
在移动端使用 App 进行音视频播放时不可避免的会有切入后台的情况,这时用户可感知的仅有流文件中的音频信息,播放器提供两种后台播放模式
(1)后台播放不解码(软解):仅适用于软解条件。开启后切入后台时不对视频进行解密,可减少不必要的性能浪费,但因视频缓存的缘故,切前台后会看到视频快速跳转至当前音频播放时间点的过程
(2)后台播放:与上述模式相反的,无论软硬解,后台均进行音视频解码,当切回前台时,可立刻看到当前帧的播放画面
水印
仅支持图片水印,如需支持文字水印,建议 App 将文字转化为图片再进行水印的添加。水印位置可根据坐标值自定义。
视频录制/录屏
视频录制支持两种模式:
(1)录制模式侧重还原视频源本身
(2)录屏模式侧重还原实际观看到的场景,比如播放过程中的卡顿也会体现在录制结果中
以上两种模式对应支持格式、时间长度等如下:
(1)支持 MP4/FLV/GIF 格式
(2)录制时间
MP4/FLV 格式:SDK 提供录制短视频时间范围 [3s,60s]
GIF 格式:SDK 提供录制 GIF 时间范围 [100ms,30s]
(3)录制结束
回放观看录制时支持视频进度拖拉
GIF 常作为 UGC 中的动态表情发出,提供分辨率压缩功能以解决高分辨率的 GIF 常会导致文件过大播放时长过长等问题
音视频原始数据获取
支持视频录制意味着可以在播放解码过程中提取到音视频原始内容,因此SDK也提供接口从外部提取PCM格式音频和YUV格式视频。
目前仅支持软解。
截图
截图格式为 JPG 。iOS 截图内容为全屏,Android 截图内容为应用内全屏,即不包含手机电量等状态栏信息。
代理
对于需要使用代理服务器的客户,SDK 可提供 IP、端口、用户名及密码的设置,来连接代理。目前代理协议支持 SOCKS4/SOCKS5/HTTP/HTTPS 四种。
多实例
在1.6.3及之前版本中,对于单一APP实例只支持维护单例播放器。
自1.6.4及之后版本,支持多实例播放器,但实际可支持播放器数量同设备性能、码流参数、解码方式紧密关联。
部分功能在多实例场景下受限:录制(仅支持录制其中一路)
5.Demo层功能参考
亮度调节
Demo 在播放界面的左半边手势进行上下滑动可调节观看界面亮度,App 如有需要可直接参考 Demo 层代码设计。
声音调节
Demo 在播放界面的右半边手势进行上下滑动可调节观看的媒体音量,App 如有需要可直接参考 Demo 层代码设计。
画面比例调节
目前 SDK 支持的画面比例有
(1)视频适应播放 view 的大小,可能导致会变形
(2)视频保持原比例,充满播放 view,部分画面不可见
(3)视频保持原比例,能够显示全部画面,竖直方向或者水平方向有黑边
(4)16:9
(5)4:3
Demo 在横屏模式下,双击播放界面,画面比例会依次调节,Demo 展示了不同比例下的样式,App 如有需要可参考 Demo 选择其中一种模式即可。
自动重连
当网络环境波动变化,例如 WiFi/4G 数据切换或数据流量断连等情况下,播放器可能会发生数据流拉取失败的情况,SDK 此时会返回 error,Demo 在此种情况下会请求重试,App 可根据自身需要确定请求多少次后给出提示。
6.关联功能
分辨率重建
该功能用于将低分辨率视频恢复成更高分辨率,以优化观众体验。

四、注意事项

移动端播放器 SDK 基于 ID 和 AuthKey 进行鉴权,不具备相应 SDK 权限的客户无法使用该服务。若使用我司多款 SDK,需要分别进行鉴权。鉴权操作在每个自然日内只需成功联网校验一次,之后将在本地执行校验,减少对网络的依赖性。
本页目录