Opus_低延遲音頻編解碼器API手冊中文翻譯

上傳人:文*** 文檔編號:21556868 上傳時間:2021-05-04 格式:DOCX 頁數:76 大?。?53.03KB
收藏 版權申訴 舉報 下載
Opus_低延遲音頻編解碼器API手冊中文翻譯_第1頁
第1頁 / 共76頁
Opus_低延遲音頻編解碼器API手冊中文翻譯_第2頁
第2頁 / 共76頁
Opus_低延遲音頻編解碼器API手冊中文翻譯_第3頁
第3頁 / 共76頁

下載文檔到電腦,查找使用更方便

10 積分

下載資源

還剩頁未讀,繼續(xù)閱讀

資源描述:

《Opus_低延遲音頻編解碼器API手冊中文翻譯》由會員分享,可在線閱讀,更多相關《Opus_低延遲音頻編解碼器API手冊中文翻譯(76頁珍藏版)》請在裝配圖網上搜索。

1、 Opus: IETF低延遲音頻編解碼器 :API 和操作手冊 Opus 簡介 Opus編解碼器是專門設計用于互聯網的交互式語音和音頻傳輸。 它是由 IETF 的編解碼器工作組設計的,合并了 Skype 的 SILK和 Xiph. Org的 CELT技術。 Opus 編解碼器的設計目的是處理廣泛的交互式音頻應用程序 ,包括 IP 語音 , 視頻 ,游戲內聊天 ,甚至遠程現場音樂表演。它可以適用于從低碼率窄帶語音到非 常高質量的立體聲音樂。它的主要特點

2、是 : 采樣率從 8 至 48 kHz 比特率從 6kb/s 到 510kb/s 對固定碼率 (CBR)和可變碼率 (VBR)都能支持 從窄帶到寬帶的音頻帶寬 支持語音和音樂 支持單聲道和立體聲 支持多通道 ( 最多 255 通道 ) 幀規(guī)格從 2.5 毫秒到 60 毫秒 良好的損失魯棒性和包丟失隱藏性 (PLC)(注:應是指丟包也不容易被發(fā)現) 浮點和定點執(zhí)行 文檔包括 : Opus Encoder Opus Decoder Repacketizer Opus Multistream A

3、PI Opus library information functions Opus Custom Opus Encod er 本節(jié)描述了 Opus 編碼器 OpusEncoder的過程和函數 類型定義 typedef  struct  OpusEncoder  OpusEncoder Opus encoder  狀態(tài) . 函數

4、 int opus_encoder_get_size (int channels) 獲得 OpusEncoder結構的大小 OpusEncoder opus_encoder_create (opus_int32 Fs, int channels, int application, int * *error) 分配和初始化 encoder 狀態(tài) . int opus_encoder_init (OpusEncoder *st, opus_int32 Fs, int channels, int application)

5、 初始化一個以前分配的編碼器狀態(tài)。所指向的內存圣必須至少是 opus_encoder_get_size() 返回的大小 . opus_int32 opus_encode (OpusEncoder *st, const opus_int16 *pcm, int frame_size, unsigned char *data, opus_int32 max_data_bytes) 對一個 Opus 幀進行編碼 . opus_int32 opus_encode_float (OpusEncoder *st, const float *pcm,

6、 int frame_size, unsigned char *data, opus_int32 max_data_bytes) 根據浮點輸入對一個 Opus 幀進行編碼 . void opus_encoder_destroy (OpusEncoder *st) 釋放一個根據 opus_encoder_create() 已分配的 OpusEncoder 對象。 int opus_encoder_ctl (OpusEncoder *st, int request,...) 向一個 Opus 編碼器執(zhí)行一個 CTL 函數 .

7、 詳細描述 本節(jié)描述了用于編碼 Opus 的過程和函數。 既然 Opus 是一個有狀態(tài)的編解碼器,編碼過程始于創(chuàng)建一個編碼器狀態(tài), 用以下方法做到: int error; OpusEncoder *enc; enc = opus_encoder_create (Fs, channels, application, &error); 從這一點上 , enc 可以用于編碼音頻流。 一個編碼器狀態(tài)在同一時間不得用于 多于一個音頻流。同樣 ,編碼器狀態(tài)不能對于每幀重新初始化。 當 opus_encoder_crea

