推流SDK的基本使用流程
1、创建播放器接口类
2、初始化播放器的默认参数
3、添加播放器试图到需要的界面上
4、设置播放视频的URL
5、准备播放
6、注册播放器代理,接收 播放中状态
下面按照步骤分别介绍具体使用方法:
1.创建播放器接口类
JDCloudPlayer类,为播放器SDK的核心类,提供播放器开始、暂停、重播、seek等等功能。 引入头文件#import < JDCloudPlayerFramework /JDCloudPlayer.h >
@property (nonatomic, strong) JDCloudPlayer *jdCloudPlayer;
self.jdCloudPlayer = [[JDCloudPlayer alloc]init];
JDCloudOptionModel类配置播放器的默认参数,每个属性参数有一个对应的默认值,关于默认值和参数范围,参见JDCloudOpti onModel类提供的属性和方法。 初始化默认系统参数,播放前设置。
JDCloudOptionModel *model = [[JDCloudOptionModel alloc] init];
//是否开启多码率网络自适应 self.jdCloudPlayer.adaptivePlayback = YES; //是否纯音频播放 self.jdCloudPlayer.isOnlyAudio = YES; //是否镜像 self.jdCloudPlayer.isMirrorPlay = YES; //是否后台播放 self.jdCloudPlayer.isPlayOnBackGroud = YES; //缩放模式 默认填充 self.jdCloudPlayer.scalingMode = JDCloudScalingModeAspectFit;
[self insertSubview:self.jdCloudPlayer.playerView atIndex:0];
填写播放地址,播放器SDK支持RMVB、AVI、MKV、MP4、MOV等格式。
//第一次准备播放设着URL [self.jdCloudPlayer setVideoWithURL:url withPlayerOption:model]; //重设URL [self.jdCloudPlayer resetWithUrl:url withPlayerOption:model];
[self.jdCloudPlayer prepareToPlay];
引入播放器回调代理
self.jdCloudPlayer.delegate = self;
//播放过程中状态发生改变 - (void)vodPlayer:(JDCloudPlayer *)vodPlayer onEventCallback:(JDCloudPlayerEvent)event; //播放时发生错误的回调信息 - (void)vodPlayer:(JDCloudPlayer *)vodPlayer playBackErrorModel:(JDCloudPlayerVideoErrorModel *)errorModel;
示例代码如下:
//播放过程中状态发生改变 - (void)updateVodPlayViewDataWithEvent: (JDCloudPlayerEvent)event vodPlayer:(JDCloudPlayer *)vodPlayer{ switch (event) { /*! 准备成功*/ case JDCloudPlayerEventPrepareDone = 0, /*! 开始播放*/ case JDCloudPlayerEventPlay, /*! 视频开始向前*/ case JDCloudSeekVideoStart, /*! 音频开始向前*/ case JDCloudSeekAudioStart, /*! 第一帧加载完成*/ case JDCloudPlayerEventFirstFrame, /*! 暂停播放*/ case JDCloudPlayerEventPause, /*! 停止播放*/ case JDCloudPlayerEventStop, /*! 播放已结束*/ case JDCloudPlayerEventFinish, /*! 开始加载视频数据*/ case JDCloudPlayerEventBeginLoading, /*! 视频资源加载完成*/ case JDCloudPlayerEventEndLoading, /*! 跳转成功*/ case JDCloudPlayerEventSeekDone, /*! 播放被中断*/ case JDCloudPlayerEventInterrupted, /*! 向前跳转*/ case JDCloudPlayerEventSeekingForward, /*! 向后跳转*/ case JDCloudPlayerEventSeekingBackward } } //根据错误信息,展示popLayer界面 - (void)showPopLayerWithErrorModel: (JDCloudPlayerVideoErrorModel *)errorModel{ switch (errorModel.errorCode) { // 未知错误 case 0: // 当网络超时进行提醒(文案统一可以定义),用户点击可以进行重播。 当前网络不佳,请稍后点击重新播放 case 4008: // 当视频加载出错时进行提醒,点击可重新加载。 视频加载出错,请点击重新播放 case 4005: // 服务器返回错误情况 default: break; } }
结束播放后,播放器播放状态改为stop即可
//停止播放 [self.jdCloudPlayer stop];
在播放过程中,可以进行一下功能的设置,设置接口在JDCloudPlayer类中有详细备注,详细解释和示例代码如下:
//播放 [self.jdCloudPlayer play]; //停止,在开始播放之后调用 [self.jdCloudPlayer stop]; //暂停 [self.jdCloudPlayer pause]; //暂停后恢复播放 [self.jdCloudPlayer resume]; //重新播放上一次url地址视频 [self.jdCloudPlayer replay]; //跳转到指定时间点的视频画面,秒 [self.aliPlayer seekToTime:1.5];
视频画面的填充模式,如裁剪、填充、全屏等效果;通过scalingMode属性来设置/获取当前所放模式,播放前或者播放中设置均生效
typedef NS_ENUM(NSInteger, JDCloudScalingMode) { /*! 不改变比例*/ JDCloudScalingModeNone, /*! 填充 统一尺度直到宽高某一条件匹配*/ JDCloudScalingModeAspectFit, /*! 剪裁 统一尺度直到,画面填充满可见的边界。宽或高的内容可能被剪切*/ JDCloudScalingModeAspectFill, /*! 全屏 不统一尺度,宽高完全匹配设置的区域,画面可能被拉伸*/ JDCloudScalingModeFill };
代码示例:
switch (button.tag) { case 300:{ //填充 self.jdCloudPlayer.scalingMode = JDCloudScalingModeAspectFit; } break; case 301:{ //裁剪 self.jdCloudPlayer.scalingMode = JDCloudScalingModeAspectFill; } break; case 302: { //全屏 self.jdCloudPlayer.scalingMode = JDCloudScalingModeFill; } break;
self.jdCloudPlayer.playRate = 0.5;
在播放器创建之后,可设置清晰度,播放中也可以设置,仅点播可用,支持高清、超清、标清。
typedef NS_ENUM(NSInteger, JDCloudPlayerClaritType) { /*! 流畅*/ JDCloudMPMovieClaritTypeSD, /*! 标清*/ JDCloudMPMovieClaritTypeCIF, /*! 高清*/ JDCloudMPMovieClaritTypeHD, };
switch (button.tag) { case 300:{ //超清 self.infoModel.claritType = JDCloudMPMovieClaritTypeHD } break; case 301:{ //高清 self.context.infoModel.claritType = JDCloudMPMovieClaritTypeCIF; } break; case 302: { //标清 self.context.infoModel.claritType = JDCloudMPMovieClaritTypeSD; } break;
播放器中显示的当前时间和播放的总时长,在准波播放成功后,可以获取。
示例代码:
//当前播放时间 NSTimeInterval currentTime = self.jdCloudPlayer.currentPlayerTime //总时长 NSTimeInterval durationTime = self.jdCloudPlayer.duration //计算当前播放进度 Float progress = currentTime / durationTime;
镜像功能可使播放的画面左右镜像翻转。示例代码:
self.jdCloudPlayer.isMirrorPlay = YES;
当用户点击home按钮后,播放器进入后台继续读取数据并播放音频。当APP回到前台后,音频继续播放。
参考下图设置:Target-Capabilities-Background Modes 打开,选择Audio,AirPlay and Picture in Picture选项即可。
self.jdCloudPlayer.isOnlyAudio = YES;
获取当前播放器时间点播放图片。
UIImage *image = [self.jdCloudPlayer thumbnailImageAtCurrentTime];
//初始化系统音量空间 设置音量 self.volumeView = [[MPVolumeView alloc] init]; self.systemVolume = self.volumeSlider.value; //亮度控制 [UIScreen mainScreen].brightness += 0.01;
重设播放器的URL。
if (self.jdCloudPlayer && self.jdCloudPlayer.playerView) { [self resetPlayWithUrl:self.playUrl]; }
截取gif和小视频时,先把视频下载到本地,选取截的视频的开始时间和结束时间。
/* * 截取小视频 * videoPath 视频下载在本地地址 destPath 小视频将要存本地的地址 width 小视频的宽度 start 开始时间 end 结束时间 recordVideoFinished 完成回调 / + (void) recordVideo: (NSString*)videoPath destPath: (NSString*)destPath imageWidth: (NSInteger)width startTime: (NSInteger)start endTime: (NSInteger)end progress: (JDCloudProgressBlock)blockrecordVideoFinished:(JDCloudRecordVideoFinishedBlock)recordVideoFinished //截取生成gif + (void) recordGif: (NSString*)videoPath destPath: (NSString*)destPath width: (NSInteger)width fps: (CGFloat)frames duration: (NSInteger)duration startTime: (NSInteger)startTime progress: (JDCloudProgressBlock)block recordGifFinished:(JDCloudRecordGifFinishedBlock)recordGifFinished
边播边下缓存功能是在视频被成功播放后,文件会缓存到本地,再次播放视频时会直接使用本地缓存文件,不再走网络请求。
//取当前播放视频URL NSString *playUrl = [self.cacheSingleton getProxyUrl:self.playUrl.absoluteString]; //预下载 [self.cacheSingleton preDownload:playerUrlStr];
播放过程中状态发生改变,获取不同播放状态和播放信息作为日志。
//播放过程中状态发生改变 - (void)updateVodPlayViewDataWithEvent:(JDCloudPlayerEvent)event vodPlayer:(JDCloudPlayer *)vodPlayer