Я работаю на перемещение нашего приложения с некоторым собственным кодека IOS родного кодером h264 (VideoToolbox.framework) и есть вопрос:Как установить битрейт для VTCompressionSession
Есть ли существует способ установить битрейт или DataRate для сжатого данные ?
Вот как я создание датчика сессии:
CFMutableDictionaryRef sessionAttributes = CFDictionaryCreateMutable(
NULL,
0,
&kCFTypeDictionaryKeyCallBacks,
&kCFTypeDictionaryValueCallBacks);
//** bitrate
int fixedBitrate = bitrate; // 2000 * 1024 -> assume 2 Mbits/s
CFNumberRef bitrateNum = CFNumberCreate(NULL, kCFNumberSInt32Type, &fixedBitrate);
CFDictionarySetValue(sessionAttributes, kVTCompressionPropertyKey_AverageBitRate, bitrateNum);
CFRelease(bitrateNum);
CFDictionarySetValue(sessionAttributes, kVTCompressionPropertyKey_ProfileLevel, kVTProfileLevel_H264_High_AutoLevel);
CFDictionarySetValue(sessionAttributes, kVTCompressionPropertyKey_RealTime, kCFBooleanTrue);
OSStatus error = VTCompressionSessionCreate(kCFAllocatorDefault,
width,
height,
kCMVideoCodecType_H264,
sessionAttributes,
NULL,
kCFAllocatorDefault,
&EncoderCallback,
this, *outputCallbackRefCon,
&m_EncoderSession);
Я много играл с различными значениями kVTCompressionPropertyKey_AverageBitRate
, но это не делает ничего для меня, я также попытался kVTCompressionPropertyKey_DataRateLimits
с разными значениями, но и без каких-либо удачи.
Любые идеи, предложения приветствуются
У вас возникли вопросы? У меня такая же проблема. Я использую формат кодирования H264 VTCompressoinSession, и я обнаружил, что его качество очень плохо, когда я его воспроизвожу. –
Да, все хорошо, принятый ответ помог мне. – sage444
Да, я установил 'VTSessionSetProperty (session, kVTCompressionPropertyKey_DataRateLimits, (__bridge CFArrayRef) @ [800 * 1024/8, 1]);', и он работает хорошо. –