TXVodPlayer *_txVodPlayer = [[TXVodPlayer alloc] init];[_txVodPlayer setupVideoWidget:_myView insertIndex:0]
[_txVodPlayer setupVideoWidget:_myView insertIndex:0]
[UIView animateWithDuration:0.5 animations:^{_myView.transform = CGAffineTransformMakeScale(0.3, 0.3); // 缩小1/3}];
// 播放 URL 视频资源NSString* url = @"http://1252463788.vod2.myqcloud.com/xxxxx/v.f20.mp4";[_txVodPlayer startVodPlay:url];// 播放沙盒本地视频资源// 获取 Documents路径NSString *documentPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject];// 获取本地视频路径NSString *videoPath = [NSString stringWithFormat:@"%@/video1.m3u8",documentPath];[_txVodPlayer startVodPlay:videoPath];
TXPlayerAuthParams *p = [TXPlayerAuthParams new];p.appId = 1252463788;p.fileId = @"4564972819220421305";// psign 即播放器签名,签名介绍和生成方式参见链接:https://www.tencentcloud.com/document/product/266/38099p.sign = @"psignxxxxx"; // 播放器签名[_txVodPlayer startVodPlayWithParams:p];
PLAY_ERR_GET_PLAYINFO_FAIL
事件,反之收到PLAY_EVT_GET_PLAYINFO_SUCC
表示请求成功。// 停止播放[_txVodPlayer stopPlay];[_txVodPlayer removeVideoWidget]; // 记得销毁 view 控件
// 开始播放[_txVodPlayer startVodPlay:url];
// 暂停播放[_txVodPlayer pause];
// 恢复播放[_txVodPlayer resume];
// 结束播放[_txVodPlayer stopPlay];
int time = 600; // int类型时,单位为 秒// 调整进度[_txVodPlayer seek:time];
float time = 600; // float 类型时单位为 秒// 调整进度[_txVodPlayer seek:time accurateSeek:YES]; // 精准 seek[_txVodPlayer seek:time accurateSeek:NO]; // 非精准 seek
long long pdtTimeMs = 600; // 单位为 毫秒[_txVodPlayer seekToPdtTime:time];
float startTimeInSecond = 60; // 单位:秒[_txVodPlayer setStartTime:startTimeInSecond]; // 设置开始播放时间[_txVodPlayer startVodPlay:url];
可选值 | 含义 |
RENDER_MODE_FILL_SCREEN | 将图像等比例铺满整个屏幕,多余部分裁剪掉,此模式下画面不会留黑边,但可能因为部分区域被裁剪而显示不全。 |
RENDER_MODE_FILL_EDGE | 将图像等比例缩放,适配最长边,缩放后的宽和高都不会超过显示区域,居中显示,画面可能会留有黑边。 |
可选值 | 含义 |
HOME_ORIENTATION_RIGHT | home 在右边 |
HOME_ORIENTATION_DOWN | home 在下面 |
HOME_ORIENTATION_LEFT | home 在左边 |
HOME_ORIENTATION_UP | home 在上面 |
setRate
设置点播播放速率来完成,支持快速与慢速播放,如0.5X、1.0X、1.2X、2X等。// 设置1.2倍速播放[_txVodPlayer setRate:1.2];// 开始播放[_txVodPlayer startVodPlay:url];
// 设置循环播放[_txVodPlayer setLoop:true];// 获取当前循环播放状态[_txVodPlayer loop];
// 设置静音,true 表示开启静音, false 表示关闭静音[_txVodPlayer setMute:true];
autoPlay
为 NO,此时播放器会正常加载,但视频不会立刻开始播放。NSMutableDictionary<NSString *, NSString *> *httpHeader = [[NSMutableDictionary alloc] init];[httpHeader setObject:@"${Referer Content}" forKey:@"Referer"];[_config setHeaders:httpHeader];[_txVodPlayer setConfig:_config];
[_txVodPlayer stopPlay];_txVodPlayer.enableHWAcceleration = YES;[_txVodPlayer startVodPlay:_flvUrl type:_type];
NSArray *bitrates = [_txVodPlayer supportedBitrates]; //获取多码率数组// TXBitrateItem 类字段含义:index-码率下标;width-视频宽;height-视频高;birate-视频码率TXBitrateItem *item = [bitrates objectAtIndex:i];[_txVodPlayer setBitrateIndex:item.index]; // 切换码率到想要的清晰度// 获取当前播放的码率下标,返回值 -1000 为默认值,表示没有设置过码率标;返回值 -1 表示开启了自适应码流int index = [_txVodPlayer bitrateIndex];
-[TXVodPlayer setBitrateIndex:]
切换码率。切换过程中,会重新拉取另一条流的数据,因此会有稍许卡顿。SDK 针对腾讯云的多码率文件做过优化,可以做到切换无卡顿。[_txVodPlayer setBitrateIndex:-1]; //index 参数传入-1
-[TXVodPlayer setBitrateIndex:]
切换其它码率,切换后码流自适应也随之关闭。TXVodPlayConfig *_config = [[TXVodPlayConfig alloc]init];// 设为YES,在IDR对齐时可平滑切换码率, 设为NO时,可提高多码率地址打开速度[_config setSmoothSwitchBitrate:YES];[_txVodPlayer setConfig:_config];
-(void) onPlayEvent:(TXVodPlayer *)player event:(int)EvtID withParam:(NSDictionary*)param {if (EvtID == PLAY_EVT_PLAY_PROGRESS) {// 加载进度, 单位是秒, 小数部分为毫秒float playable = [param[EVT_PLAYABLE_DURATION] floatValue];[_loadProgressBar setValue:playable];// 播放进度, 单位是秒, 小数部分为毫秒float progress = [param[EVT_PLAY_PROGRESS] floatValue];[_seekProgressBar setValue:progress];// 视频总长, 单位是秒, 小数部分为毫秒float duration = [param[EVT_PLAY_DURATION] floatValue];// 可以用于设置时长显示等等// 获取 PDT 时间,播放器高级版 11.6 版本开始支持long long pdt_time_ms = [param[VOD_PLAY_EVENT_PLAY_PDT_TIME_MS] longLongValue];}}
onNetStatus
的NET_SPEED
获取当前网速。具体使用方法见 状态反馈(onNetStatus)。PLAY_EVT_PLAY_LOADING
事件后,显示当前网速。PLAY_EVT_VOD_LOADING_END
事件后,对显示当前网速的 view 进行隐藏。-[TXVodPlayer width]
和-[TXVodPlayer height]
获取当前宽高。TXVodPlayConfig *_config = [[TXVodPlayConfig alloc]init];[_config setMaxBufferSize:10]; // 播放时最大缓冲大小。单位:MB[_txVodPlayer setConfig:_config]; // 把config 传给 _txVodPlayer
//设置播放引擎的全局缓存目录NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);NSString *documentsDirectory = [paths objectAtIndex:0];NSString *preloadDataPath = [documentsDirectory stringByAppendingPathComponent:@"/preload"];if (![[NSFileManager defaultManager] fileExistsAtPath:preloadDataPath]) {[[NSFileManager defaultManager] createDirectoryAtPath:preloadDataPathwithIntermediateDirectories:NOattributes:nilerror:&error];[TXPlayerGlobalSetting setCacheFolderPath:preloadDataPath];//设置播放引擎缓存大小[TXPlayerGlobalSetting setMaxCacheSize:200];// 开始播放[_txVodPlayer startVodPlay:url];
(1)亮屏(禁止灭屏)// 启动播放(startVodPlay / startPlayDrm / startVodPlayWithParams)// 恢复播放(resume)[[UIApplication sharedApplication] setIdleTimerDisabled:YES];(2)灭屏(恢复灭屏)// 停止(stopPlay)// 暂停(pause)[[UIApplication sharedApplication] setIdleTimerDisabled:NO];
TXPlayerAuthParams *p = [TXPlayerAuthParams new];p.appId = ${appId}; // 腾讯云账户的 appIdp.fileId = @"${fieId}"; // DRM 加密视频的 fileIdp.sign = @"${psgin}"; // 加密视频的播放器签名[_txVodPlayer startVodPlayWithParams:p];
// 通过 TXVodPlayer#startPlayDrm 接口播放// @param certificateUrl 证书提供商url// @param licenseUrl 解密的key url// @param videoUrl 待播放视频的Url地址TXPlayerDrmBuilder *builder = [[TXPlayerDrmBuilder alloc] initWithDeviceCertificateUrl:@"${certificateUrl}"licenseUrl:@"${licenseUrl}" videoUrl:@"${videoUrl}"];[_txVodPlayer startPlayDrm:builder];
startVodPlay
之前添加字幕和配置字幕样式,在收到 PLAY_EVT_VOD_PLAY_PREPARED
事件后,调用 selectTrack 选择字幕。 添加字幕后,并不会主动加载字幕, 调用 selectTrack
后,才会加载字幕,字幕选择成功会有VOD_PLAY_EVT_SELECT_TRACK_COMPLETE
事件回调。// 传入 字幕url, 字幕名称, 字幕类型,建议在启动播放前添加[_txVodPlayer addSubtitleSource:@"https://mediacloud-76607.gzc.vod.tencent-cloud.com/DemoResource/subtitleVTT.vtt" name:@"subtitleName"mimeType:TX_VOD_PLAYER_MIMETYPE_TEXT_VTT];
// 开始播放视频后,选中添加的外挂字幕,请在收到VOD_PLAY_EVT_SELECT_TRACK_COMPLETE 事件后调用
NSArray<TXTrackInfo *> *subtitlesArray = [_txVodPlayer getSubtitleTrackInfo];for (int i = 0; i < subtitlesArray.count; i++) {TXTrackInfo *info = subtitlesArray[i];if (info.trackIndex == 0) {[_txVodPlayer selectTrack:info.trackIndex]; // 选中字幕} else {// 其它字幕不需要的话, 进行deselectTrack[_txVodPlayer deselectTrack:info.trackIndex];}}// 监听轨道切换消息- (void)onPlayEvent:(TXVodPlayer *)player event:(int)EvtID withParam:(NSDictionary *)param {if (EvtID == VOD_PLAY_EVT_SELECT_TRACK_COMPLETE) {int trackIndex = [(NSNumber *)[param valueForKey:EVT_KEY_SELECT_TRACK_INDEX] intValue];int errorCode = [(NSNumber *)[param valueForKey:EVT_KEY_SELECT_TRACK_ERROR_CODE] intValue];NSLog(@"receive VOD_PLAY_EVT_SELECT_TRACK_COMPLETE, trackIndex=%d , errorCode=%d", trackIndex,errorCode);}}
// 详细参数配置请参考 API 文档TXPlayerSubtitleRenderModel *model = [[TXPlayerSubtitleRenderModel alloc] init];model.canvasWidth = 1920; // 字幕渲染画布的宽model.canvasHeight = 1080; // 字幕渲染画布的高model.isBondFontStyle = NO; // 设置字幕字体是否为粗体model.fontColor = 0xFF000000; // 设置字幕字体颜色,默认白色不透明[_txVodPlayer setSubtitleStyle:model];
NSArray<TXTrackInfo *> *soundTrackArray = [_txVodPlayer getAudioTrackInfo];for (int i = 0; i < soundTrackArray.count; i++) {TXTrackInfo *info = soundTrackArray[i];if (info.trackIndex == 0) {// 通过判断 trackIndex 或者 name 切换到需要的音轨[_txVodPlayer selectTrack:info.trackIndex];} else {// 其它字幕不需要的话, 进行 deselectTrack[_txVodPlayer deselectTrack:info.trackIndex];}}
// 播放视频 A: 如果将 isAutoPlay 设置为 YES, 那么 startVodPlay调用会立刻开始视频的加载和播放NSString* url_A = @"http://1252463788.vod2.myqcloud.com/xxxxx/v.f10.mp4";_player_A.isAutoPlay = YES;[_player_A startVodPlay:url_A];// 在播放视频 A 的同时,预加载视频 B,做法是将 isAutoPlay 设置为 NONSString* url_B = @"http://1252463788.vod2.myqcloud.com/xxxxx/v.f20.mp4";_player_B.isAutoPlay = NO;[_player_B startVodPlay:url_B];
-(void) onPlayEvent:(TXVodPlayer *)player event:(int)EvtID withParam:(NSDictionary*)param{// 在视频 A 播放结束的时候,直接启动视频 B 的播放,可以做到无缝切换if (EvtID == PLAY_EVT_PLAY_END) {[_player_A stopPlay];[_player_B setupVideoWidget:mVideoContainer insertIndex:0];[_player_B resume];}}
TXVodPlayConfig *_config = [[TXVodPlayConfig alloc]init];[_config setMaxPreloadSize:(2)];; // 预播放最大缓冲大小。单位:MB, 根据业务情况设置去节省流量[_txVodPlayer setConfig:_config]; // 把config 传给 _txVodPlayer
TXVodPlayConfig *_config = [[TXVodPlayConfig alloc]init];[_config setMaxBufferSize:10]; // 播放时最大缓冲大小。单位:MB[_txVodPlayer setConfig:_config]; // 把config 传给 _txVodPlayer
//设置播放引擎的全局缓存目录NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);NSString *documentsDirectory = [paths objectAtIndex:0];NSString *preloadDataPath = [documentsDirectory stringByAppendingPathComponent:@"/preload"];if (![[NSFileManager defaultManager] fileExistsAtPath:preloadDataPath]) {[[NSFileManager defaultManager] createDirectoryAtPath:preloadDataPathwithIntermediateDirectories:NOattributes:nilerror:&error]; //Create folder}[TXPlayerGlobalSetting setCacheFolderPath:preloadDataPath];//设置播放引擎缓存大小[TXPlayerGlobalSetting setMaxCacheSize:200];NSString *m3u8url = "http://****";int taskID = [[TXVodPreloadManager sharedManager] startPreload:m3u8urlpreloadSize:10preferredResolution:1920*1080delegate:self];//取消预下载[[TXVodPreloadManager sharedManager] stopPreload:taskID];
//设置播放引擎的全局缓存目录NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);NSString *documentsDirectory = [paths objectAtIndex:0];NSString *preloadDataPath = [documentsDirectory stringByAppendingPathComponent:@"/preload"];if (![[NSFileManager defaultManager] fileExistsAtPath:preloadDataPath]) {[[NSFileManager defaultManager] createDirectoryAtPath:preloadDataPathwithIntermediateDirectories:NOattributes:nilerror:&error]; //Create folder}[TXPlayerGlobalSetting setCacheFolderPath:preloadDataPath];//设置播放引擎缓存大小[TXPlayerGlobalSetting setMaxCacheSize:200];TXPlayerAuthParams *params = [[TXPlayerAuthParams alloc] init];params.appId = ${appId};params.fileId = @"${fileId}";params.sign = @"${psign}";// 注意: 耗时操作,请不要在主线程调用!在主线程调用将会抛出非法调用异常。int taskID = [[TXVodPreloadManager sharedManager] startPreload:paramspreloadSize:10preferredResolution:1920*1080delegate:self]; // TXVodPreloadManagerDelegate//取消预下载[[TXVodPreloadManager sharedManager] stopPreload:taskID];
TXVodDownloadManager
的视频下载方案实现 HLS 的离线播放。TXVodDownloadManager
暂不支持缓存 MP4 。NSString *cachesDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)firstObject];NSString downloadPath = [NSString stringWithFormat:@"%@/txdownload",cachesDir];[TXPlayerGlobalSetting setCacheFolderPath:downloadPath];
TXVodDownloadManager
被设计为单例,因此您不能创建多个下载对象。用法如下:TXVodDownloadManager *downloader = [TXVodDownloadManager shareInstance];
NSDictionary *httpHeader = [[NSMutableDictionary alloc] init];[downloader setHeaders:httpHeader]; // 设置下载httpHeader
TXVodDownloadDataSource *source = [[TXVodDownloadDataSource alloc] init];source.appId = 1252463788;source.fileId = @"4564972819220421305";// // psign 即播放器签名,签名介绍和生成方式参见链接:https://www.tencentcloud.com/document/product/266/38099source.pSign = @"xxxxxxxxxx";// 指定下载清晰度// 可用枚举值有:240p:TXVodQuality240P, 360p:TXVodQuality360P, 480p:TXVodQuality480P, 540p:TXVodQuality540P, 720p:TXVodQuality720P,// 1080p:TXVodQuality1080P,2K:TXVodQuality2K,4K:TXVodQuality4K// quality参数可以自定义,取分辨率宽高最小值(如分辨率为1280*720, 期望下载此分辨率的流,quality传入 TXVodQuality720P)// 播放器 SDK 会选择小于或等于传入分辨率的流进行下载source.quality = TXVodQualityHD; // 高清// ** 注意如果是使用旧的v2协议下载,请通过TXVodDownloadDataSource中的 auth 属性来设置appId 和 fileId 这些参数 **// source.auth = auth; ** 默认无需设置 **[downloader startDownload:dataSource];
[downloader startDownloadUrl:@"" resolution:@921600 userName:@""];
downloader.delegate = self;
回调信息 | 含义 |
-[TXVodDownloadDelegate onDownloadStart:] | 任务开始,表示 SDK 已经开始下载 |
-[TXVodDownloadDelegate onDownloadProgress:] | 任务进度,下载过程中,SDK 会频繁回调此接口,您可以在这里更新进度显示 |
-[TXVodDownloadDelegate onDownloadStop:] | 任务停止,当您调用是stopDownload停止下载,收到此消息表示停止成功 |
-[TXVodDownloadDelegate onDownloadFinish:] | 下载完成,收到此回调表示已全部下载。此时下载文件可以给 TXVodPlayer 播放 |
-[TXVodDownloadDelegate onDownloadError:errorMsg:] | 下载错误,下载过程中遇到网络断开会回调此接口,同时下载任务停止。所有错误码请参考TXDownloadError |
错误码 | 数值 | 含义说明 |
TXDownloadSuccess | 0 | 下载成功。 |
TXDownloadAuthFaild | -5001 | 向云点播控制台请求视频信息失败,建议检查fileId、psign参数是否正确。 |
TXDownloadNoFile | -5003 | 无此清晰度文件。 |
TXDownloadFormatError | -5004 | 下载文件格式不支持。 |
TXDownloadDisconnet | -5005 | 网络断开,建议检查网络是否正常。 |
TXDownloadHlsKeyError | -5006 | 获取 HLS 解密 Key 失败。 |
TXDownloadPathError | -5007 | 下载目录访问失败,建议检查是否有访问下载目录的权限。 |
TXVodDownloadMediaInfo
对象,您可以访问 URL 或 dataSource 判断下载源,同时还可以获取到下载进度、文件大小等信息。-[TXVodDownloadManager stopDownload:]
方法,参数为 -[TXVodDownloadManager sartDownloadUrl:]
返回的对象。SDK 支持断点续传,当下载目录没有发生改变时,下次下载同一个文件时会从上次停止的地方重新开始。// getDownloadMediaInfoList 是耗时接口,请不要在主线程调用NSArray<TXVodDownloadMediaInfo *> *array = [[[TXVodDownloadManager shareInstance] getDownloadMediaInfoList] mutableCopy];// 获取默认“default”用户的下载列表for (TXVodDownloadMediaInfo *info in array) {if ([info.userName isEqualToString:@"default"]) {// 保存“default”用户的下载列表}}
-[TXVodDownloadManager getDownloadMediaInfo:]
获取某个 Fileid 相关下载信息,包括当前下载状态,获取当前下载进度,判断是否下载完成等,需要传入 AppID、 Fileid 和 qualityId。// 获取某个fileId相关下载信息TXVodDownloadMediaInfo *sourceMediaInfo = [[TXVodDownloadMediaInfo alloc] init];TXVodDownloadDataSource *dataSource = [[TXVodDownloadDataSource alloc] init];dataSource.appId = 1252463788;dataSource.fileId = @"4564972819220421305";dataSource.pSign = @"psignxxxx";dataSource.quality = TXVodQualityHD;sourceMediaInfo.dataSource = dataSource;TXVodDownloadMediaInfo *downlaodMediaInfo = [[TXVodDownloadManager shareInstance] getDownloadMediaInfo:sourceMediaInfo];// 获取下载文件总大小,单位:Byte,只针对 fileid 下载源有效。// 备注:总大小是指上传到腾讯云点播控制台的原始文件的大小,转自适应码流后的子流大小,暂时无法获取。downlaodMediaInfo.size; // 获取下载文件总大小downlaodMediaInfo.duration; // 获取总时长downlaodMediaInfo.playableDuration; // 获取已下载的可播放时长downlaodMediaInfo.progress; // 获取下载进度downlaodMediaInfo.playPath; // 获取离线播放路径,传给播放器即可离线播放downlaodMediaInfo.downloadState; // 获取下载状态,具体参考STATE_xxx常量[downlaodMediaInfo isDownloadFinished]; // 返回YES表示下载完成
// 获取某个fileId相关下载信息TXVodDownloadMediaInfo *sourceMediaInfo = [[TXVodDownloadMediaInfo alloc] init];mediaInfo.url = @"videoURL";TXVodDownloadMediaInfo *downlaodMediaInfo = [[TXVodDownloadManager shareInstance] getDownloadMediaInfo:sourceMediaInfo];
-[TXVodDownloadManager deleteDownloadFile:]
方法删除文件,以释放存储空间。NSArray<TXVodDownloadMediaInfo *> *mediaInfoList = [[TXVodDownloadManager shareInstance]getDownloadMediaInfoList];TXVodDownloadMediaInfo *mediaInfo = [mediaInfoList firstObject]; // 根据情况找到当前的 media 对象if (mediaInfo.downloadState == TXVodDownloadMediaInfoStateFinish) { // 判断是否下载完成[self.player startVodPlay:mediaInfo.playPath];}
TXPlayerAuthParams *p = [TXPlayerAuthParams new];p.appId = 1252463788; // 腾讯云账户的appIdp.fileId = @"4564972819220421305"; // 视频的fileId// psign 即播放器签名,签名介绍和生成方式参见链接:https://www.tencentcloud.com/document/product/266/38099p.sign = @"psignxxxxx"; // 播放器签名[_txVodPlayer startVodPlayWithParams:p];
TXVodPlayConfig *_config = [[TXVodPlayConfig alloc]init];[_config setEnableAccurateSeek:true]; // 设置是否精确 seek,默认 true[_config setMaxCacheItems:5]; // 设置缓存文件个数为5[_config setProgressInterval:200]; // 设置进度回调间隔,单位毫秒[_config setMaxBufferSize:50]; // 最大预加载大小,单位 MB[_txVodPlayer setConfig:_config]; // 把config 传给 _txVodPlayer
TXVodPlayConfig *_config = [[TXVodPlayConfig alloc]init];// 传入参数为视频宽和高的乘积(宽 * 高),可以自定义值传入[_config setPreferredResolution:720*1280];[_txVodPlayer setConfig:_config]; // 把config 传给 _txVodPlayer
TXVodPlayConfig *_config = [[TXVodPlayConfig alloc]init];[_config setMediaType:MEDIA_TYPE_FILE_VOD]; // 用于提升MP4启播速度// [_config setMediaType:MEDIA_TYPE_HLS_VOD]; // 用于提升HLS启播速度[_txVodPlayer setConfig:_config];
TXVodPlayConfig *_config = [[TXVodPlayConfig alloc]init];[_config setProgressInterval:200]; // 设置进度回调间隔,单位毫秒[_txVodPlayer setConfig:_config]; // 把config 传给 _txVodPlayer
// 步骤1: 打开 HttpDNS 解析开关[TXLiveBase enableCustomHttpDNS:YES];// 步骤2: 实现 HttpDNS 解析代理:TXLiveBaseDelegate#onCustomHttpDNS- (void)onCustomHttpDNS:(NSString *)hostName ipList:(NSMutableArray<NSString *> *)list {// 把 hostName 解析到 ip 地址后,保存到 iPList,返回给 SDK 内部。注意:这里不要进行耗时的异步操作。// MSDKDnsResolver 是腾讯云提供的 HTTPDNS SDK 解析接口NSArray *result = [[MSDKDns sharedInstance] WGGetHostByName:hostName];NSString *ip = nil;if (result && result.count > 1) {if (![result[1] isEqualToString:@"0"]) {ip = result[1];} else {ip = result[0];}}[list addObject:ip];}// 步骤3: 设置 HttpDNS 解析代理[TXLiveBase sharedInstance].delegate = self;
#import <CoreMedia/CoreMedia.h> // 引入头文件NSDictionary *dic = @{VOD_KEY_VIDEO_CODEC_TYPE:@(kCMVideoCodecType_HEVC), // 指定原始 HEVC 视频编码类型VOD_KEY_BACKUP_URL:@"${backupPlayUrl}"}; // 设置 H.264 格式等备选播放链接地址[_txVodPlayer setExtentOptionInfo:dic];// 设置原始 HEVC 播放链接[_txVodPlayer startVodPlay:@"${hevcPlayUrl}"];
TXVodPlayer#setAudioNormalization
设置音量均衡,响度范围:-70~0 (LUFS),同时支持自定义数值。/**可填预设值(相关类或文件:Android:TXVodConstants;iOS:TXVodPlayConfig.h)关:AUDIO_NORMALIZATION_OFF开:AUDIO_NORMALIZATION_STANDARD(标准)AUDIO_NORMALIZATION_LOW (低)AUDIO_NORMALIZATION_HIGH(高)可填自定义数值:从低到高,范围-70 - 0 LUFS*/[_txVodPlayer setAudioNormalization:AUDIO_NORMALIZATION_STANDARD]; //启动音量均衡[_txVodPlayer setAudioNormalization:AUDIO_NORMALIZATION_OFF]; //关闭音量均衡
//前置条件:设置播放器的全局缓存目录,此配置在项目中设置一次即可NSString *cachesDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject];NSString downloadPath = [NSString stringWithFormat:@"%@/txdownload",cachesDir];[TXPlayerGlobalSetting setCacheFolderPath:downloadPath];TXVodPlayConfig *_config = [[TXVodPlayConfig alloc]init];_config.encryptedMp4Level = MP4_ENCRYPTION_LEVEL_L2; // 设置使用mp4本地加密播放和存储[_txVodPlayer setConfig:_config];
事件 ID | 数值 | 含义说明 |
PLAY_EVT_PLAY_BEGIN | 2004 | 视频播放开始 |
PLAY_EVT_PLAY_PROGRESS | 2005 | 视频播放进度,会通知当前播放进度、加载进度和总体时长 |
PLAY_EVT_PLAY_LOADING | 2007 | 视频播放 loading,如果能够恢复,之后会有 LOADING_END 事件 |
PLAY_EVT_VOD_LOADING_END | 2014 | 视频播放 loading 结束,视频继续播放 |
VOD_PLAY_EVT_SEEK_COMPLETE | 2019 | Seek 完成,10.3版本开始支持 |
VOD_PLAY_EVT_LOOP_ONCE_COMPLETE | 6001 | 循环播放,一轮播放结束(10.8 版本开始支持) |
VOD_PLAY_EVT_HIT_CACHE | 2002 | 启播时命中缓存事件(11.2 版本开始支持) |
VOD_PLAY_EVT_VIDEO_SEI | 2030 | 收到 SEI 帧事件( 播放器高级版11.6 版本开始支持)。 |
VOD_PLAY_EVT_HEVC_DOWNGRADE_PLAYBACK | 2031 | 发生 HEVC 降级播放(播放器高级版12.0版本开始支持)。 |
VOD_PLAY_EVT_VOD_PLAY_FIRST_VIDEO_PACKET | 2017 | 播放器收到首帧数据包事件(12.0 版本开始支持)。 |
-(void) onPlayEvent:(TXVodPlayer *)player event:(int)EvtID withParam:(NSDictionary*)param { if (EvtID == VOD_PLAY_EVT_VIDEO_SEI) { int seiType = [param objectForKey:EVT_KEY_SEI_TYPE]; // the type of video SEI int seiSize = [param objectForKey:EVT_KEY_SEI_SIZE]; // the data size of video SEI NSData *seiData = [param objectForKey:EVT_KEY_SEI_DATA]; // the byte array data of video SEI } }
事件 ID | 数值 | 含义说明 |
PLAY_WARNING_VIDEO_DECODE_FAIL | 2101 | 当前视频帧解码失败 |
PLAY_WARNING_AUDIO_DECODE_FAIL | 2102 | 当前音频帧解码失败 |
PLAY_WARNING_RECONNECT | 2103 | 网络断连,已启动自动重连(重连超过三次就直接抛送 PLAY_ERR_NET_DISCONNECT 了) |
PLAY_WARNING_HW_ACCELERATION_FAIL | 2106 | 硬解启动失败,采用软解 |
事件 ID | 数值 | 含义说明 |
PLAY_EVT_VOD_PLAY_PREPARED | 2013 | 播放器已准备完成,可以播放。设置了 autoPlay 为 false 之后,需要在收到此事件后,调用 resume 才会开始播放 |
PLAY_EVT_RCV_FIRST_I_FRAME | 2003 | 网络接收到首个可渲染的视频数据包(IDR) |
事件 ID | 数值 | 含义说明 |
PLAY_EVT_CHANGE_RESOLUTION | 2009 | 视频分辨率改变 |
PLAY_EVT_CHANGE_ROATION | 2011 | MP4 视频旋转角度 |
事件 ID | 数值 | 含义说明 |
PLAY_EVT_GET_PLAYINFO_SUCC | 2010 | 成功获取播放文件信息 |
视频信息 | 含义说明 |
EVT_PLAY_COVER_URL | 视频封面地址 |
EVT_PLAY_URL | 视频播放地址 |
EVT_PLAY_DURATION | 视频时长 |
EVT_KEY_WATER_MARK_TEXT | 幽灵水印文本内容(11.6 版本开始支持) |
-(void) onPlayEvent:(TXVodPlayer *)player event:(int)EvtID withParam:(NSDictionary*)param{if (EvtID == PLAY_EVT_VOD_PLAY_PREPARED) {//收到播放器已经准备完成事件,此时可以调用pause、resume、getWidth、getSupportedBitrates 等接口} else if (EvtID == PLAY_EVT_PLAY_BEGIN) {// 收到开始播放事件} else if (EvtID == PLAY_EVT_PLAY_END) {// 收到开始结束事件}}
VOD_PLAY_EVT_GET_PLAYINFO_SUCC
事件后, 通过[param objectForKey:@"EVT_KEY_WATER_MARK_TEXT"]
获取。详细使用教程参见 超级播放器组件 > 幽灵水印。事件ID | 数值 | 含义说明 |
PLAY_ERR_NET_DISCONNECT | -2301 | 视频数据错误导致重试亦不能恢复正常播放。如:网络异常或下载数据错误,导致解封装超时或失败 |
PLAY_ERR_HLS_KEY | -2305 | HLS 解密 key 获取失败 |
VOD_PLAY_ERR_SYSTEM_PLAY_FAIL | -6004 | 系统播放器播放错误 |
VOD_PLAY_ERR_DECODE_VIDEO_FAIL | -6006 | 视频解码错误,视频格式不支持 |
VOD_PLAY_ERR_DECODE_AUDIO_FAIL | -6007 | 音频解码错误,音频格式不支持 |
VOD_PLAY_ERR_DECODE_SUBTITLE_FAIL | -6008 | 字幕解码错误 |
VOD_PLAY_ERR_RENDER_FAIL | -6009 | 视频渲染错误 |
VOD_PLAY_ERR_PROCESS_VIDEO_FAIL | -6010 | 视频后处理错误 |
VOD_PLAY_ERR_GET_PLAYINFO_FAIL | -2306 | 获取点播文件信息失败,建议检查AppId、FileId或Psign填写是否正确。 |
评估参数 | 含义说明 |
CPU_USAGE | 当前瞬时 CPU 使用率 |
VIDEO_WIDTH | 视频分辨率 - 宽 |
VIDEO_HEIGHT | 视频分辨率 - 高 |
NET_SPEED | 当前的网络数据接收速度,单位:KBps |
VIDEO_FPS | 当前流媒体的视频帧率 |
VIDEO_BITRATE | 当前流媒体的视频码率,单位 bps |
AUDIO_BITRATE | 当前流媒体的音频码率,单位 bps |
V_SUM_CACHE_SIZE | 缓冲区(jitterbuffer)大小,缓冲区当前长度为0,说明离卡顿就不远了 |
SERVER_IP | 连接的服务器 IP |
- (void)onNetStatus:(TXVodPlayer *)player withParam:(NSDictionary *)param {//获取当前CPU使用率float cpuUsage = [[param objectForKey:@"CPU_USAGE"] floatValue];//获取视频宽度int videoWidth = [[param objectForKey:@"VIDEO_WIDTH"] intValue];//获取视频高度int videoHeight = [[param objectForKey:@"VIDEO_HEIGHT"] intValue];//获取实时速率int speed = [[param objectForKey:@"NET_SPEED"] intValue];//获取当前流媒体的视频帧率int fps = [[param objectForKey:@"VIDEO_FPS"] intValue];//获取当前流媒体的视频码率,单位 kbpsint videoBitRate = [[param objectForKey:@"VIDEO_BITRATE"] intValue];//获取当前流媒体的音频码率,单位 kbpsint audioBitRate = [[param objectForKey:@"AUDIO_BITRATE"] intValue];//获取缓冲区(jitterbuffer)大小,缓冲区当前长度为0,说明离卡顿就不远了int jitterbuffer = [[param objectForKey:@"V_SUM_CACHE_SIZE"] intValue];//获取连接的服务器的IP地址NSString *ip = [param objectForKey:@"SERVER_IP"];}
TXVodPlayConfig *_config = [[TXVodPlayConfig alloc]init];[_config setMediaType:MEDIA_TYPE_HLS_LIVE]; // 指定HLS直播媒资类型[_txVodPlayer setConfig:_config];[_txVodPlayer startVodPlay:${YOUR_HSL_LIVE_URL}];
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback withOptions:AVAudioSessionCategoryOptionInterruptSpokenAudioAndMixWithOthers error:nil];[[AVAudioSession sharedInstance] setActive:YES error:nil];
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryAmbient withOptions:AVAudioSessionCategoryOptionMixWithOthers error:nil];[[AVAudioSession sharedInstance] setActive:NO withOptions:AVAudioSessionSetActiveOptionNotifyOthersOnDeactivation error:nil];
本页内容是否解决了您的问题?