上个博客介绍了Opus编译成安卓静态库,下面介绍Win和IOS
这两个我都是在IDE里面进行,方便调试
首先说WIN:
1、下载好源码可以在文件夹下找到解决方案,直接用VS打开
2、在解决方案里新建个静态库项目(如果不需要封装的接口函数,可以直接编译Opus,生成DLL)
3、将Opus引用进新项目中,和一般的C/C++工程一样,我们需要添加依赖的.C文件与.h文件,首先我们需要添加头文件,Opus依赖头文件分布的比较零散,不像speex全部在include文件里面,不过这里我们也只需要指定好路径,编译器会自动链接到相应的头文件,如下图所示:
4、写接口文件,和上篇的安卓类似,只是方法前面加上__declspec(dllexport),这样在C#中才能找到对应的方法
这里只贴一下头文件
// 下列 ifdef 块是创建使从 DLL 导出更简单的
// 宏的标准方法。此 DLL 中的所有文件都是用命令行上定义的 MYOPUS_EXPORTS
// 符号编译的。在使用此 DLL 的
// 任何其他项目上不应定义此符号。这样,源文件中包含此文件的任何其他项目都会将
// MYOPUS_API 函数视为是从 DLL 导入的,而此 DLL 则将用此宏定义的
// 符号视为是被导出的。
#ifdef MYOPUS_EXPORTS
#define MYOPUS_API __declspec(dllexport)
#else
#define MYOPUS_API __declspec(dllimport)
#endif
int frame_size;
int channels = 1;
opus_int32 opus_num;
opus_int32 pcm_num;
float* pcm_dataFloat_encoder = NULL;
opus_int16* pcm_dataInt_encoder = NULL;
unsigned char* opus_dataInt_decoder = NULL;
unsigned char* opus_dataFloat_decoder = NULL;
OpusEncoder *enc = NULL;
OpusDecoder *dec = NULL;
int error;
//必须带有extern "C",否则在Unity中找不到以下方法
extern "C" {
MYOPUS_API int nMyOpus;
MYOPUS_API int fnMyOpus(void);
MYOPUS_API void opusEncoderInit(int Fs, int _channels);
MYOPUS_API void opusEncoderSet(int _frame_size, bool isFloat, int quality, int signal);
MYOPUS_API void opusDecoderInit(int Fs, int _channels, int max_len, bool isFloat);
MYOPUS_API int opusEncoder(opus_int16 *encoder_insrc, int in_offset, unsigned char *encoder_out, int max_len);
MYOPUS_API int opusDecoder(int len, unsigned char *decoder_insrc, int in_offset, opus_int16 *decoder_out);
MYOPUS_API void opusEncoderDispose();
MYOPUS_API void opusDecoderDispose();
}
然后编译,生成dll,后面再写IOS编译
参考:
http://www.cnblogs.com/lzhen/p/3906102.html?utm_source=tuicool&utm_medium=referral