Akagi201
9/25/2016 - 12:58 PM

ios-sdk.md

UPYUN iOS 直播 SDK 介绍:播放器

iOS系统自带播放器

iOS 开发平台自带多个视频或音频播放器。每个播放器都有自己功能局限:比如是否可以播放网络视频源,是否可以播放单视频单音频等。

在系统提供的这些播放控件之中 AVPlayer 功能最为强大 ,同时 AVPlayer 接口设计简单易用。基于 AVPlayer 包裹一层相应的 UI 元素就可以快速完成一个精美定制化的播放器。

系统播放器无法胜任直播应用

AVPlayer 不支持主流直播协议 rtmp 协议, 所以 AVPlayer 不能作为直播应用的播放器。

AVPlayer 可以播放 hls 格式直播源,但是 hls 延迟严重(10s左右),无法胜任互动直播的应用场景。

UPAVPlayer 播放器介绍

UPYUN 直播 SDK(UPLiveSDK.framework)提供完整的直播推拉流开发组件。 UPAVPlayer 是其中独立的播放器组件。

UPAVPlayer 是为视频直播开发的,但在功能上 UPAVPlayer 可以覆盖系统自带播放器所提供的功能项:

UPAVPlayer 可以播放 RTMP、HLS、FLV等直播流,也可以播放 mp4,mp3等格式点播流。

UPAVPlayer 可以播放视频也可以单独播放音频。

UPAVPlayer 可以播放网络文件也可以播放本地文件。

同时 PAVPlayer 参考了系统自带 AVPlayer 的精简接口设计,开发者可以基于 UPAVPlayer 快速开发高可定制化的视频播放应用。

UPAVPlayer 功能特点

一般的开源视频播放器和第三方播放器主要有两种:

  • 基于系统 AVPlayer 开发的播放器,包裹一层 UI 元素和添加一些简便的控制接口。这种播放器还是无法胜任直播应用。

  • 更普遍的是基于 ffplay[1]开发的播放器。这类播放器可移植性好,可以用于多平台使用,但是也伴随很多问题比如:编译安装门槛高,代码量大修改维护困难,接口复杂。

UPAVPlayer 在设计和实现上参考以上各种播放器的优缺点,基于 ffmpeg 开发,播放逻辑控制、视频渲染、音频播放等是通过系统接口直接完成。

UPAVPlayer 主要功能特点:

1 支持 RTMP, HLS, HTTP FLV 多种直播流

RTMP 是最主流的直播协议延时较小,HLS延时高,FLV较利于首屏秒开优化。UPYUN 的直播平台支持 RTM P推流和 RTMP、HLS、FLV 的拉流。

2 支持 mp4, mp3 等文件格式的点播流

UPAVPlayer 支持点播流。比如存储在 CDN 上的音视频文件可以直接在线播放。同时点播流支持暂停和快进推拽功能。

3 直播累计延迟消除

对于直播流,时效优先,所以因网络抖动引起的卡顿并不会引起时间延迟的累加。

4 音画同步调整

UPAVPlayer 可以自动调整音频包和视频包的时间戳对齐。

5 秒开优化

秒开优化分为各个环节的秒开优化。针对播放器可以优化视频源连接及初始视频格式解析的各个方面。对于一般的网络环境和播放源,UPAVPlayer 可以做到大于 60% 几率的秒开播放(开播小于 0.5s)。对于较好的网络环境和视频源基本瞬开无任何延迟。同时 UPAVPlayer 接口支持预连接后播放,恰当的使用这种播放逻辑也可以起到秒开效果。

6 支持缓冲大小设置,可减少网络抖动引起的卡顿

缓冲区大小主要是应对网络抖动, UPAVPlayer 播放缓冲区大小可以自定义设置。比如直播应用缓冲可以调小到 1s 来减少直播延时。对于点播应用可以设置为 5s 来适应较差的网络环境,达到流畅的播放效果。

7 播放控件可高定制化。支持全屏,旋转,窗口大小设置

playView 可以视作一个普通的 UIView 来设置边框大小,旋转,全屏等。

8 支持 speex 解码,可以配合网页 Flex 推流器工作

浏览器端推流直播一般是基于 Flex 开发的,UPAVPlayer 支持 speex 格式音频,可以配合浏览器推流直播。

9 一屏多画。同一UIView 可以放置多个播放器播放多条流

在同一个 UIView 或者 UITableViewCell 都可以放置多个播放器,来实现多条流同时播放。

10 静音功能。可以针对单条播放流静音

静音不同于系统音量降到零,UPAVPlayer 可以实现独立静音,而不影响其它流声音的正常播放。

11 集成播放质量监控

播放器集成放质量监控,可以监控分析不同节点播放源的质量。

12 丰富的视频流信息和播放参数获取

播放器提供详细的视频流信息和播放器信息的接口。

13 丰富的视频流状态和播放器状态回调接口

对于视频流的连接、读取、断开,和播放器的播放、停止,播放进度、缓冲进度都有相应的接口或者回调通知。

注释:

[1]FFplay is a very simple and portable media player using the FFmpeg libraries and the SDL library. It is mostly used as a testbed for the various FFmpeg APIs.