iOS 播放器 sdk
概述
常规播放器是一种针对移动端播放常规视频流的SDK,具有稳定、多兼容、功能丰富的特点,适合播放常规视频流的场景。它支持 HLS、RTMP、FLV 等多种流媒体播 放格式,视频支持 h264 格式、音频支持 AAC 格式。使用时需要导入两个静态包:MDPlayerManager.framework
、MDMediaFrameworkWithSSL.framework
。 其中MDPlayerLiveView
是播放器中枢类,MDMediaPlayerAdapter
是具体实现类。开发者将MDPlayerLiveView
对象添加在负责渲染视频的UIView上,并为MDPlayerLiveView
绑定一个MDMediaPlayerAdapter
对象,就可以进行视频播放了。所有播放视频相关的功能,通过调用MDPlayerLiveView
的对外接口来实现。
开发环境要求
- Xcode 9.0+。
- iOS 9.0 以上的 iPhone 或者 iPad 真机。
- 项目已配置有效的开发者签名。
集成
依次将
MDPlayerManager.framework
和MDMediaFrameworkWithSSL.framework
两个包手动拖拽到项目中。打开您的
Xcode
工程项目,选择要运行的target
,选中Build Phases
项。单击Link Binary with Libraries
项展开,单击底下的【+】,依次添加以下系统依赖库:libbz2.1.0.tbd libc++.tbd libz.tbd
添加外部依赖库
MuduLibrary.framework
。选中 Build Settings 项,搜索
Other Linker Flags
。添加-ObjC
。
添加摄像头和麦克风使用权限
在App
的Info.plist
中添加以下两项,分别对应麦克风和摄像头在系统弹出授权对话框时的提示信息:
Privacy - Microphone Usage Description
,并填入麦克风使用目的提示语。Privacy - Camera Usage Description
,并填入摄像头使用目的提示语。
示例代码
- 在需要用到的地方导入公共头文件。
- 初始化
MDPlayerLiveView
对象和MDMediaPlayerAdapter
对象,并完成绑定。 - 将
MDPlayerLiveView
对象添加在需要渲染视频的UIView上。 - 调用播放接口。
#import <MDPlayerManager/MDPlayerManager.h>
#import <MDMediaFrameworkWithSSL/MDMediaPlayerAdapter.h>
//1.初始化一个MDPlayerLiveView对象
MDPlayerLiveView *liveView = [MDPlayerLiveView liveView];MDMediaPlayerAdapter *adapter = [MDMediaPlayerAdapter getAdapter];
//绑定Adapter
[liveView setAdapter:adapter];
//将liveView添加在用来渲染视频的View上
[self.view insertSubview:liveView atIndex:0];
//开始播放视频
[liveView startPlay:@"https://..."];
功能说明
MDPlayerLiveView
位于MDPlayerManager.framework
,是整个视频播放过程的中枢管理类,开发者所有视频操作都要通过调用MDPlayerLiveView
来完成。它里面涵盖了多种播放器类型的功能,所以对外接口分为:公共、常规、低延时三个功能模块。公共模块在所有拉流场景均适用,常规模块只适合常规拉流场景,低延时模块只适合低延时拉流场景。本文档只介绍公共模块和低延时功能模块。
注意:MDPlayerLiveView.h
中通过#pragma mark - xxx的形式将三个模块进行mark区分。例如,#pragma mark - Common表示它下面的功能属于公共模块;#pragma mark - MDMediaPlayerAdapter表示它下面的功能属于常规模块。
公共模块
这个模块的功能对所有拉流场景都有效。
名称 | 描述 |
---|---|
adapter | 一个实现了 MDPlayDelegate 代理的对象,例如低延时播放器包 MDRealTimeStreamingPlayer.frame 中的 MDRealTimeStreamingPlayerAdapter、普通播放器包 MDMediaFrameworkWithSSL.frame 中的 MDMediaPlayerAdapter 等。只有正确设置了 adapter,MDPlayerLiveView才能进行播放视频。 |
isPlaying | 播放器是否正在播放中。 注意:暂停不属于正在播放状态,会返回NO。 |
isPaused | 播放器是否正处于暂停状态。 |
isShowDebugView | 是否显示播放器状态信息的调试浮层。 |
onError | 出现错误时触发回调。错误码类型为 MDPlayerCode。 |
onWarning | 出现警告时触发回调。 |
onSnapshotComplete | 调用截图函数时触发回调。将图片传出来。 |
onPlayerEnterBackground | 播放器进入后台的回调。 |
onPlayerBecomeActive | 播放器进入前台的回调 |
liveView | 获取MDLiveView对象。 |
startPlay: | 开始播放。参数为播放地址。 |
stopPlay | 停止播放。 |
pausePlay | 暂停播放。 |
resumePlay | 恢复播放。 |
destory | 销毁。 |
setScaleMode: | 设置画面填充模式。普通播放器可以设置全部状态,低延时播放器只能设置AspectFit和AspectFill两种模式。 |
getScaleMode | 获取画面填充模式。 |
setVolume: | 设置播放器音量。取值范围0 - 100。默认100。 |
getVolume | 获取音量值 |
snapshot | 截图。通过onSnapshotComplete回调来获取图片。 |
常规模块
这个模块的功能,只对常规拉流场景有效,也就是将MDMediaPlayerAdapter
对象绑定给MDPlayerLiveView
时有效。
名称 | 描述 |
---|---|
playbackRate | 播放速度。默认1.0 |
currentPlaybackTime | 当前播放时间。设置播放进度时调用。 |
duration | 视频总时长。 |
playableDuration | 可播放时长。也就是已播放的时长+缓存下来还未播放的时长。 |
isPreparedToPlay | 是否准备好播放。 |
playbackState | 播放状态。 |
naturalSize | 视频源的尺寸。 |
onPlaybackIsPrepared | 播放开始的回调。 |
onPlaybackDidFinished | 播放结束的回调。 |
其他说明
错误码说明
MDPlayerCode | 描述 |
---|---|
MDPLAYER_OK = 0 | 没有错误 |
MDPLAYER_ERROR_FAILED = -1 | 暂未归类的通用错误 |
MDPLAYER_ERROR_INVALID_PARAMETER = -2 | 调用 API 时,传入的参数不合法 |
MDPLAYER_ERROR_REFUSED = -3 | API 调用被拒绝 |
MDPLAYER_ERROR_NOT_SUPPORTED = -4 | 当前 API 不支持调用 |
MDPLAYER_ERROR_INVALID_LICENSE = -5 | license 不合法,调用失败 |
MDPLAYER_ERROR_REQUEST_TIMEOUT = -6 | 请求服务器超时 |
MDPLAYER_ERROR_SERVER_PROCESS_FAILED = -7 | 服务器无法处理您的请求 |
MDPLAYER_ERROR_DISCONNECTED = -8 | 连接断开 |
MDPLAYER_WARNING_NETWORK_BUSY = 1101 | 网络状况不佳:上行带宽太小,上传数据受阻 |
MDPLAYER_WARNING_VIDEO_BLOCK = 2105 | 当前视频播放出现卡顿 |
MDPLAYER_WARNING_CAMERA_START_FAILED = -1301 | 摄像头打开失败 |
MDPLAYER_WARNING_CAMERA_OCCUPIED = -1316 | 摄像头正在被占用中,可尝试打开其他摄像头 |
MDPLAYER_WARNING_CAMERA_NO_PERMISSION = -1314 | 摄像头设备未授权,通常在移动设备出现,可能是权限被用户拒绝了 |
MDPLAYER_WARNING_MICROPHONE_START_FAILED = -1302 | 麦克风打开失败 |
MDPLAYER_WARNING_MICROPHONE_OCCUPIED = -1319 | 麦克风正在被占用中,例如移动设备正在通话时,打开麦克风会失败 |
MDPLAYER_WARNING_MICROPHONE_NO_PERMISSION = -1317 | 麦克风设备未授权,通常在移动设备出现,可能是权限被用户拒绝了 |
MDPLAYER_WARNING_SCREEN_CAPTURE_NOT_SUPPORTED = -1309 | 当前系统不支持屏幕分享 |
MDPLAYER_WARNING_SCREEN_CAPTURE_START_FAILED = -1308 | 开始录屏失败,如果在移动设备出现,可能是权限被用户拒绝了 |
MDPLAYER_WARNING_SCREEN_CAPTURE_INTERRUPTED = -7001 | 录屏被系统中断 |
MDPLAYER_ERROR_NOADAPTER = 1 | 未初始化Adapter |
MDPLAYER_ERROR_NOPLAYER = 2 | 未初始化播放器 |
MDPLAYER_ERROR_NOFUNCTION = 3 | adapter未实现函数 |
MDPLAYER_ERROR_NOURL = 4 | 播放地址为空 |
MDPLAYER_ERROR_SNATSHOP = 5 | 截图错误 |
MDPLAYER_ERROR_RTCSTREAM_ONLY = 6 | 低延时播放器只支持播放RTC流 |
MDPLAYER_ERROR_MDMEDIAPLAYER = 7 | MDMediaPlayerAdapter播放视频报错 |
播放状态说明
MDPlaybackState | 描述 |
---|---|
MDPlaybackStateStopped = 0 | 播放停止 |
MDPlaybackStatePlaying = 1 | 开始播放 |
MDPlaybackStatePaused = 2 | 暂停播放 |
MDPlaybackStateInterrupted = 3 | 播放间断 |
MDPlaybackStateSeekingForward = 4 | 播放快进 |
MDPlaybackStateSeekingBackward = 5 | 播放后退 |
视频画面填充模式
MDPlayerScaleMode | 描述 |
---|---|
MDPlayerScaleModeNone = 0 | 不缩放 |
MDPlayerScaleModeAspectFit = 1 | 等比缩放,图像长边填满屏幕,短边区域会被填充黑色,画面的内容完整 |
MDPlayerScaleModeAspectFill = 2 | 等比缩放,图像铺满屏幕,超出显示视窗的视频部分将被裁剪,画面显示可能不完整 |
MDPlayerScaleModeFill = 3 | 不等比缩放,图像铺满屏幕,图像可能会被拉伸,画面的内容完整 |
常见问题
1、如何进行横竖屏切换播放?
点击切换到具体横屏或竖屏,可以直接改变播放器的view进行匹配。
2、回放到一半时播放失败了怎么办?
在onError回调里根据具体业务做重连操作。
3、怎么拖动进度?
调用播放器setCurrentPlaybackTime:(NSTimeInterval)time。
4、怎么知道视频开始播放了?
视频开始播放时,onPlaybackIsPrepared回调会被调用。
5、怎么进行大小窗切换?
可以对播放器视图进行操作,先移除大窗的播放器view,将该view添加到小窗口上。
6、怎么更换播放地址?
调用startPlay方法,设置播放地址即可更换视频播放。