MetaRTC-ffmpeg arm移植

touch cmake_arm.sh

添加

cpp 复制代码
rm -rf build
mkdir build
cd build
ARCH=aarch64.cmake
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_TOOLCHAIN_FILE=../$ARCH  ..
make

touch cmake_arm.sh

添加

cpp 复制代码
SET(CMAKE_SYSTEM_NAME Linux)
SET(CMAKE_C_COMPILER /home/yqw/MetaRTC/BC/stbgcc-6.3-1.1/bin/arm-linux-gcc)
SET(CMAKE_CXX_COMPILER /home/yqw/MetaRTC/BC/stbgcc-6.3-1.1/bin/arm-linux-g++)

将这两个文件放入libmetartc6

./cmake_arm.sh

srtp

cpp 复制代码
./configure --prefix="/home/yqw/temp/ffmpeg-webrtc/FFmpeg-n4.3.3/metartc6/libsrtp-2-fit" --host="arm-linux" --enable-static --enable-shared CC=/home/yqw/MetaRTC/BC/stbgcc-6.3-1.1/bin/arm-linux-gcc
make -j20

RV32

cpp 复制代码
export PATH=$PATH:/home/yqw/MetaRTC/RV/usr/bin
cpp 复制代码
./configure --prefix="/home/yqw/temp/ffmpeg-webrtc/FFmpeg-n4.3.3/metartc6/libsrtp-2-fit" --host="arm-linux" --enable-static --enable-shared CC=arm-linux-gnueabihf-gcc

openssl

cpp 复制代码
 ./config no-asm shared no-async --prefix=$(pwd)/build --cross-compile-prefix=/home/yqw/MetaRTC/BC/stbgcc-6.3-1.1/bin/arm-linux-
 make -j20
 sudo make install

RV32

cpp 复制代码
export PATH=$PATH:/home/yqw/MetaRTC/RV/usr/bin
cpp 复制代码
./config no-asm shared no-async --prefix=$(pwd)/build --cross-compile-prefix=arm-linux-gnueabihf-

然后把Makefile中的所有的-m64删去

在build中到.a

编译ffmpeg

cpp 复制代码
./configure --cross-prefix=/home/yqw/MetaRTC/BC/stbgcc-6.3-1.1/bin/arm-linux- --enable-cross-compile --target-os=linux --cc=/home/yqw/MetaRTC/BC/stbgcc-6.3-1.1/bin/arm-linux-gcc --arch=arm --prefix=$(pwd)/build32 --disable-shared --enable-static --extra-libs='-L/home/yqw/temp/ffmpeg-webrtc/FFmpeg-n4.3.3/metartc6 -lmetartccore6 -lpthread -lsrtp2 -lssl -lcrypto -ldl'

RV32

cpp 复制代码
./configure --cross-prefix=/home/yqw/MetaRTC/RV/bin/arm-linux-gnueabihf- --enable-cross-compile --target-os=linux --cc=arm-linux-gnueabihf-gcc --arch=arm --prefix=$(pwd)/build_RV32 --disable-shared --enable-static --extra-libs='-L/home/yqw/temp/ffmpeg-webrtc/FFmpeg-n4.3.3/metartc6 -lmetartccore6 -lpthread -lsrtp2 -lssl -lcrypto -ldl'

注意这里的dl和pthread是调用交叉编译工具链中的库;当写在同一个--extra-libs里时没有顺序之分,如果用两个--extra-libs,那么就有加载的顺序之分,比如crypto里要用到dl,那么dl就需要放在它的前面加载。

第二个注意点,无法把ffmepg编译成动态库,不然会报如下错误:

cpp 复制代码
libmetartccore6.a(YangMetaConnection.c.o): relocation R_ARM_THM_MOVW_ABS_NC against `a local symbol' can not be used when making a shared object; recompile with -fPIC

/home/yqw/temp/ffmpeg-webrtc/FFmpeg-n4.3.3/metartc6/metartc6/include/yang_config.h

#define Yang_Enable_Dtls 1 //default:using dtls

#define Yang_Enable_Openssl 1

#define Yang_Enable_RTC_Video 0

metartc支持mips32位,支持arm64,不支持arm32位,在arm32下报下列错误,这个错误是对内存的越界操作,然后再free(),目前metartc6和7都不支持arm32。

webrtc init>>>>>>>>>>>>>>>>>>>http://192.168.100.77:1985/tc/v1/whip/?app=live\&stream=livestream

webrtc @ 0x189c3c0 webrtc_open http://192.168.100.77:1985/tc/v1/whip/?app=live\&stream=livestream

srtp init success!

*** Error in `/usr/data/ffmpeg': free(): invalid next size (fast): 0x0189cd20 ***

Program received signal SIGABRT, Aborted.

0xb6e515f6 in ?? () from /lib/libc.so.6

(gdb) bt

#0 0xb6e515f6 in ?? () from /lib/libc.so.6

#1 0xb6e5f2ac in raise () from /lib/libc.so.6

#2 0xb6e5ff9a in abort () from /lib/libc.so.6

#3 0xb6e86bba in ?? () from /lib/libc.so.6

Backtrace stopped: previous frame identical to this frame (corrupt stack?)

相关推荐
女神下凡14 小时前
芯参谋(77):裸机(无 OS)存储驱动开发指南
arm开发·单片机·嵌入式硬件·设计规范·1024程序员节
女神下凡15 小时前
芯参谋(76):电源监控复位芯片电路设计指南
arm开发·单片机·嵌入式硬件·fpga开发·设计规范
陌上花开缓缓归以16 小时前
liteos 内存分布
arm开发
甜到心里的蛋糕16 小时前
AI 生成 MV 音频异响排查:频谱定位、片段替换与 Nginx 缓存
人工智能·python·nginx·ffmpeg·音视频·音频处理
探鸽小钛1 天前
4G 终端 ES8311 - 挂断一次,下次说话就没声了之解决办法
物联网·音视频·嵌入式·esp32·webrtc
u0109053592 天前
(永久免费)树莓派 / 香橙派等开发板,安装神卓互联巴比达内网穿透安装教程(Linux ARM 版 V9.4.1)
linux·运维·arm开发
打工仔折腾 AI2 天前
后端部署避坑:吃透IPv4地址、网络接口与CIDR前缀的实际应用
arm开发·人工智能·后端·python·性能优化
草根大哥2 天前
AI 编程实践之自建视频CDN
音视频·webrtc·低延迟直播·视频cdn·低延迟cdn
白搞电子2 天前
ESP-Mosaico 音乐驱动动画:节拍检测、RMS 包络与预制动作编排
ffmpeg
FlightYe3 天前
视界原理之3D视频(三):解码和显示
android·linux·3d·ffmpeg·音视频·android runtime