metaRTC5.0实现君正的纯C的webrtc版IPC

概述

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-b1icon-default.png?t=M666https://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;
		}
}

猜你喜欢

转载自blog.csdn.net/m0_56595685/article/details/125950148