CDN加速

移动端播放器说明书

更新时间:2021-07-23 10:59:59

1. 产品概述

产品名称
网宿移动端播放器 SDK

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

术语和缩写

术语/缩写 英文全称 含义
RTMP Real Time Messaging Protocol 用来进行实时数据通信的网络协议,主要用来在 Flash/AIR 平台和支持 RTMP 协议的流媒体/交互服务器之间进行音视频和数据通信。
HLS HTTP Live Streaming Apple 的动态码率自适应技术。主要用于PC和Apple终端的音视频服务。包括一个 m3u8 的索引文件,TS媒体分片文件和 key 加密串文件
HDL HTTP-FLV 使用 HTTP 协议流式的传输媒体内容。
码率 Bit Rate 码率又叫做比特率,是指每秒传送的比特(bit)数。比特率越高,传送数据速度越快。码率直接影响直播过程所消耗的流量和发送时所需的带宽,与码率成正相关:码率越大,需要的带宽越大,同等时长产生的流量越多。
分辨率 Resolution 图像分辨率是单位英寸中所包含的像素点数,分辨率影响图像大小,与图像大小成正比:分辨率越高,图像越大;分辨率越低,图像越小。
帧率 Frame Rate 用于测量显示帧数的量度。所谓的测量单位为每秒显示帧数 (Frames per Second,简称:FPS) 或“赫兹”(Hz)。影响画面流畅度,与画面流畅度成正比:帧率越大,画面越流畅;帧率越小,画面越有跳动感。如果码率为变量,则帧率也会影响体积,帧率越高,每秒钟经过的画面越多,需要的码率也越高,体积也越大。帧率建议在 20-30 FPS。
延迟追赶 Catch Live Delay 在直播过程中,当网络条件较差等情况下,如已经积攒了足够的数据时,播放器可直接将其丢弃或进行快进播放来追赶播放最新的数据的过程。
缓冲等待 Buffer Time 在网络条件较差等情况下,接收不到足够的数据进行播放时,播放器等待接收到设定的缓冲数据值后再继续播放的过程。

2. 框架

网宿科技黄莎琳谈“边缘计算”:前景广阔,但也面临四大挑战

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

3. 产品功能说明

解码方式

移动端播放器双平台均支持硬件解码和软件解码,可由 App 厂商自定义需要选择何种解码方式。一般当手机硬件不支持硬解时,会自动切换到软解。
硬解具备更好的解码效率,但兼容性不够优良,软解具备更好的兼容性,但同时也会更耗费性能。

软件解码

项目 描述
系统要求 Android 4.0 +(API 16+)对于 H.265需要 Android 5.0+且硬件支持、iOS 8 +
设备要求 Android:2013年及以后机型、iOS:iPhone 5 及其以上
视频解码格式 H264、H265
音频解码格式 AAC、speex、nellymoser

硬件解码

项目 描述
系统要求 Android 4.3 +(API 18+)、iOS 8 +
设备要求 Android:2013年及以后机型、iOS:iPhone 5 及其以上
视频解码格式 H264、H265(iPhone 6及其以上 & iOS 11+、
Android 和机型相关)
音频解码格式 AAC、speex、nellymoser

直播功能

延时追赶
在直播观看中,由于网络环境的干扰,可能会出现延时越来越大的情况。为保证直播观看体验的实时性,网宿播放器提供了延时追赶的策略。当延时达到设定值时,将旧的数据进行丢弃拉取当前最新数据,以达到追赶的效果。
延时追赶可设置的时间阈值:自然数,单位为 ms 。需要注意的是:直播的延时追赶值必须大于缓冲阈值,否则会造成频繁缓冲,建议相差 1000 ms 以上。

低延时模式(iOS)
目前仅 iOS 端提供此功能,建议 App 厂商在设计时不要与延时追赶的功能同时使用,择一即可。在一定的区间范围内(例如 50 - 100 ms),当延时时间小于该区间时,播放器采取稍快播的策略,当大于该区间时,采取稍慢播的策略,可有效降低延时。其中区间范围和播放速度等均可由 App 厂商自定义,具体可参见代码说明。

首屏秒开
此功能主要通过减少预准备阶段的数据分析,降低请求数据到首屏显示的时间,来达到首屏秒开的效果。

时移回看
此功能需在 CDN 方面已开启支持时移回看。播放过程中以当前时间点的直播内容为节点,回溯观看之前一段时间内的视频内容。

自定义 SEI 扩展字段
需配套客户端推流器使用,当推流带上 json 格式的 SEI 字段时,播放器解析到会自动展示,可用于直播答题等场景。支持 H264 编码的流,软硬编均支持。

点播功能

倍速播放
支持点播文件倍速播放,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多码率视频播放和主动切换,封装类型为

索引格式 切片格式 音视频轴
MPD M4 多视频/多视频多音频
MPD M4S 多音频
MPD MP4 多视频/多音频/多视频多音频

循环播放
可通过相关接口控制循环播放,若开启点播缓存功能,则此时仅使用本地缓存数据,不再通过网络请求获取。

