YXPlayerKit 是一个适用于 “iOS 8.0” 以上的音视频播放器 SDK,支持高度定制化和二次开发,特点在于支持 RTMP 和 HLS 直播流媒体播放。
功能特性
pod 'YXPlayerKit'
pod update
或
pod install
在需要的地方添加
#import "YXPlayerKit.h"
初始化 YXPlayerOption
// 初始化 YXPlayerOption 对象
YXPlayerOption *option = [YXPlayerOption defaultOption];
// 更改需要修改的 option 属性键所对应的值
[option setOptionValue:@15 forKey:YXPlayerOptionKeyTimeoutIntervalForMediaPackets];
[option setOptionValue:@1000 forKey:YXPlayerOptionKeyMaxL1BufferDuration];
[option setOptionValue:@1000 forKey:YXPlayerOptionKeyMaxL2BufferDuration];
[option setOptionValue:@(YES) forKey:YXPlayerOptionKeyVideoToolbox];
[option setOptionValue:@(kPLLogInfo) forKey:YXPlayerOptionKeyLogLevel];
[option setOptionValue:[QNDnsManager new] forKey:YXPlayerOptionKeyDNSManager];
初始化 YXPlayer
// 初始化 YXPlayer
self.player = [YXPlayer playerWithURL:self.URL option:option];
// 设定企业APPId (必须)
self.player.yxAppId = @"企业APPId";
// 设定直播Id (必须)
self.player.yxStreamId = @"直播Id";
// 设定代理 (optional)
self.player.delegate = self;
获取播放器的视频输出的 UIView 对象并添加为当前 UIView 对象的子视图
//获取视频输出视图并添加为到当前 UIView 对象的 Subview
[self.view addSubview:player.playerView];
开始/暂停操作
// 播放
[self.player play];
// 停止
[self.player stop];
// 暂停
[self.player pause];
// 继续播放
[self.player resume];
获取播放器状态
// 实现 <PLPlayerDelegate> 来控制流状态的变更
- (void)player:(nonnull PLPlayer *)player statusDidChange:(PLPlayerStatus)state {
// 这里会返回流的各种状态,你可以根据状态做 UI 定制及各类其他业务操作
// 除了 Error 状态,其他状态都会回调这个方法
}
- (void)player:(nonnull PLPlayer *)player stoppedWithError:(nullable NSError *)error {
// 当发生错误时,会回调这个方法
}
YXPlayerKit 只具备播放等一系列功能,如果需要使用云犀默认的直播列表界面,以及播放界面,
请到 "https://github.com/yx-engineering/YXiOSPlayer.git" 自行下载。然后将 YXClasses 拖入到自己的工程中。
然后找到"YXClasses/YXSource/YXGlobalDefine.h"文件(可通过搜索 “//YXTODO:”,快速找到对应的位置,进行内容填写),
该文件中有三个空字符串的宏定义 YXBusinessAppId、YXAccessKey、YXSecretKey,将自己企业对应的 AppID、AccessKey、SecretKey
填写进去。再到 "YXClasses/YXPlayerGUI/YXLiveDetail/View/YXCommentView.m”文件中的
- (void)bottomInputView:(YXBottomInputView *)bottomInputView sendMessage:(NSString *)message {
}
方法中,填写当前用户的 username、userId、avatar (可提前用一个单例将这三个字段的值进行存储 或使用 NSUserDefaults
进行存储,这样就可以在这里直接获取到了)。
因为 iOS 的音频资源被设计为单例资源,所以如果在 player 中做的任何修改,都可能对外造成影响,并带来不可预估的各种问题。
为了应对这种情况,YXPlayerKit 采取的方式是检查是否可以播放以及是否可以进入后台,而在内部不做任何设置。具体通过扩展 AVAudioSession
来实现,提供两个方法,如下:
/*!
* @description 检查当前 AVAudioSession 的 category 配置是否可以播放音频. 当为 AVAudioSessionCategoryAmbient,
* AVAudioSessionCategorySoloAmbient, AVAudioSessionCategoryPlayback, AVAudioSessionCategoryPlayAndRecord
* 中的一种时为 YES, 否则为 NO.
*/
+ (BOOL)isPlayable;
/*!
* @description 检查当前 AVAudioSession 的 category 配置是否可以后台播放. 当为 AVAudioSessionCategoryPlayback,
* AVAudioSessionCategoryPlayAndRecord 中的一种时为 YES, 否则为 NO.
*/
+ (BOOL)canPlayInBackground;
可以检查是否可以播放以及当前 category 的设置是否可以后台播放。