iOS 播放器 sdk

概述

常规播放器是一种针对移动端播放常规视频流的SDK,具有稳定、多兼容、功能丰富的特点,适合播放常规视频流的场景。它支持 HLS、RTMP、FLV 等多种流媒体播 放格式,视频支持 h264 格式、音频支持 AAC 格式。使用时需要导入两个静态包:MDPlayerManager.frameworkMDMediaFrameworkWithSSL.framework。 其中MDPlayerLiveView是播放器中枢类,MDMediaPlayerAdapter是具体实现类。开发者将MDPlayerLiveView对象添加在负责渲染视频的UIView上,并为MDPlayerLiveView绑定一个MDMediaPlayerAdapter对象,就可以进行视频播放了。所有播放视频相关的功能,通过调用MDPlayerLiveView的对外接口来实现。

开发环境要求

  • Xcode 9.0+。
  • iOS 9.0 以上的 iPhone 或者 iPad 真机。
  • 项目已配置有效的开发者签名。

集成

  1. 依次将MDPlayerManager.frameworkMDMediaFrameworkWithSSL.framework两个包手动拖拽到项目中。

  2. 打开您的Xcode工程项目,选择要运行的target,选中Build Phases项。单击Link Binary with Libraries项展开,单击底下的【+】,依次添加以下系统依赖库:

    libbz2.1.0.tbd
    libc++.tbd
    libz.tbd
    
  3. 添加外部依赖库MuduLibrary.framework

  4. 选中 Build Settings 项,搜索 Other Linker Flags。添加 -ObjC

添加摄像头和麦克风使用权限

AppInfo.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方法,设置播放地址即可更换视频播放。

results matching ""

    No results matching ""