通用功能

手势控制
可通过手势控制部分功能增减,可设置类型包括:

  • 控制音量大小
  • 控制屏幕亮度
  • 划屏拖拉进度条
  • 双击切换画面比例

通常采用左音量右亮度,或左亮度右音量设计。

缓冲等待
在网络状况较差等情况下,如果数据一接收就马上播放会造成频繁卡顿,如接收到很多再播放会造成卡顿时间长,为了平衡这两种极端情况,网宿播放器可对缓冲阈值部分进行设置,这其中就包含缓存上限和缓冲等待时间。

  • 缓存上限:可设置大小,存放在内存中用于提前加载未播放内容的区域,数据会一直缓冲直到达到上限值时停止,需要注意的是,并非越长的上限越好,较长的缓存上限可能会对带宽进行一定的浪费。目前仅 iOS 开放了设置接口
  • 缓冲等待时间:也称为缓冲阈值,可设置时间长短,等待接收到所设置的时间后再继续播放

可以说在关系上,缓存上限的数据量包含缓冲等待时间的数据量,但 SDK 并没有在二者的大小关系上做关联限制,建议 App 自行定义。

纯音频流播放
支持播放纯音频的流文件。此种情况下,建议 App 考虑截图或录制、录屏等功能是否有必要屏蔽。

后台播放
在移动端使用 App 进行音视频播放时不可避免的会有切入后台的情况,这时用户可感知的仅有流文件中的音频信息,网宿播放器提供两种后台播放模式

  • 后台播放不解码(软解):仅适用于软解条件。开启后切入后台时不对视频进行解密,可减少不必要的性能浪费,但因视频缓存的缘故,切前台后会看到视频快速跳转至当前音频播放时间点的过程
  • 后台播放:与上述模式相反的,无论软硬解,后台均进行音视频解码,当切回前台时,可立刻看到当前帧的播放画面

水印
仅支持图片水印,如需支持文字水印,建议 App 将文字转化为图片再进行水印的添加。水印位置可根据坐标值自定义。

视频录制/录屏
视频录制支持两种模式:

  • 录制模式侧重还原视频源本身
  • 录屏模式侧重还原实际观看到的场景,比如播放过程中的卡顿也会体现在录制结果中

以上两种模式对应支持格式、时间长度等如下:

  • 支持 MP4/FLV/GIF 格式
  • 录制时间

    1. MP4/FLV 格式:SDK 提供录制短视频时间范围 [3s,60s]
    2. GIF 格式:SDK 提供录制 GIF 时间范围 [100ms,30s]
  • 录制结束

    1. 回放观看录制时支持视频进度拖拉
    2. GIF 常作为 UGC 中的动态表情发出,提供分辨率压缩功能以解决高分辨率的 GIF 常会导致文件过大播放时长过长等问题

音视频原始数据获取
支持视频录制意味着可以在播放解码过程中提取到音视频原始内容,因此SDK也提供接口从外部提取PCM格式音频和YUV格式视频。
目前仅支持软解。

截图
截图格式为 JPG 。iOS 截图内容为全屏,Android 截图内容为应用内全屏,即不包含手机电量等状态栏信息。

代理
对于需要使用代理服务器的客户,SDK 可提供 IP、端口、用户名及密码的设置,来连接代理。目前代理协议支持 SOCKS4/SOCKS5/HTTP/HTTPS 四种。

多实例
在1.6.3及之前版本中,对于单一APP实例只支持维护单例播放器。
自1.6.4及之后版本,支持多实例播放器,但实际可支持播放器数量同设备性能、码流参数、解码方式紧密关联。
部分功能在多实例场景下受限:录制(仅支持录制其中一路)

Demo层功能参考

亮度调节
Demo 在播放界面的左半边手势进行上下滑动可调节观看界面亮度,App 如有需要可直接参考 Demo 层代码设计。

声音调节
Demo 在播放界面的右半边手势进行上下滑动可调节观看的媒体音量,App 如有需要可直接参考 Demo 层代码设计。

画面比例调节
目前 SDK 支持的画面比例有

  • 视频适应播放 view 的大小,可能导致会变形
  • 视频保持原比例,充满播放 view,部分画面不可见
  • 视频保持原比例,能够显示全部画面,竖直方向或者水平方向有黑边
  • 16:9
  • 4:3

Demo 在横屏模式下,双击播放界面,画面比例会依次调节,Demo 展示了不同比例下的样式,App 如有需要可参考 Demo 选择其中一种模式即可。

自动重连
当网络环境波动变化,例如 WiFi/4G 数据切换或数据流量断连等情况下,播放器可能会发生数据流拉取失败的情况,SDK 此时会返回 error,Demo 在此种情况下会请求重试,App 可根据自身需要确定请求多少次后给出提示。

关联功能

分辨率重建
该功能用于将低分辨率视频恢复成更高分辨率,以优化观众体验。
目前该功能属于第三方厂商,若需要请联系网宿互联网产品部。

4. 注意事项

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

鉴权KEY获取地址