HDR(High Dynamic Range,高动态范围 ) 视频,相比普通 SDR(Standard Dynamic Range)视频拥有更高的色深、更广的动态范围和更强的色彩表现力,使得画面更真实、更有层次,很直观的提升视频画质,从而有效提升人们的观影感受。本文为您介绍使用点播 SDK 时如何播放 HDR 视频。
TTVideoEngine
的 isSupportHDR
方法,检查设备是否支持 HDR。使用 DirectUrl 方式播放视频时,您需要提前判定视频是否是 HDR 源。代码示例如下所示。
/** DirectUrl 模式播放视频 @param url 播放地址 @param key 视频的缓存 key,推荐使用可以标记视频的唯一标识,例如 url 的md5值 @param isHDRUrl YES-HDR视频 */ - (void)playWithUrl:(NSString *)url key:(NSString *)key isHDRUrl:(BOOL)isHDRUrl { TTVideoEngineUrlSource *source = [[TTVideoEngineUrlSource alloc] initWithUrl:url cacheKey:key]; if (isHDRUrl && [self.videoEngine isSupportHDR]) { source.isHDRSource = YES; } [self.videoEngine ls_setDirectURLSource:source]; }
应用客户端需要从服务端请求 HDR 源。服务端需要在签发临时播放 Token 中设置 HDRDefinition
,具体请见以下文档:
参数 HDRDefinition
支持的取值为 all
、4k
、2k
、1080p
、720p
、480p
、360p
。其中:
HDRDefinition
为 all
时,请求全部 HDR + SDR 档位清晰度。HDRDefinition
为具体某一清晰度,例如 1080p
, 请求 1080p HDR + SDR 档位清晰度。如果 1080p 档位清晰度不存在,则返回全部 HDR 档位清晰度,您可根据返回的全部 HDR 档位自行处理。Resolution HDR 档位枚举如下表所示。
枚举值 | 对应分辨率 | 描述 |
---|---|---|
TTVideoEngineResolutionTypeHDR_360P | 360P | 标清 HDR |
TTVideoEngineResolutionTypeHDR_480P | 480P | 高清 HDR |
TTVideoEngineResolutionTypeHDR_720P | 720P | 超清 HDR |
TTVideoEngineResolutionTypeHDR_1080P | 1080P | 1080P HDR |
TTVideoEngineResolutionTypeHDR_2K | 2K | 2K HDR |
TTVideoEngineResolutionTypeHDR_4K | 4K | 4K HDR |
说明
详情请参见基础功能接入中获取清晰度部分。
通过 allSupportedResolutions
获取到所有 HDR+SDR 档位,实现的代码示例如下所示。
// 当 AppServer 增加 hdrDefinition参数,通过获取支持的清晰度包括 HDR+SDR, // 您根据自己的业务以及 UI 样式进行处理 NSArray<NSNumber *> *allSupportedResolutions = [engine supportedResolutionTypes];
获取所有档位后,通过 isHDRResolution
方法筛选出 HDR 档位,您可以根据自己业务需求进行页面布局使用。
/** 判断是否是 HDR 档位清晰度 @param resolutionType 清晰度 */ - (BOOL)isHDRResolution:(TTVideoEngineResolutionType)resolutionType { NSDictionary<NSString *, NSNumber *> *resolutionMapDic = [self.videoEngine resolutionMap]; for (NSString *key in resolutionMapDic.allKeys) { NSNumber *resolutionObj = [resolutionMapDic objectForKey:key]; if ([resolutionObj integerValue] == resolutionType && [[key lowercaseString] containsString:@"hdr"]) { return YES; } } return NO; }