音视频播放
更新时间:2025-09-04 19:56:30
RTCXMedia 提供设备的直播,点播,截图,录制,音频对讲等相关功能
// 导入媒体播放SDK头文件
#import <RTCXMedia/RTCXMedia.h>
播放器初始化
@interface RTCXPlayInfo : NSObject
// 设备型号 如:xLeWcoelZbyOePbJludl
@property (nonatomic, copy) NSString *productKey;
// 设备序列号SN 如:TEST20240820002
@property (nonatomic, copy) NSString *deviceName;
// 平台为设备颁发的ID,设备的唯一标识符
@property (nonatomic, copy) NSString *iotId;
@end
@interface RTCXPlayerView : UIView
/**
player相关接口调用
*/
@property (nonatomic, strong) RTCXPlayerController *playerController;
/**
初始化View
@param frame 需要展示视频的frame
@param playInfo 播放设备信息
*/
- (id)initWithFrame:(CGRect)frame withPlayInfo:(RTCXPlayInfo *)playInfo;
@end
调用示例如下:
RTCXPlayInfo *playInfo = [[RTCXPlayInfo alloc] init];
playInfo.iotId = self.curDevice.iotId;
playInfo.productKey = self.curDevice.productKey;
playInfo.deviceName = self.curDevice.deviceName;
// 初始化播放器,传入frame和设备model
self.playerView = [[RTCXPlayerView alloc] initWithFrame:CGRectMake(0, 0, SCREEN_WIDTH, SCREEN_WIDTH * 9.0 / 16.0) withDevice:playInfo];
self.playerView.playerController.delegate = self;// 创建player控制类并设置代理监听player状态,playeview.playerController会懒加载创建控制类
self.playerView.playerController.dataSource = self;// 设置playeview.playerController的dataSource
// 初始化player播放的视图,可以把该playerView加到任意view上
[self.view addSubview:self.playerView];
直播
@protocol RTCXPlayerInterface <NSObject>
/**
直播调用
*/
- (void)start;
@end
调用示例如下:
// 开始直播
[self.playerView.playerController start];
云/SD 卡回放
@protocol RTCXPlayerInterface <NSObject>
/**
回放调用
@param playbackInfo 回放参数
*/
- (void)seekToTime:(RTCXPlaybackInfo*)playbackInfo;
@end
调用示例如下:
// 云回放或SD卡回放
RTCXPlaybackInfo *playbackInfo = [[RTCXPlaybackInfo alloc] init];
playbackInfo.startTime = [startTime timeIntervalSince1970];
playbackInfo.endTime = [startTime timeIntervalSince1970];
playbackInfo.playbackType = _isPlaybackSDCard?IOTPlaybackTypeSDCardRecord:IOTPlaybackTypeCloudRecord;
[self.playerView.playerController seekToTime:playbackInfo];
监听播放状态
/// 播放器状态回调
typedef NS_ENUM(NSInteger, RTCXCameraPlayerState) {
// 播放初始化播放未开始
RTCXCameraPlayerStateInitial = -1,
// 播放准备就绪
RTCXCameraPlayerStatePrepared = 0,
// 播放状态
RTCXCameraPlayerStatePlaying,
// 开始图像渲染
RTCXCameraPlayerStateRenderingStart,
// 暂停状态
RTCXCameraPlayerStatePaused,
// 缓冲状态开始
RTCXCameraPlayerStateBuffingStart,
// 缓冲状态结束
RTCXCameraPlayerStateBuffingEnd,
// 事件,剪辑视频等,播放完毕
RTCXCameraPlayerStatePlaybackCompleted,
// 播放停止
RTCXCameraPlayerStateStopped,
/// 播放错误
RTCXCameraPlayerStateError
};
@protocol RTCXPlayerDelegate <NSObject>
/**
player播放状态回调
@param playState player状态(RTCXCameraPlayerState)
@param code player错误码
*/
- (void)onPlayStateChanged:(RTCXCameraPlayerState)playState code:(int)code;
@end
调用示例如下:
#pragma mark -- RTCXPlayerDelegate --
- (void)onPlayStateChanged:(RTCXCameraPlayerState)playState code:(int)code {
COMMON_PRINTF(@"+++++++直播页播放状态:%d, code: %d",playState,code);
dispatch_async(dispatch_get_main_queue(), ^{
switch (playState) {
case RTCXCameraPlayerStatePrepared:
[self.livePlayerView setWaitingAnimation:YES];
break;
case RTCXCameraPlayerStatePlaying:
[self.livePlayerView setWaitingAnimation:NO];
break;
case RTCXCameraPlayerStateRenderingStart:
[self.livePlayerView setWaitingAnimation:NO];
break;
case RTCXCameraPlayerStateBuffingStart:
[self.livePlayerView setWaitingAnimation:YES];
break;
case RTCXCameraPlayerStateBuffingEnd:
[self.livePlayerView setWaitingAnimation:NO];
break;
case RTCXCameraPlayerStateStopped:
[self.livePlayerView setWaitingAnimation:NO];
break;
default:
break;
}
});
}
播放状态码
播放状态 | 状态码&描述 |
---|---|
RTCXCameraPlayerStateStopped | -501:SD卡回放没有更多数据了(回放结束) |
RTCXCameraPlayerStatePlaybackCompleted | -10010:到达了限制播放时长 |
RTCXCameraPlayerStateError | -2:播放通道断开连接 -5:播放通道异常预警 -10025:SD卡回放达到最大路数限制 -10047:低功耗设备即将进入休眠 |
播放器销毁
当不再需要播放的时候,要销毁播放器
@protocol RTCXPlayerInterface <NSObject>
/**
释放player(不再需要时调用释放)
*/
- (void)releasePlayer;
@end
调用示例如下:
// 销毁播放器
[self.playerView.playerController releasePlayer];
截图
@protocol RTCXPlayerInterface <NSObject>
/**
截图
@param bOriginalPic 是否原始尺寸
@param isAdd 是否添加时间水印
@return image
*/
- (UIImage *)snapshot:(BOOL)bOriginalPic isAddTimeWatermark:(BOOL)isAdd;
@end
调用示例如下:
// 截图
UIImage *image = [self.playerView.playerController snapshot:YES isAddTimeWatermark:NO];