当前位置:网站首页>T31开发笔记:metaipc测试
T31开发笔记:metaipc测试
2022-08-02 18:26:00 【殷忆枫】
若该文为原创文章,转载请注明原文出处
一、硬件和开发环境
1、硬件:T31X+SC5235
2、开发环境: ubuntu16.04-64bit
3、编译器:mips-gcc540-glibc222-32bit-r3.3.0.tar.gz
注:板子和和WIFI模块是某淘上淘的,使用的是RTL8188,使用的是USB接口,uboot和内核是自己裁剪移植的,内核默认自带WIFI驱动,所以不用移植可以直接使用。
二、下载metaIPC源码
源码下载地址,作者在github和gitee同时同步上传。
Release v5.0-b1 · metartc/metaRTC - Gitee.com
Release Release v5.0-b1 · metartc/metaRTC · GitHub

直接下载jz这个文件,下载后解压。
三、编译测试
把文件放到开发环境下,解压得到如下目录:
1、 编译libmetartccore5
cd libstartccore5
chmod +x cmake_mips32.sh
./cmake_mips32.sh编译完成后会在当前目录下生成build文件,里面生成libmetartccore5.a文件,把.a文件拷贝到bin文件下的lib_debug目录下。
2、编译程序metaipc5_jz
cd metaipc5_jz
chmod +x cmake_mips32.sh
./cmake_mips32.sh编译完成衙会在当前目录下生成build,里有可执行文件,把文件拷贝到开发板上
另还需要把bin/app_debug目录下的yang_config.ini文件也拷贝到开发板,和可执行文件同一目录下即可。
3、运行
下载metap2p5_html
metap2p5_html · metartc/metaRTC - 码云 - 开源中国 (gitee.com)
GitHub - metartc/metaRTC: A cross-platform WebRTC SDK
1、直接打开p2pdemo_zb.html
2、在开发板运行程序
3、在界面输入开发板对应的IP,点击播放即可看到视频流了。

四、程序説明
1、初始化和停止

2、摄像头采集线程

