學習libopus(1) Encoder編碼器

來源:互聯網
上載者:User

來自:http://www.opus-codec.org/docs/html_api-1.1.0/group__opus__encoder.html#gaefeb7dc1d6e3b59dea5ea674c86e9c18


詳細說明

此頁面描述了用於編碼的使用過程和功能。


因為Opus是狀態編解碼,進行編碼前,首先需要建立一個編碼器。你可以這樣做:


int error;
OpusEncoder *enc;
enc = opus_encoder_create(Fs, channels, application, &error);


從這起,enc就可以用來對音頻流進行編碼。這個編碼器不能同時對多個流進行編碼 (線程不安全)。同時,對多幀進行編碼時,編碼器不需要重複初始化。


調用opus_encoder_create()時,會建立記憶體空間,它也可以初始化預分配記憶體:


int size;
int error;
OpusEncoder *enc;
size = opus_encoder_get_size(channels);
enc = malloc(size);
error = opus_encoder_init(enc, Fs, channels, application);


opus_encoder_get_size()會返回編碼器所需的記憶體大小。請注意,這個大小可能在未來的版本中有所修改,所以盡量不要使用常量代替。


這個編碼器會分配到連續的記憶體塊中,可以通過淺拷貝擷取他(例如memcpy)


你可以通過opus_encoder_ctl()對編碼器的內部設定進行修改。這些設定預設使用推薦值。以下為最常見的修改項:


opus_encoder_ctl(enc, OPUS_SET_BITRATE(bitrate));//傳輸速率
opus_encoder_ctl(enc, OPUS_SET_COMPLEXITY(complexity));//複雜度
opus_encoder_ctl(enc, OPUS_SET_SIGNAL(signal_type));//訊號
在這裡
bitrate的單位是位元每秒(B / S)


complexity是一個值從1至10,其中1最低和10最高


signal_type要麼OPUS_AUTO(預設),OPUS_SIGNAL_VOICE或OPUS_SIGNAL_MUSIC


參看編碼器相關的CTL和通用的CTL可以知道完整的設定列表。大多數參數可以在流編碼時,進行設定或修改。


在調用opus_encode()或者opus_encode_float()時必須是一個完整的音頻資料(2.5,5,10,20,40或60毫秒):


len = opus_encode(enc, audio_frame, frame_size, packet, max_packet);
在這裡


audio_frame是opus_int16音頻資料(或是opus_encode_float())


frame_size是幀中的樣本的期間(每個通道)


packet是音頻資料需要寫入的位元組數組


max_packet是可寫在包的最大位元組數(4000位元組建議)。不要通過max_packet來控制VBR的位元速率,如果需要請使用OPUS_SET_BITRATE CTL。


opus_encode()和opus_encode_float()返回實際寫入到分組的位元組數。傳回值可以是負的,這表示發生了錯誤。如果傳回值是1位元組,則分組不需要被發送(DTX)。


當需要釋放編碼器時,可以通過:
opus_encoder_destroy(enc);


如果編碼器,用opus_encoder_init()建立,而不是opus_encoder_create(),則不執行任何操作,只需要釋放預先分配的記憶體,調用free(enc)


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.