8、te() 為狀態(tài)分配內存時,它也可以初始化預分配的內存: 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() 返回編碼器狀態(tài)要求的大小。 注意 ,這段代碼的未來版本 可能改變大小 ,所以沒有 assuptions 應該對它做出。

9、 編碼器狀態(tài)在內存中總是連續(xù) ,復制它只要一個淺拷貝就足夠了。 使用 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)); 在這里:

10、 bitrate  (比特率)的單位是比特  / 秒 (b / s) complexity  (復雜性)是一個值從  1 到  10,1  最低, 10  最高,值越大越 復雜 signal_type (信號的類型)包括 OPUS_AUTO (缺省 ), OPUS_SIGNAL_VOICE, or OPUS_SIGNAL_MUSIC。 看 Encoder related CTLs 和 Generic CTLs可以獲得可設置和查詢的參數詳細清單。在一個音頻流處理過程中,大

11、多數參數可以設置或修改。 為了對一個幀進行編碼, 必須正確地用音頻數據的幀 (2.5, 5, 10, 20, 40 或 60 毫 秒 )來調用 opus_encode() 或 opus_encode_float() 函數。 len = opus_encode(enc, audio_frame, frame_size, packet, max_packet); 在這里: audio_frame ( 音頻幀)是 opus_int16( 或用于 opus_encode_float() 的浮點 ) 格 式的音頻數據 frame_s

