概述
metaRTC5.0最新版实现了纯C的webrtc版IPC demo,目前提供了基于君正芯片的ipc代码demo,后面将会提供更多芯片的ipc代码demo。
下载源码
Release Release v5.0-b1 · metartc/metaRTC · GitHubA cross-platform WebRTC SDK. Contribute to metartc/metaRTC development by creating an account on GitHub.https://github.com/metartc/metaRTC/releases/tag/v5.0-b1https://gitee.com/metartc/metaRTC/releases/v5.0-b1
https://gitee.com/metartc/metaRTC/releases/v5.0-b1
重要参数
在文件include/yang_config.h中
如果分辨率过高,将Yang_isEmbbed设为0
编译
编译脚本:cmake_mips32.sh
可将libimp.a等换成libmip.so,减少程序体积。
demo使用的glib库,如使用ulib库,可将上面类库更换即可。
硬编码代码
所有芯片硬编码需实现yangipc/YangIpcEncoder.h
typedef struct{
int32_t isConvert;
int32_t isStart;
pthread_t threadId;
YangVideoEncoderBuffer2 *out_videoBuffer;
}YangEncoderSession;
typedef struct{
YangEncoderSession session;
int32_t (*init)(YangEncoderSession* session);
void (*start)(YangEncoderSession* session);
void (*stop)(YangEncoderSession* session);
void (*sendMsgToEncoder)(YangEncoderSession* session,YangRequestType request);
}YangEncoderVideo;
void yang_create_videoEncoder(YangEncoderVideo* encoder);
void yang_destroy_videoEncoder(YangEncoderVideo* encoder);
君正实现代码
void yang_create_videoEncoder(YangEncoderVideo* encoder){
YangEncoderSession* session=&encoder->session;
session->isStart = 0;
session->isConvert = 1;
session->out_videoBuffer = NULL;
init_chn();
encoder->init=yang_jzEncoder_init;
encoder->start=yang_jzEncoder_start;
encoder->stop=yang_jzEncoder_stop;
encoder->sendMsgToEncoder=yang_jzEncoder_sendMsgToEncoder;
}
void yang_destroy_videoEncoder(YangEncoderVideo* encoder){
YangEncoderSession* session=&encoder->session;
if (session->isConvert) {
yang_jzEncoder_stop(session);
while (session->isStart) {
yang_usleep(1000);
}
}
session->out_videoBuffer = NULL;
int32_t ret=0;
/* Step.b UnBind */
if (chn[0].enable) {
ret = IMP_System_UnBind(&chn[0].framesource_chn, &chn[0].imp_encoder);
if (ret < 0) {
yang_error( "UnBind FrameSource channel0 and Encoder failed\n");
}
}
/* Step.c Encoder exit */
ret = sample_encoder_exit();
if (ret < 0) {
yang_error("Encoder exit failed\n");
return;
}
/* Step.d FrameSource exit */
ret = sample_framesource_exit();
if (ret < 0) {
yang_error("FrameSource exit failed\n");
return;
}
/* Step.e System exit */
ret = sample_system_exit();
if (ret < 0) {
yang_error("sample_system_exit() failed\n");
return;
}
}