• T31开发笔记:metaipc测试


    若该文为原创文章,转载请注明原文出处

    一、硬件和开发环境

    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

    1. cd libstartccore5
    2. chmod +x cmake_mips32.sh
    3. ./cmake_mips32.sh

    编译完成后会在当前目录下生成build文件,里面生成libmetartccore5.a文件,把.a文件拷贝到bin文件下的lib_debug目录下。

    2、编译程序metaipc5_jz

    1. cd metaipc5_jz
    2. chmod +x cmake_mips32.sh
    3. ./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可参考下面代码
     

    1. pframe->payload = frametype==YANG_Frametype_I?m_vbuffer:m_vbuffer+4;
    2. pframe->frametype = frametype;
    3. pframe->nb = frametype==YANG_Frametype_I?destLength:destLength-4;
    4. if(frametype==YANG_Frametype_I){
    5. int32_t spsLen=0,ppsLen=0,spsPos=0,ppsPos=0,ipos=0;
    6. spsPos=yang_find_pre_start_code(m_vbuffer,destLength);
    7. if(spsPos<0) return 1;
    8. ppsPos=yang_find_pre_start_code(m_vbuffer+4+spsPos,destLength-4-spsPos);
    9. if(ppsPos<0) return 1;
    10. ppsPos+=4+spsPos;
    11. ipos=yang_find_pre_start_code(m_vbuffer+4+ppsPos,destLength-4-ppsPos);
    12. if(ipos<0) return 1;
    13. ipos+=4+ppsPos;
    14. spsLen=ppsPos-spsPos-4;
    15. ppsLen=ipos-ppsPos-4;
    16. yang_put_be32((char*)m_vbuffer,(uint32_t)spsLen);
    17. yang_put_be32((char*)(m_vbuffer+4+spsLen),(uint32_t)ppsLen);
    18. }

     

    五、第三方库编译

    需要编译的库有:libcrypto.a libssl.a libopus.a libspeexdsp.a libsrtp2.a libusrsctp.a livyuv.a

    第三方库可以在metartc仓库里自行下载源码,这里只描述如何编译成.a文件。

     1、编译openssl

    1. export CC=/opt/mips-gcc540-glibc222-32bit-r3.3.0/bin/mips-linux-gnu-gcc
    2. ./Configure linux-mips32
    3. make
    4. make install
    5. 生成的库在/usr/local/lib/目录下
    6. 值得注意的是,在arm交叉编译环境中,引用库的顺序为:-lssl -lcrypto,如果为 -lcrypto -lssl就会编译错误。

    2、编译opus/libyuv

    这两个库编译操作相同,也可以从libmetartccore工程里拷贝

    建立cmake_mips32.sh

    1. rm -rf build
    2. mkdir build
    3. cd build
    4. ARCH=mips32.cmake
    5. cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_TOOLCHAIN_FILE=../$ARCH ..
    6. make

    建立mips32.cmake

    1. SET(CMAKE_SYSTEM_NAME Linux)
    2. SET(CMAKE_C_COMPILER /opt/mips-gcc540-glibc222-32bit-r3.3.0/bin/mips-linux-gnu-gcc)
    3. SET(CMAKE_CXX_COMPILER /opt/mips-gcc540-glibc222-32bit-r3.3.0/bin/mips-linux-gnu-g++)
    1. chmod +x cmake_mips32.sh
    2. ./cmake_mips32.h

    .a文件会在当前目录build里。

    3、编译srtp

    1. ./configure --host=mips-linux-gnu --target=mips-linux-gnu
    2. make
    3. make install
    4. 生成的库在/usr/local/lib/下。

    4、编译libusrsctp

    1. git clone https://github.com/Kurento/libusrsctp.git
    2. cd libusrsctp
    3. ./bootstrap
    4. ./configure --host=mips-linux-gnu --target=mips-linux-gnu
    5. make
    6. sudo make install
    7. 生成的库在/usr/local/lib/目录下。

    5、编译speexdsp

    1. ./autogen.sh
    2. ./configure --host=mips-linux-gnu --target=mips-linux-gnu
    3. make
    4. make install
    5. 生成的库在/usr/local/lib/目录下

    libcrypto.a libssl.a libopus.a libspeexdsp.a libsrtp2.a libusrsctp.a libyuv.a文件拷贝到thirdparty/lib/mips32/ 目录下,至此,所需第三方库全部编译完成。

    以上库编译采用的是mips-linux-gnu工具链,适合君正T31平台。

    六、总结

    1、了解第三方库编译,为后续开发更好的移植

    2、metaipc作者已支持君正,瑞芯微,海思等平台,作者提供了编译好的第三方库,方便移植,在此表示感谢

    3、已在rv1126和t31x上测试。
     

    如有侵权,请及时联系博主删除,VX:18750903063

  • 相关阅读:
    13、用JS实现快速排序
    stream 里面的 Collectors.toMap 用法 ; list转map
    rust angular 自签名证书 wss
    PostgreSQL中 FETCH FIRST ... WITH TIES 是查询结果中限制返回的行数
    企业电子招标采购系统源码Spring Boot + Mybatis + Redis + Layui + 前后端分离 构建企业电子招采平台之立项流程图
    leetcode 965.单值二叉树
    SAP PI/PO中使用UDF解决按字节拆分字符串的需求
    webstorm实用技巧
    承包商在工程结算争议里能扭转乾坤的几点
    使用R语言进行Logistic回归分析(2)
  • 原文地址:https://blog.csdn.net/weixin_38807927/article/details/126067639