metaRTC8 freertos编程指南(bk7258/bk7259)

概述

metaRTC8已经在bk7258/bk7259 freertos适配成功,已经和bk7258/bk7259 sdk集成多个解决方案,解决方案(包含metaRTC源码)可从博通集成网站下载。

API应用代码

api应用代码可参考yangdemo/YangSfuDemo.c

初始化

复制代码
//open audio
//uac mic
audio_parameters_t audio_parameters = {1, 1, CODEC_FORMAT_G711A, CODEC_FORMAT_G711A, DB_SAMPLE_RARE_16K, DB_SAMPLE_RARE_16K, 0};
//board mic
//audio_parameters_t audio_parameters = {1, 0, CODEC_FORMAT_G711A, CODEC_FORMAT_G711A, DB_SAMPLE_RARE_16K, DB_SAMPLE_RARE_16K, 0};

doorbell_audio_turn_on(&audio_parameters);

//open camera
//uvc
//camera_parameters_t camera_parameters = {UVC_DEVICE_ID, width, height, 1, 0, 90};
//dvp
camera_parameters_t camera_parameters = {0, width, height, 1, 0, 0};
if(doorbell_camera_turn_on(&camera_parameters)){
	return;
}

YangPeerConnection* conn=(YangPeerConnection*)yang_user_calloc(1,sizeof(YangPeerConnection));
YangPacer* pacer=(YangPacer*)yang_user_calloc(1,sizeof(YangPacer));

yang_create_pacer(pacer);

// pacer->initAudio(pacer->session,Yang_AED_OPUS,48000,2);
pacer->initAudio(pacer->session,Yang_AED_PCMA,8000,1);
//pacer->initVideo(pacer->session,Yang_VED_H264,256);//720P
pacer->initVideo(pacer->session,Yang_VED_H264,128);//480P

建立连接

复制代码
YangPeerConnection* conn;
yang_init_peerInfo(&conn->peer.peerInfo);
conn->peer.peerInfo.uid=0;

conn->peer.peerInfo.direction=direction;

conn->peer.peerCallback.sslCallback.context = session;
conn->peer.peerCallback.sslCallback.sslAlert = yang_sslAlert;

conn->peer.peerCallback.recvCallback.context = session;
conn->peer.peerCallback.recvCallback.receiveAudio =	yang_receiveAudio;
conn->peer.peerCallback.recvCallback.receiveVideo = yang_receiveVideo;
//conn->peer.peerCallback.recvCallback.receiveMsg = yang_receiveMsg;

conn->peer.peerCallback.iceCallback.context = session;
conn->peer.peerCallback.iceCallback.onConnectionStateChange=yang_onConnectionStateChange;
conn->peer.peerCallback.iceCallback.onIceStateChange=yang_onIceStateChange;
conn->peer.peerCallback.iceCallback.onIceCandidate=yang_onIceCandidate;

conn->peer.peerCallback.rtcCallback.context=rtcCallback->context;
conn->peer.peerCallback.rtcCallback.setMediaConfig=rtcCallback->setMediaConfig;
conn->peer.peerCallback.rtcCallback.sendRequest=rtcCallback->sendRequest;

yang_create_peerConnection(conn);

//conn->addAudioTrack(Yang_AED_PCMA);
conn->addAudioTrack(&conn->peer,Yang_AED_OPUS);
conn->addVideoTrack(&conn->peer,Yang_VED_H264);
conn->addTransceiver(&conn->peer,YangMediaAudio,direction);
conn->addTransceiver(&conn->peer,YangMediaVideo,direction);

ret = yang_whip_connectWhipWhepServer(&conn->peer,url);

音频数据

复制代码
YangPushData* pushData;
YangPacer* pacer;
YangFrame audioFrame;

audioFrame.payload=payload;
audioFrame.nb=nb;
audioFrame.pts=ts;
pushData=pacer->getAudioData(pacer->session,&audioFrame);
conn->on_audio(&conn->peer,pushData);

视频数据

复制代码
//open lcd
// display_parameters_t display_parameters = {LCD_DEVICE_ST7701SN, 90, 0};
// doorbell_display_turn_on(&display_parameters);
frame_queue_v2_register_consumer(IMAGE_H264, CONSUMER_TRANSMISSION);

YangPushData* pushData;
YangPacer* pacer;
YangFrame videoFrame;

frame_buffer_t *frame = frame_queue_v2_get_frame(IMAGE_H264, CONSUMER_TRANSMISSION, 200);
videoFrame.pts=frame->timestamp;
videoFrame.frametype=(*(frame->frame + 4) & 0x1F) == YangAvcNaluTypeSPS?1:0;

if(videoFrame.frametype){
	videoFrame.payload=payload;
	videoFrame.nb=nb;
}else{
	videoFrame.payload=payload+4;
	videoFrame.nb=nb-4;	
}

pushData=pacer->getVideoData(pacer->session,&videoFrame);
conn->on_video(&conn->peer,pushData);
frame_queue_v2_release_frame(IMAGE_H264, CONSUMER_TRANSMISSION, frame);
相关推荐
气泡音人声分离6 小时前
音频 Key 和 BPM 识别原理:歌曲调性和速度是如何分析出来的?
音视频·升降调·音频变速
海带紫菜菠萝汤9 小时前
WebCodecs API 实战:浏览器原生视频编解码的原理与性能测试
前端·javascript·音视频·视频编解码
kriston202610 小时前
2026音频指纹识别方案准确率对比:主流厂商差距与选型指南
音视频
薛定谔的猫-菜鸟程序员10 小时前
基于 Electron 的本地短视频解析与下载工具:架构设计与工程实践
java·electron·音视频
程序员大辉11 小时前
seedance2.0做的视频太贵?开源免费最佳替代方案:bernini生视频,ltx2.3来配音
音视频·视频大模型·ltx2.3·bernini
AI星桥小王子13 小时前
镜头、角色、剧情自由把控,可控式 AI 视频工作台横向测评
人工智能·音视频
EasyDSS13 小时前
巡逻调度、应急呼叫、多路同屏——企业级融媒体平台EasyDSS一站式搞定园区安保所有音视频需求
音视频·媒体
hz5678913 小时前
应急管理部门跨部门会商用什么系统?指挥调度视频会议方案解析
网络·安全·音视频·实时音视频·信息与通信
人工智能研究所15 小时前
ResearchStudio-Reel: 学术论文到海报、视频、博客的“最后一公里“
人工智能·microsoft·音视频·博客·ppt·学术论文·ai创作
wangchensong16 小时前
企业培训视频为什么需要加密保护?
网络·音视频