2017-03-23 13 views
1

私は現在、h.264エンコーディングに対応するためにVideotoolboxを使用しています。Videotoolboxのプロパティを調整するには?

そして私は、サンプルコードを発見し、それが正常に動作します:

#define VTB_HEIGHT 480 
    #define VTB_WIDTH 640 

    int bitRate = VTB_WIDTH * VTB_HEIGHT * 3 * 4 * 8; 

    CFNumberRef bitRateRef = CFNumberCreate(kCFAllocatorDefault, 
              kCFNumberSInt32Type, 
              &bitRate); 

    VTSessionSetProperty(encodingSession, 
         kVTCompressionPropertyKey_AverageBitRate, 
         bitRateRef); 

    CFRelease(bitRateRef); 


    int bitRateLimit = bitRate/8; 

    CFNumberRef bitRateLimitRef = CFNumberCreate(kCFAllocatorDefault, 
               kCFNumberSInt32Type, 
               &bitRateLimit); 

    VTSessionSetProperty(encodingSession, 
         kVTCompressionPropertyKey_DataRateLimits, 
         bitRateLimitRef); 

    CFRelease(bitRateLimitRef); 

しかし、これらの2行は、私は理解していない:

はそれらを使用する正しい方法は何だ
int bitRate = VTB_WIDTH * VTB_HEIGHT * 3 * 4 * 8; 

int bitRateLimit = bitRate/8; 

誰かが私に教えてくれることを願っています。

ありがとうございました! kvtcompressionpropertykey_dataratelimitsの文書から

答えて

0

は言う:

各ハードリミットはバイト単位のデータサイズと数秒で 期間によって記述されている...

だから、あなたがこのプロパティを設定する必要があります2つのパラメータ(バイト単位のデータサイズ、秒単位の継続時間)

int bitRate = VTB_WIDTH * VTB_HEIGHT * 3 * 4 * 8; 
int bitRateLimit = bitRate/8; 

// that's say we set data in byte/second 
CFNumberRef byteNum = CFNumberCreate(kCFAllocatorDefault, kCFNumberSInt32Type, &bitRateLimit); 
int second = 1; 
CFNumberRef secNum = CFNumberCreate(kCFAllocatorDefault, kCFNumberSInt32Type, &second); 

// add parameters into a array 
const void* numbers[2] = {byteNum, secNum}; 
CFArrayRef dataRateLimits = CFArrayCreate(NULL, numbers, 2, &kCFTypeArrayCallBacks); 

// then set property with array 
status = VTSessionSetProperty(compressionSession, kVTCompressionPropertyKey_DataRateLimits, arrayValues); 
+0

Appleは[kVTCompressionPropertyKey_Data RateLimits](https://developer.apple.com/library/content/qa/qa1958/_index.html#//apple_ref/doc/uid/DTS40017665)プロパティが最近使用されました。 –

関連する問題