6

opus フレームをオーディオ サンプルにデコードする簡単なコードがあります。Android では動作しますが、Unity3D iOS プロジェクトではクラッシュし、通常の iOS プロジェクトではクラッシュしません。

EXC_BAD_ACCESS (code=1, address=0x2f)

両方のプロジェクトは、同じ opus 静的ライブラリとヘッダー ファイルを共有します。

#include "opus.h"

int test1(){
    unsigned char opus_chunk[] = {0x68, 0x97, 0x50, 0x0d,
        0xba, 0xa4, 0x80, 0x0d, 0x31, 0x21, 0x9c, 0xcf, 0x74, 0x98, 0xda, 0xc6,
        0xd5, 0x27, 0xcb, 0xd9, 0x51, 0xd7, 0xce, 0x90, 0xc5, 0x58, 0x94, 0x53,
        0xb0, 0xe9, 0xb4, 0xe4, 0xf4, 0x42, 0x4d, 0xc7, 0xa4, 0x61, 0xfa, 0xfe};
    int len = sizeof(opus_chunk);
    short samples[5760];
    int err1;
    OpusDecoder *decoder;
    decoder = opus_decoder_create(48000, 1, &err1);
    int n = opus_decode(decoder, opus_chunk, len, samples, 5760, 0);
    opus_decoder_destroy(decoder);

}

ケルトでのxcode opusクラッシュ

スタックトレース:

#0  0x00b944ec in compute_allocation ()
#1  0x00c03698 in celt_decode_with_ec at ./opus_ios/build/src/opus-1.1.2/celt/celt_decoder.c:956
#2  0x00c2400c in opus_decode_frame at ./opus_ios/build/src/opus-1.1.2/src/opus_decoder.c:490
#3  0x00c24ea2 in opus_decode_native [inlined] at ./opus_ios/build/src/opus-1.1.2/src/opus_decoder.c:692
#4  0x00c24e80 in opus_decode at ./opus_ios/build/src/opus-1.1.2/src/opus_decoder.c:782

ビルド設定を比較して、ほぼ同じにしました。

エラーは次のように聞こえます-割り当てに問題があります。

opus_decoder_createOpusDecoder を割り当てることはできますが、エラーが発生していますopus_decode

4

1 に答える 1

3

これは、シンボルの競合が原因で発生します。Unity 3D ライブラリーはcompute_allocation()、 libopus でも定義および使用される を含むいくつかのシンボルを定義します。Unity 3D ライブラリがリンカ コマンド ラインで libopus の前にある場合、そのバージョンが取り込まれる可能性があり、libopus では機能しません。両方のセットが必要な場合は、競合するシンボルの名前を変更する必要がある場合があります。

于 2016-11-19T22:20:54.173 に答える