12、ize  (幀大?。┦菢颖局袔淖畲髷?  ( 每個通道  ) packet (包)是寫成壓縮數據的字節(jié)數組  , max_packet 是可以寫入包的字節(jié)數的最大值推薦  (4000  字節(jié) ) 。不要使用 max_packet 控制  VBR的目標比特率  , 而應該用  OPUS_SET_BITRATECTL。 opus_encode() 和 opus_encode_float() 返回實際寫入包的字節(jié)數。返回值可以是 負數 ,這表明一個

13、錯誤已經發(fā)生。 如果返回值是 1 個字節(jié) ,那么包不需要傳播 (DTX)。 一旦一個編碼器狀態(tài)已不再需要,可以用以下方式解構: opus_encoder_destroy (enc); 如果編碼器是用 opus_encoder_init() 創(chuàng)建的,而不是使用 opus_encoder_create() 函數,那么不需要采取行動,要求從潛在的釋放為它手動分配的內存 (上述例子是調用 free(enc))中分離。 類型定義文檔 typedef struct OpusEncoder OpusEncoder Opus編碼器狀態(tài)

14、。 這包含了一個 Opus編碼器的完整狀態(tài)。它是位置獨立的,并且可以自由復制。 函數文檔 opus_int32 opus_encode ( OpusEncoder * const opus_int16 * pcm, int frame_size, unsigned char * data, opus_int32 max_data_bytes  st, ) 對一個 Opus 幀進行編碼。 參數: [in] st OpusEncoder*:編碼器狀態(tài) [i

15、n] pcmopus_int16*: 輸 入 信 號 ( 如 果 是 2 通 道 有 交 叉 ). 長 度 是 frame_size*channels*sizeof(opus_int16) [in] frame_size int: 輸入信號的每通道樣本數 . 這必須是編碼器采樣率的 Opus 幀大小。比如,48 kHz 下允許值有 120, 240, 480, 960, 1920, 和 2880。少于 10 毫秒的采樣( 48 kHz 有 480 個樣本 ),將阻止編碼器使用 LPC或混合模式。 [out] data unsigned char*: 輸出負

16、載。必須包含至少 max_data_bytes  的 容量。 [in] max_data_bytes opus_int32: 為輸出負載所分配的內存大小。 可以用于限制 固 定 比 特 率 的 最 大 上 限 , 但 不 能 用作 唯 一 的 比特 率限 制 ,可 以用 OPUS_SET_BITRATE來控制比特率。 返回值:成功,是被編碼包的長度(字節(jié)數) ,失敗,一個負的錯誤代碼 opus_int32 opus_encode_float  (  Op

17、usEncoder *  st, const float *  pcm, int frame_size, unsigned char * data, opus_int32 max_data_bytes ) 根據浮點輸入對一個 Opus 幀進行編碼 . 參數: [in] st OpusEncoder*:編碼器狀態(tài) [in] pcmfloat*: 浮點格式的輸入 (如果是 2 通道有交叉 ),正常范圍在 +/-1.0 之 間 . 超過該范圍的采樣也是支持的,但它將被解碼器用整型 API截

18、取,并且只能在 知 道 遠 端 支 持 擴 展 的 動 態(tài) 范 圍 的 情 況 下 使 用 。 長 度 是 frame_size*channels*sizeof(float) [in] frame_size int: 輸入信號的每通道樣本數 . 這必須是編碼器采樣率的 Opus 幀大小。比如, 48 kHz 下允許值有 120, 240, 480, 960, 1920, 和 2880。 少于 10 毫秒的采樣( 48 kHz 有 480 個樣本 ),將阻止編碼器使用 LPC或混合模式。 [out] data unsigned char*:輸出負

19、載。必須包含至少 max_data_bytes 的 容量。 [in] max_data_bytes opus_int32: 為輸出負載所分配的內存大小。 可以用于限制 固 定 比 特 率 的 最 大 上 限 , 但 不 能 用作 唯 一 的 比特 率限 制 ,可 以用 OPUS_SET_BITRATE來控制比特率。 . 返回值: 成功,是被編碼包的長度(字節(jié)數) ,失敗,一個負的錯誤代碼。 OpusEncoder* opus_encoder_create ( opus_int32 Fs, int channels, int applicatio

20、n, int * error ) 分配和初始化一個編碼器狀態(tài)。 包括三種編碼模式: OPUS_APPLICATION_VOIP:在給定比特率條件下為聲音信號提供最高質量, 它通過高通濾波和強調共振峰和諧波增強了輸入信號。 它包括帶內前向錯誤檢查 以預防包丟失。典型的 VOIP 應用程序使用這種模式。由于進行了增強,即使是 高比特率的情況下,輸出的聲音與輸入相比,聽起來可能不一樣。 OPUS_APPLICATION_AUDIO:對大多數非語音信號,如音樂,在給定比特率 條件下提供了最高的質量。使用這種模式的場合包括音樂、混音 (音樂 /

21、 聲音 ),廣 播 ,和需要不到 15 毫秒的信號延遲的其他應用。 OPUS_APPLICATION_RESTRICTED_LOWDELAY:配置低延遲模式將為減少延遲禁用語音優(yōu)化模式。 這種模式只能在剛初始化或剛重設編碼器的情況下使用, 因為在這些情況下編解碼器的延遲被修改了。 (當心?。┊斦{用者知道語音優(yōu)化模式不再需要時,配置低延遲模式是有用 的。 參數: [in] Fs opus_int32: 輸入信號的采樣率 (Hz),必須是 8000、12000、 16000、 24000、或 48000。 [in] chann

22、els int: 輸入信號的通道數 (1 or 2) 。 [in] application int: 編 碼 模 式 (OPUS_APPLICATION_VOIP/OPUS_APPLICATION_AUDIO/OPUS_APPLICATION_RESTRI CTED_LOWDELAY) [out] error int*: 錯誤代碼 注意:無論選擇什么樣的采樣率和通道數 , 如果選擇的比特率太低, Opus 編碼器可以切換到一個較低的音頻帶寬或通道數。這也意味著總是使用 48 kHz 立體聲輸入和讓編碼器優(yōu)化編碼是安全的。 int opu

23、s_encoder_ctl ( OpusEncoder * st, int request, ... ) 向一個 Opus 編碼器執(zhí)行一個 CTL 函數 . 一般其請求和后續(xù)的參數是由一個提供便利的宏來產生的。 參數 : st OpusEncoder*: 編碼器狀態(tài) request int :這個及所有其他參數應被 1 個在 Generic CTLs或 Encoder related CTLs所提供便利的宏來替代 參見 : Generic CTLs Encoder related CTLs void

24、opus_encoder_destroy ( OpusEncoder * st ) Frees an OpusEncoder allocated by opus_encoder_create(). 釋放一個根據  opus_encoder_create() 已分配的  OpusEncoder  對象。 參數 : [in]  st  OpusEncoder*:  用于釋放的編碼器狀態(tài)。 int opus_encoder_get_size ( int channels ) 獲得 Opu

25、sEncoder 結構的大小。 參數 : [in] channels int: 通道數,必須是 1 或 2. 返回 : 字節(jié)數的大小 . int opus_encoder_init ( OpusEncoder * st, opus_int32 Fs, int channels, int application ) 初始化一個以 前分配的 編碼器狀態(tài)。 狀態(tài)所指向的內存必 須至少 是 opus_encoder_get_size()返回的大小 . 在這里,應用程序不要用系統(tǒng)自動分配內存,而要

26、準備用自己的分配器。 參見 : opus_encoder_create(),opus_encoder_get_size()。為重設一個以前初始化的狀態(tài),使用 OPUS_RESET_STATE CTL. 參數 : [in] [in]  st OpusEncoder*: 編碼器狀態(tài) Fs opus_int32: 輸入信號的采樣率  (Hz),必須是  8000、12000、 16000、24000、或 48000。 [in] channels int: 輸入信號的通道數 (

27、1 or 2) [in] application int: 編 碼 模 式 (OPUS_APPLICATION_VOIP/OPUS_APPLICATION_AUDIO/OPUS_APPLICATION_RESTRI CTED_LOWDELAY) 返回值 : 成功, OPUS_OK,失敗,錯誤代碼。 Opus Decod er 本節(jié)描述了 Opus 解碼器 OpusDecoder的過程和函數 類型定義 typedef struct OpusDecoder OpusDecode

28、r Opus 解碼器狀態(tài) . 函數 int opus_decoder_get_size (int channels) 獲得 OpusDecoder 結構的大小 . OpusDecoder * opus_decoder_create (opus_int32 Fs, int channels, int *error) 分配和初始化解碼器狀態(tài) . int opus_decoder_init (OpusDecoder *st, opus_int32 Fs, int channels) 初始化以前分配的解碼器狀態(tài)

29、. int opus_decode (OpusDecoder *st, const unsigned char *data, opus_int32 len, opus_int16 *pcm, int frame_size, int decode_fec) 解碼一個 Opus 包 . int opus_decode_float (OpusDecoder *st, const unsigned char *data, opus_int32 len, float *pcm, int frame_size, int decode_fec)

30、 解碼一個浮點輸出的 Opus 包, . int opus_decoder_ctl (OpusDecoder *st, int request,...) 向一個 Opus 解碼器執(zhí)行 CTL 函數。 void opus_decoder_destroy (OpusDecoder *st) 釋放通過 opus_decoder_create() .分配過的 OpusDecoder。 int opus_packet_parse (const unsigned char *data, opus_int32 len, u

31、nsigned char *out_toc, const unsigned char *frames[48], short size[48], int *payload_offset) 將一個 opus 包解析成 1 個或多個幀 . int opus_packet_get_bandwidth (const unsigned char *data) 獲得一個 Opus 包的帶寬 . int opus_packet_get_samples_per_frame (const u

32、nsigned char *data, opus_int32 Fs) 獲得 Opus 包每幀的樣本數。 int opus_packet_get_nb_channels (const unsigned char *data) 獲得 Opus 包的通道數。 int opus_packet_get_nb_frames (const unsigned char packet[], opus_int32 len) 獲得 Opus 包所有幀的數量 . int opus_packet_ge

33、t_nb_samples (const unsigned char packet[], opus_int32 len, opus_int32 Fs) 獲得 Opus 包的樣本數。 int opus_decoder_get_nb_samples (const OpusDecoder *dec, const unsigned char packet[], opus_int32 len) 獲得 Opus 包的樣本數。 詳細描述 本節(jié)描述了用于解碼 Opus 的過程和方法 .

34、 與編碼相似,解碼進程也是開始于創(chuàng)建一個解碼器狀態(tài)。用以下方法做 到: int error; OpusDecoder *dec; dec = opus_decoder_create(Fs, channels, &error); 在這里: Fs 是采樣率,必須是 8000, 12000, 16000, 24000, 或 48000 channels 是通道數 (1 或 2) error 將 保 存 出 錯 情 況 下 的 錯 誤 代 碼 ( 或 成 功 狀 態(tài) 下 的 OPUS_OK ) 返回值是一個新創(chuàng)建的用于解碼的解碼器狀態(tài)

35、 當 opus_decoder_create() 為狀態(tài)分配內存時 , 它也可以初始化預分配的內存: int size; int error; OpusDecoder *dec; size = opus_decoder_get_size(channels); dec = malloc(size); error = opus_decoder_init(dec, Fs, channels); opus_decoder_get_size()返回解碼器狀態(tài)要求的大小 . 注意 ,這段代碼的 未來版本可能改變大小 ,

36、所以沒有 assuptions 應該對它做出。 解碼器狀態(tài)在內存中總是連續(xù) ,復制它只要一個淺拷貝就足夠了。 為解碼一個幀 , opus_decode() 或 opus_decode_float()必須用壓縮音頻數據的包來調用 : frame_size = opus_decode(dec, packet, len, decoded, max_size, 0); 在這里 packet 是包含壓縮數據的字節(jié)數組 len 是包內字節(jié)的精確數量 decoded 是 opus_int16 (或由 opus_decode_float()定義的浮點

37、型 ) 格式的解碼后的音頻數據。 max_size是可以放入解碼幀的每個通道各樣本中幀的最大值 opus_decode() 和 opus_decode_float() 返回從包解碼后的每通道樣本的 數量。如果這個值是負的,表示有錯誤發(fā)生。如果包損壞或音頻緩沖太小不 足以容納解碼后的音頻,錯誤就會發(fā)生。 Opus 是包含重疊塊的有狀態(tài)的編解碼器,其結果是 Opus 包并不是彼此 獨立編碼。包必須按正確的次序,連續(xù)地進入解碼器進行正確的解碼。丟失 的包可以用遺失隱藏來替換, 遺失隱藏用一個空的指針和 0 長度的

38、包來調用 解碼器。 一個單獨的編解碼器狀態(tài)在一個時間只能由一個單獨的線程來訪問,調 用者執(zhí)行任何需要的鎖定。 各分開的音頻數據流可以用各自分開的解碼器狀 態(tài)平行地進行解碼,除非 API庫在編譯時用了 NONTHREADSAFE_PSEUDOSTACK 定義。 類型定義文檔 typedef struct OpusDecoder OpusDecoder Opus 解碼器狀態(tài) . 這包含了一個 Opus 解碼器的完整狀態(tài)。 它是位置獨立的, 并且可以自由 復制。 參見 : opus_dec

39、oder_create,opus_decoder_init 函數文檔 int opus_decode ( OpusDecoder * const unsigned char * data, opus_int32 len, opus_int16 * pcm, int frame_size, int decode_fec  st, ) 對一個 Opus 包進行解碼。 參數 : [in] st OpusDecoder*: 解碼器狀態(tài) [in] data char*:輸入負載

40、.對包丟失使用一個空指針來表示。 [in] len opus_int32:在輸入負載中的字節(jié)數 [out] pcmopus_int16*: 輸出信號(如果是 2 通道有交叉)。長度等 于 frame_size*channels*sizeof(opus_int16) [in] frame_size :在 PCM 可用空間中每通道的樣本數。如果小于最 大包的時長( 120 毫秒, 4848kHz5760個),這個函數將不能解碼一些包。如 果是 PLC (data==NULL)或 FEC (decode_fec=1)的情況,那么 frame

41、_size 必須正 好是丟失音頻的時長,否則解碼器無法在解碼下一個包時進入優(yōu)化狀態(tài)。對 于 PLC 和 FEC 的情況, frame_size 必須是 2.5 毫秒的倍數。 [in] decode_fec int: 對于請求任何帶內前向錯誤糾正數據進行解碼 的狀態(tài)標志 (0 or 1) 。如果沒有這樣的數據可用,幀在解碼時被認為已經丟 失。 返回 : 解碼樣本的數量,或錯誤代碼。 int opus_decode_float ( OpusDecoder * const unsigned char * data, o

42、pus_int32 len, float * pcm, int frame_size, int decode_fec  st, ) 用浮點輸出格式解碼一個 Opus 包。 參數 : [in] st OpusDecoder*: 解碼器狀態(tài) [in] data char*:輸入負載 .對包丟失使用一個空指針來表示。 [in] len opus_int32: 在輸入負載中的字節(jié)數 [out] pcmfloat*: 輸出信號(如果是 2 通道有交叉) 。長度等于 frame_size*channel

43、s*sizeof(float) [in] frame_size :在 PCM 可用空間中每通道的樣本數。如果小于最 大包的時長( 120 毫秒, 4848kHz5760個),這個函數將不能解碼一些包。如 果是 PLC (data==NULL)或 FEC (decode_fec=1)的情況,那么 frame_size 必須正 好是丟失音頻的時長,否則解碼器無法在解碼下一個包時進入優(yōu)化狀態(tài)。對 于 PLC 和 FEC 的情況, frame_size 必須是 2.5 毫秒的倍數。 [in] decode_fec int: 對于請求任何帶內前

44、向錯誤糾正數據進行解碼 的狀態(tài)標志 (0 or 1) 。如果沒有這樣的數據可用,幀在解碼時被認為已經丟 失。 返回 : 解碼樣本的數量,或錯誤代碼。 OpusDecoder* opus_decoder_create ( opus_int32 Fs, int channels, int * error ) 分配和初始化解碼器狀態(tài) . 參數 : [in] Fs opus_int32: 解碼的采樣率 (Hz). 必須是 8000, 12000, 16000, 24000,  或  4800

45、0. [in] channels [out] error  int: 用于解碼的通道數 (1 or 2) int*: 成功時是 OPUS_OK Success或錯誤代碼 Opus 在內部用 48000 Hz來存儲數據,所以對于 FS來說 48000 Hz 是缺省 值。然而,解碼器在 8, 12, 16, 和 24 kHz下也可以有效解碼到緩沖,所以,由于某些原因調用者不能在全采樣率下使用數據, 或知道被壓縮的數據不能在全頻率范圍內使用,可以請求用更小的頻率解碼。同樣的,解碼器可以根 據調用者的請求,填充單聲道或交叉立體聲的 PCM

46、緩沖區(qū)。 int opus_decoder_ctl ( OpusDecoder * st, int request, ... ) 向一個 Opus 解碼器執(zhí)行一個 CTL 函數 . 一般其請求和后續(xù)的參數是由一個提供便利的宏來產生的。 參數 : st OpusDecoder*: 解碼器狀態(tài) . request :這個及所有其他剩余參數應被  1 個在  Generic CTLs 或 Encoder related CTLs所提供便利的宏

47、來替代 參見 : Generic CTLs Decoder related CTLs void opus_decoder_destroy ( OpusDecoder * st ) 釋放一個根據 opus_decoder_create()已分配的 OpusDecoder 對象 . 參數 : [in] st OpusDecoder*:用于釋放的解碼器狀態(tài)。 int opus_decoder_get_nb_samples ( const OpusDecoder * const unsigned char p

48、acket[], opus_int32 len  dec, ) 獲得一個 Opus 包的樣本數 參數 : [in] dec OpusDecoder*: 解碼器狀態(tài) [in] packet char*: Opus 包 [in] len opus_int32: 包的長度 返回 : 樣本的數量 返回值 : OPUS_INVALID_PACKET:通過的被壓縮數據已損壞或其格式不被支 持。 int opus_decoder_get_size ( int channel

49、s ) 獲得 OpusDecoder結構的大小。 參數 : [in] channels int: 通道數,必須是 1 或 2. 返回 : 字節(jié)數的大小 . int opus_decoder_init ( OpusDecoder * st, opus_int32 Fs, int channels ) 初始化一個以前分配過的解碼器狀態(tài) . 狀態(tài)必須至少是 opus_decoder_get_size()返回的大小 . 在這里,應用程序不要用系統(tǒng)自動分配內存, 而要準備用自己的分配器。

50、 參見 : opus_decoder_create,opus_decoder_get_size,為重設一個以前初始化的 狀態(tài),使用  OPUS_RESET_STATE CTL. 參數 : [in] st  OpusDecoder*:  解碼器狀態(tài)  . [in] Fs opus_int32:  準備解碼的采樣率  (Hz).  必須是  8000、12000、 16000、24000、或  48000. [in] chan

51、nels int: 解碼的通道數 (1 or 2) 返回值 : 成功, OPUS_OK ,失敗,錯誤代碼。 int opus_packet_get_bandwidth ( const unsigned char * data ) 獲得一個 Opus 包的帶寬。 參數 : [in] data char*: Opus 包 返回值 : OPUS_BANDWIDTH_NARROWBAND窄帶 (4kHz bandpass) OPUS_BANDWIDTH_MEDIUMBAND中等帶寬 (6kHz

52、 bandpass) OPUS_BANDWIDTH_WIDEBAND寬帶 (8kHz bandpass) OPUS_BANDWIDTH_SUPERWIDEBAND高 寬 帶 (12kHz bandpass) OPUS_BANDWIDTH_FULLBAND全寬帶 (20kHz bandpass) OPUS_INVALID_PACKET通過的被壓縮數據已損壞或其格式不被支持 int opus_packet_get_nb_channels ( const unsigned char * data ) 獲得 Opus 包的通道數。 參數 :

53、 [in] data char*: Opus 包 返回 : 通道數量 返回值 : OPUS_INVALID_PACKET通過的被壓縮數據已損壞或其格式不被支 持 int opus_packet_get_nb_frames ( const unsigned char packet[], opus_int32 len ) 獲得 Opus 包所有幀的數量 . 參數 : [in] packet char*: Opus 包 [in] len opus_int32:包的長度 返回 :

54、 幀的數量 返回值 : OPUS_INVALID_PACKET通過的被壓縮數據已損壞或其格式不被支 持 int opus_packet_get_nb_samples packet[], opus_int32 len, opus_int32 Fs  (  const  unsigned  char ) 獲得 Opus 包的樣本數。 參數 : [in] packet char*: Opus 包 [

55、in] len opus_int32: 包的長度 [in] Fs opus_int32: 采樣率( Hz). 必須是 400 的倍數,否則結果不 準確。 返回 : 樣本的數量 返回值 : OPUS_INVALID_PACKET通過的被壓縮數據已損壞或其格式不被支 持 int opus_packet_get_samples_per_frame ( const unsigned char * data, opus_int32 Fs ) 獲得 Opus 包每幀的樣本數。 參數 :

56、 [in] data char*: Opus 包. 必須包含至少一個字節(jié)的數據。 [in] Fs opus_int32: 采樣率( Hz) .必須是 400 的倍數,否則結果不 準確。 返回 : 每幀樣本的數量 . int opus_packet_parse ( const unsigned char * opus_int32 len, unsigned char * out_toc, const unsigned char * frames[48], short size[48], int

57、 * payload_offset  data, ) 將一個 opus 包解析成 1 個或多個幀 . Opus_decode 在內部執(zhí)行這個操作,所以大多數應用程序不需要用到這 個函數。這個函數不復制各幀,返回的指針是輸入包內部的指針。 參數 : [in] data char*:要進行解析的 Opus包 [in] len opus_int32: 數據的大小 [out] out_toc char*: TOC 指針 [out] frames char*[48] 封裝過的幀 [out] si

58、ze short[48] 封裝過的幀的大小 [out] payload_offset int*: 返回在包內負載的位置  (按字節(jié) ) 返回 : 幀的數量 Repacketizer Repacketizer可將多個包 Opus 合并成一個包,或將以前合并的包分離成 多個 Opus 包。 類型定義 typedef struct OpusRepacketizer OpusRepacketizer

59、 函數 int opus_repacketizer_get_size (void) 獲得 OpusRepacketizer 結構的大小 OpusRepacketizer * opus_repacketizer_init (OpusRepacketizer *rp) (重新 )初始化以前分配過的 repacketizer 狀態(tài) . OpusRepacketizer * opus_repacketizer_create (void) 為用 opus_repacketizer_init() 產生的新 repacketiz

60、er 分配內存和初始化。 void opus_repacketizer_destroy (OpusRepacketizer *rp) 釋 放 通 過 opus_repacketizer_create() 分 配 過 的 OpusRepacketizer int opus_repacketizer_cat (OpusRepacketizer *rp, const unsigned char *data, opus_int32 len) 給當前的 repacketizer 狀態(tài)

61、增加一個包。 opus_int32 opus_repacketizer_out_range (OpusRepacketizer *rp, int begin, int end, unsigned char *data, opus_int32 maxlen) 通過 opus_repacketizer_cat() 從以前提交給 repacketizer 狀態(tài)的數 據構建一個新的包。 int opus_repacketizer_get_nb_frames (OpusRepacketizer *rp) 返

62、 回 最 后 一 次 調 用 opus_repacketizer_init() 或 opus_repacketizer_create() 后 , 到 當 前 為 止 通 過 opus_repacketizer_cat() 提交的包數據所包含的幀的總數。 opus_int32 opus_repacketizer_out (OpusRepacketizer *rp, unsigned char *data, opus_int32 maxlen) 通過 opus_repacketizer_cat() 從以前提交

63、給 repacketizer 狀態(tài)的數據構建一個新的包。 詳細描述 Repacketizer可將多個包 Opus 合并成一個包,或將以前合并的包分離成 多個 Opus 包。 分離有效的包可以保證成功,然而,只有在所有的幀都有相同的編碼模 式、帶寬、幀大小,并且合并后的包總的時長不超過 120 毫秒,合并有效的 包才能成功。對多流包的操作不會成功,除了這些包由來自同一音頻流的數 據組成的退化情況。 重構包的過程開始于創(chuàng)建一個 repacketizer 狀態(tài),創(chuàng)建既可以通過調用 opus_repacketize

64、r_create()函數也可以通過自己分配內存的方式來進行, 例如 OpusRepacketizer *rp; rp = (OpusRepacketizer*)malloc(opus_repacketizer_get_size()); if (rp != NULL) opus_repacketizer_init(rp); 之 后 應 用 程 序 應 通 過 opus_repacketizer_cat() 來 提 交 包 , 用 opus_repacketizer_out()或 opus_repacketizer_out_range()提取新的

65、包,然后通 過 opus_repacketizer_init()為下一套輸入包重設狀態(tài)。 下面的例子中,將一個系列的包分離成各單獨的幀: unsigned char *data; int len; while (get_next_packet(&data, &len)) { unsigned char out[1276]; opus_int32 out_len; int nb_frames; int err; int i; err = opus_repacketizer_cat(rp, data, len)

66、; if (err != OPUS_OK) { release_packet(data); return err; } nb_frames = opus_repacketizer_get_nb_frames(rp); for (i = 0; i < nb_frames; i++) { out_len = opus_repacketizer_out_range(rp, i, i+1, out, if (out_len < 0) {  sizeof (out)); release_packet(data); return ( int )out_len; } output_next_packet(out, out_len); } opus_repacketizer_init(rp); release_packet(data); } 可 選 擇 將 一 個 系 列 的 幀 合 并 到 各 個 包 中 , 每 個

展開閱讀全文
溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
5. 裝配圖網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

相關資源

更多
正為您匹配相似的精品文檔
關于我們 - 網站聲明 - 網站地圖 - 資源地圖 - 友情鏈接 - 網站客服 - 聯系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網版權所有   聯系電話:18123376007

備案號:ICP2024067431-1 川公網安備51140202000466號


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務平臺,本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對上載內容本身不做任何修改或編輯。若文檔所含內容侵犯了您的版權或隱私,請立即通知裝配圖網,我們立即給予刪除!