3、编码
组帧格式
H264 Profile:Baseline
I帧:四字节sps长度+sps+四字节pps长度+pps+四字节I帧长度+I帧
P帧:去掉start code
如:00,00,00,01,61,e0,00,40,00,be,41,38,22,93,df
去掉start code 00,00,00,01,取61,e0,00,40,00,be,41,38,22,93,df
I帧:四字节sps长度+sps+四字节pps长度+pps+四字节I帧长度+I帧
如:00,00,00,0e,67,42,c0,1f,8c,8d,40,50,1e,d0,0f,08,84,6a,00,00,00,04,68,ce,3c,80,00,00,00,01,65,b8,00,04,00,00,13,88,c5
如果sps和pps、I帧在三个帧里,可参考君正实现代码
如果编码器I帧有sps和pps可参考下面代码
pframe->payload = frametype==YANG_Frametype_I?m_vbuffer:m_vbuffer+4;
pframe->frametype = frametype;
pframe->nb = frametype==YANG_Frametype_I?destLength:destLength-4;
if(frametype==YANG_Frametype_I){
int32_t spsLen=0,ppsLen=0,spsPos=0,ppsPos=0,ipos=0;
spsPos=yang_find_pre_start_code(m_vbuffer,destLength);
if(spsPos<0) return 1;
ppsPos=yang_find_pre_start_code(m_vbuffer+4+spsPos,destLength-4-spsPos);
if(ppsPos<0) return 1;
ppsPos+=4+spsPos;
ipos=yang_find_pre_start_code(m_vbuffer+4+ppsPos,destLength-4-ppsPos);
if(ipos<0) return 1;
ipos+=4+ppsPos;
spsLen=ppsPos-spsPos-4;
ppsLen=ipos-ppsPos-4;
yang_put_be32((char*)m_vbuffer,(uint32_t)spsLen);
yang_put_be32((char*)(m_vbuffer+4+spsLen),(uint32_t)ppsLen);
}
五、第三方库编译
需要编译的库有:libcrypto.a libssl.a libopus.a libspeexdsp.a libsrtp2.a libusrsctp.a livyuv.a
第三方库可以在metartc仓库里自行下载源码,这里只描述如何编译成.a文件。
1、编译openssl
export CC=/opt/mips-gcc540-glibc222-32bit-r3.3.0/bin/mips-linux-gnu-gcc
./Configure linux-mips32
make
make install
生成的库在/usr/local/lib/目录下
值得注意的是,在arm交叉编译环境中,引用库的顺序为:-lssl -lcrypto,如果为 -lcrypto -lssl就会编译错误。2、编译opus/libyuv
这两个库编译操作相同,也可以从libmetartccore工程里拷贝
建立cmake_mips32.sh
rm -rf build
mkdir build
cd build
ARCH=mips32.cmake
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_TOOLCHAIN_FILE=../$ARCH ..
make建立mips32.cmake
SET(CMAKE_SYSTEM_NAME Linux)
SET(CMAKE_C_COMPILER /opt/mips-gcc540-glibc222-32bit-r3.3.0/bin/mips-linux-gnu-gcc)
SET(CMAKE_CXX_COMPILER /opt/mips-gcc540-glibc222-32bit-r3.3.0/bin/mips-linux-gnu-g++)chmod +x cmake_mips32.sh
./cmake_mips32.h
.a文件会在当前目录build里。
3、编译srtp
./configure --host=mips-linux-gnu --target=mips-linux-gnu
make
make install
生成的库在/usr/local/lib/下。4、编译libusrsctp
git clone https://github.com/Kurento/libusrsctp.git
cd libusrsctp
./bootstrap
./configure --host=mips-linux-gnu --target=mips-linux-gnu
make
sudo make install
生成的库在/usr/local/lib/目录下。5、编译speexdsp
./autogen.sh
./configure --host=mips-linux-gnu --target=mips-linux-gnu
make
make install
生成的库在/usr/local/lib/目录下把libcrypto.a libssl.alibopus.alibspeexdsp.alibsrtp2.a libusrsctp.a libyuv.a文件拷贝到thirdparty/lib/mips32/ 目录下,至此,所需第三方库全部编译完成。
以上库编译采用的是mips-linux-gnu工具链,适合君正T31平台。
六、总结
1、了解第三方库编译,为后续开发更好的移植
2、metaipc作者已支持君正,瑞芯微,海思等平台,作者提供了编译好的第三方库,方便移植,在此表示感谢
3、已在rv1126和t31x上测试。
如有侵权,请及时联系博主删除,VX:18750903063
边栏推荐
- Jupyter Notebook(Anaconda)——两个环境分别修改默认打开目录(深度学习第一周番外篇)
- TSF微服务治理实战系列(一)——治理蓝图
- 进程与线程
- 千万级QPS下服务如何才能平滑启动
- 电子行业库存管理痛点与WMS仓储管理系统解决方案
- Mobile Banking Experience Test: How to Get the Real User Experience
- Enterprise cloud cost control, are you really doing it right?
- 看【C语言】实现简易计算器教程,让小伙伴们为你竖起大拇指
- LeetCode 2349. 设计数字容器系统(SortedSet)
- Five keys to a successful Industrial IoT deployment
猜你喜欢

【秒杀办法】根据二叉树的先序遍历、中序遍历、后序遍历快速创建二叉树

AI智能剪辑,仅需2秒一键提取精彩片段

载20(S)-人参皂苷/细胞穿膜肽-单克隆抗体-载丝裂霉素白蛋白纳米微球的制备

NIO之Selector执行流程

数据治理:数据集成和应用模式的演进

多聚体/壳聚糖修饰白蛋白纳米球/mPEG-HSA聚乙二醇人血清白蛋白纳米球的制备与研究

Endanger the safety of common Internet attacks have?

HDF驱动框架的API(1)

Detailed explanation of AtomicInteger

Win11dll文件缺失怎么修复?Win11系统dll文件丢失的解决方法
随机推荐
有什么好用的IT资产管理软件
进程与线程
浅谈一下pyd文件的逆向
药品研发--工艺技术人员积分和职务考核评估管理办法
读书笔记之《你想过怎样的一生?》
知识点滴 - 什么是iAP2 (上)
开源一夏 |【云原生】DevOps(五):集成Harbor
C#里如何简单的校验时间格式
Openharmony - 基于ArkUI(TS)开发颜色选择器
监控易火星版即将亮相:分布式运维帮助TOP3000大企业跨越管理鸿沟
LeetCode 1947. 最大兼容性评分和(状态枚举DP)
数据治理:数据集成和应用模式的演进
golang刷leetcode 经典(6) 实现跳表
被审稿人吐槽没有novelty!深度学习方向怎么找创新点?
企业云成本管控,你真的做对了吗?
面试官:谈谈如何防止消息丢失和消息重复
仿制药的未来商机--个人研发的体会
MySQL LIKE – 语法和用法示例教程
洛谷P2574 XOR的艺术
NIO's Selector execution process