记录下初始化方法,当时做的一些注释:
- (void)initCompressionSession{
if(compressionSession){
VTCompressionSessionCompleteFrames(compressionSession, kCMTimeInvalid);
VTCompressionSessionInvalidate(compressionSession);
CFRelease(compressionSession);
compressionSession = NULL;
}
OSStatus status = VTCompressionSessionCreate(NULL, _configuration.videoSize.width, _configuration.videoSize.height, kCMVideoCodecType_H264, NULL, NULL, NULL, VideoCompressonOutputCallback, (__bridge void *)self, &compressionSession);
if(status != noErr){
return;
}
/************************************视频会议客户端间视频交互*****************************************
*手机视频硬编码上传视频数据到html5视频会议客户端,html5视频会议客户端显示不了手机上传的视频画面而详释.
*为了html5视频会议客户端显示手机上传的视频画面,特选用BP-Baseline Profile且只支持CAVLC.BP-Baseline Profile选用CABAC导
*致接收端马赛克严重.
*
*BP-Baseline Profile:基本画质.支持 I/P 帧,只支持无交错(Progressive)和CAVLC.
*EP-Extended profile:进阶画质.支持 I/P/B/SP/SI 帧,只支持无交错(Progressive)和CAVLC.
*MP-Main profile:主流画质.提供 I/P/B 帧,支持无交错(Progressive)和交错(Interlaced),也支持CAVLC和CABAC.
*HP-High profile:高级画质.在main Profile的基础上增加了8x8内部预测、自定义量化、无损视频编码和更多的YUV格式.
*/
status = VTSessionSetProperty(compressionSession, kVTCompressionPropertyKey_MaxKeyFrameInterval,(__bridge CFTypeRef)@(_configuration.videoMaxKeyframeInterval));
status = VTSessionSetProperty(compressionSession, kVTCompressionPropertyKey_MaxKeyFrameIntervalDuration,(__bridge CFTypeRef)@(_configuration.videoMaxKeyframeInterval));
status = VTSessionSetProperty(compressionSession, kVTCompressionPropertyKey_AverageBitRate, (__bridge CFTypeRef)@(_configuration.videoBitRate));
NSArray *limit = @[@(_configuration.videoBitRate * 1.5/8),@(1)];
status = VTSessionSetProperty(compressionSession, kVTCompressionPropertyKey_DataRateLimits, (__bridge CFArrayRef)limit);
status = VTSessionSetProperty(compressionSession, kVTCompressionPropertyKey_ExpectedFrameRate, (__bridge CFTypeRef)@(_configuration.videoFrameRate));
status = VTSessionSetProperty(compressionSession, kVTCompressionPropertyKey_RealTime, kCFBooleanFalse);
//status = VTSessionSetProperty(compressionSession, kVTCompressionPropertyKey_ProfileLevel, kVTProfileLevel_H264_Main_AutoLevel);
status = VTSessionSetProperty(compressionSession, kVTCompressionPropertyKey_ProfileLevel, kVTProfileLevel_H264_Baseline_AutoLevel);
status = VTSessionSetProperty(compressionSession, kVTCompressionPropertyKey_AllowFrameReordering, kCFBooleanFalse);
//status =