rk3588/rk356x/rv1109/rv1126 live555移植+mpp编译 rtsp拉流

本文主要是为了记录一下rk板子的踩坑日记。
项目主要是rk3588 rtsp拉流。

mpp编译

1.下载MPP源码:https://github.com/rockchip-linux/mpp
2.rk3588/rk356x的板子进入Mpp源码目录mpp/build/linux/aarch64(rk3588/rk356x是64位板子)中,修改arm.linux.cross.cmake文件中的配置

cmake_minimum_required( VERSION 2.6.3 )

SET(CMAKE_SYSTEM_NAME Linux)
SET(CMAKE_C_COMPILER "aarch64-linux-gnu-gcc")
SET(CMAKE_CXX_COMPILER "aarch64-linux-gnu-g++")
#SET(CMAKE_SYSTEM_PROCESSOR "armv7-a")
SET(CMAKE_SYSTEM_PROCESSOR "armv8-a")

add_definitions(-fPIC)
add_definitions(-DARMLINUX)
add_definitions(-Dlinux)

修改make-Makefiles.bash的配置,主要改MPP_TOOLCHAIN编译链(rk3588/rk356x的交叉编译链)

#!/bin/bash
# Run this from within a bash shell
set +e
MPP_PWD=`pwd`
MPP_TOP=${MPP_PWD}/../../..
# toolchain detection
check_cmd(){
    "$@" >> /dev/null 2>&1
}
check_system_arm_linux_gcc(){
    check_cmd aarch64-linux-gnu-gcc -v
}
check_system_arm_linux_gcc
if [ $? -eq 127 ];then
    #MPP_TOOLCHAIN=/usr/bin
    MPP_TOOLCHAIN=~/3gi/software/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin
    export PATH=$PATH:${MPP_TOOLCHAIN}
fi
# generate Makefile
cmake -DCMAKE_BUILD_TYPE=Release \
      -DCMAKE_TOOLCHAIN_FILE=./arm.linux.cross.cmake \
      -DHAVE_DRM=ON \
      -G "Unix Makefiles" \
      ${MPP_TOP}

rv1109/1126是32位系统,则进入mpp/build/linux/arm,修改配置的如下:

cmake_minimum_required( VERSION 2.6.3 )
SET(CMAKE_SYSTEM_NAME Linux)
SET(CMAKE_C_COMPILER "arm-linux-gnueabihf-gcc")
SET(CMAKE_CXX_COMPILER "arm-linux-gnueabihf-g++")
SET(CMAKE_SYSTEM_PROCESSOR "armv7-a_hardfp")
add_definitions(-fPIC)
add_definitions(-DARMLINUX)
add_definitions(-D__gnu_linux__)
#!/bin/bash
# Run this from within a bash shell
set +e
MPP_PWD=`pwd`
MPP_TOP=${MPP_PWD}/../../..
# toolchain detection
check_cmd(){
    "$@" >> /dev/null 2>&1
}
check_system_arm_linux_gcc(){
    check_cmd arm-linux-gcc -v
}
check_system_arm_linux_gcc
if [ $? -eq 127 ];then
    #MPP_TOOLCHAIN=${MPP_TOP}/../prebuilts/toolschain/usr/bin
    MPP_TOOLCHAIN=~/3gi/software/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf/bin
    export PATH=$PATH:${MPP_TOOLCHAIN}
fi
# generate Makefile
cmake -DCMAKE_BUILD_TYPE=Release \
      -DCMAKE_TOOLCHAIN_FILE=./arm.linux.cross.cmake \
      -DHAVE_DRM=ON \
      -G "Unix Makefiles" \
      ${MPP_TOP}
  1. 执行 ./make-Makefiles.bash 后脚本会把需要文件都拷贝到该目录下,再执行 make命令就可以生成so文件和可执行文件,如果想要生成库的形式让别的程序调用可以按照如下的命令:
./make-Makefiles.bash
make 
export DESTDIR=./install
make install

执行上述命令后就可以在该目录的install文件夹下生成如下文件:
在这里插入图片描述
然后就可以让别的程序调用它了。
4.如果想在板子上执行生成的应用程序,要把这些执行文件和so文件都adb push 到板端上,然后执行应用程序,比如
./mpi_dec_test -t 7 -i BarbieGirl.h264 -n 10
就会看到如下打印(我是在rk3588上执行的)
在这里插入图片描述
如果没有打印信息,可能新版mpp程序把打印接口改为系统log,可以在板端另外开一个命令行使用命令tail -10f /var/log/messages,也可以看到打印信息

编译live555

  1. 下载live555源码: http://www.live555.com/liveMedia/public/
  2. 进入源码目录,新增config.rk3588(根据个人编译器指定内容),内容如下:
CROSS_COMPILE?=         /home/software/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-
COMPILE_OPTS =          $(INCLUDES) -I. -O2 -DSOCKLEN_T=socklen_t -DNO_SSTREAM=1 -D_LARGEFILE_SOURCE=1 -D_FILE_OFFSET_BITS=64 -DNO_OPENSSL=1 -DLOCALE_NOT_USED -DDEBUG
C =                     c
C_COMPILER =            $(CROSS_COMPILE)gcc
C_FLAGS =               $(COMPILE_OPTS)
CPP =                   cpp
CPLUSPLUS_COMPILER =    $(CROSS_COMPILE)g++
CPLUSPLUS_FLAGS =       $(COMPILE_OPTS) -Wall -DBSD=1
OBJ =                   o
LINK =                  $(CROSS_COMPILE)g++ -o
LINK_OPTS =
CONSOLE_LINK_OPTS =     $(LINK_OPTS)
LIBRARY_LINK =          $(CROSS_COMPILE)ar cr 
LIBRARY_LINK_OPTS =     $(LINK_OPTS)
LIB_SUFFIX =                    a
LIBS_FOR_GUI_APPLICATION =
EXE =
PREFIX =                /home/test/rtsp/live/live555_install

CROSS_COMPILE为自己的编译链,PREFIX为自己想要生成的安装路径,安装路径可以随意改。
3.运行genMakefiles生成makefile,根据后缀名匹配对应的config文件,命令如下:

./genMakefiles rk3588

4.执行make命令,再执行make install,就可以生成静态库和头文件让别的工程引用它了

tree
.
├── bin
├── include
│   ├── BasicUsageEnvironment 
│   ├── groupsock
│   ├── liveMedia
│   └── UsageEnvironment
└── lib
    ├── libBasicUsageEnvironment.a
    ├── libgroupsock.a
    ├── libliveMedia.a
    └── libUsageEnvironment.a

引用时要注意这4个库的引用顺序,顺序不对会报错


target_link_libraries(${PROJECT_NAME}  
        ${LIVE_PATH}/libliveMedia.so
        ${LIVE_PATH}/libBasicUsageEnvironment.so
        ${LIVE_PATH}/libgroupsock.so
        ${LIVE_PATH}/libUsageEnvironment.so
        rockchip_mpp
        utils
        ${RK_DRM_LIB}
        pthread
        rga
        )

如果想实现rk3588的拉流,可以参考以下链接:
Liunx_mpp :
https://github.com/WainDing/mpp_linux_cpp
https://github.com/MUZLATAN/ffmpeg_rtsp_mpp
mpp的运行可以参考官方文档的mpi_dec_test.c、mpi_dec_mt_test.c、mpi_dec_multi_test.c几个例子

live555:
参考live555的码源给的/testProgs/testRTSPClient.cpp拉流代码
https://github.com/wexiangis/rtsp_to_h264 这个是live555接收h264的demo
补:
RK官方已放出各平台的rtsp代码,去model zoo就可以找到
更多
更多内容请关注公众号,了解嵌入式ai前沿资讯!

  • 7
    点赞
  • 58
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
### 回答1: 这是一段错误信息,指出在路径"/home/share/rv1126_sdk_2_2_4/external/mpp/osal/mpp_soc.cpp"的第19行发生了错误。 根据路径结构,这是一段代码文件mpp_soc.cpp,位于路径"/home/share/rv1126_sdk_2_2_4/external/mpp/osal/"下。 错误信息没有具体说明错误的性质,可能是编译错误、语法错误、逻辑错误等等。想要解决这个错误,我们需要查看相应的代码文件并检查第19行附近的代码。 可能的解决方法包括: 1. 检查第19行的代码,确认是否有语法错误、拼写错误等问题。 2. 检查变量、函数或方法是否正确声明和调用,确保其存在和正确使用。 3. 查找相关的编译或运行日志,以获取更多关于错误的信息,有助于确定出错原因。 4. 如果有编译选项或相关配置文件,检查其是否正确设置。 5. 可以尝试使用调试器逐行调试代码,以确定错误发生的具体位置和原因。 总结起来,对于这个错误信息,我们需要检查并排除代码中的错误,找出根本原因并进行相应的修复。 ### 回答2: "/home/share/rv1126_sdk_2_2_4/external/mpp/osal/mpp_soc.cpp:19" 是一个文件路径和行号的错误信息提示。该提示表明在指定的路径中的 "mpp_soc.cpp" 文件的第19行出现了错误。 根据错误提示的信息,我们可以推测这个错误很可能与文件中的代码有关。可能是代码中存在语法错误、逻辑错误或者其他类型的错误导致了程序运行失败。 要解决这个错误,首先需要定位到 "mpp_soc.cpp" 文件的第19行,进一步分析代码,检查是否存在拼写错误、缺少分号、参数不匹配等常见的语法错误。还可以通过调试器逐步执行代码,观察错误发生的具体情况,进一步定位问题所在。 此外,还可以查看错误信息中提到的文件路径是否正确,有时候错误可能是由于文件路径不正确导致的。可以检查该路径是否存在、拼写是否正确,并确保程序有访问该路径的权限。 最后,如果以上方法都无法解决问题,可以尝试搜索相关的错误提示信息,查找相关的解决方案或者寻求开发者社区的帮助,以解决该错误。 ### 回答3: /home/share/rv1126_sdk_2_2_4/external/mpp/osal/mpp_soc.cpp:19: 是一个文件路径,它表示在rv1126_sdk_2_2_4目录下的external/mpp/osal目录中的mpp_soc.cpp文件的第19行。 这个文件路径告诉我们,这是一个文件在计算机文件系统中的位置。文件路径的组成部分是目录名和文件名,在这个路径中,我们可以看到rv1126_sdk_2_2_4是根目录,它下面有一个external目录,再下面有一个mpp目录,最后是osal目录。在osal目录中,有一个名为mpp_soc.cpp的文件。:19表示文件的第19行。 文件路径的用途是唯一标识文件的位置,通过文件路径,我们可以准确定位到计算机文件系统中的一个特定文件。对于程序员来说,文件路径非常重要,因为它指导了他们在编程时需要操作的文件的位置。在这个路径中,我们可以看到这个文件位于一个SDK的外部目录,这意味着该文件可能是SDK中用于操作硬件设备的一部分。 在这个特定的路径中,文件应该是一个名为mpp_soc.cpp的源代码文件。通过这个文件的路径和行号,程序员可以准确地定位到代码中的某一行,以便调试和修改代码错误。 总之,/home/share/rv1126_sdk_2_2_4/external/mpp/osal/mpp_soc.cpp:19: 表示文件路径为/home/share/rv1126_sdk_2_2_4/external/mpp/osal/mpp_soc.cpp,要操作的文件为mpp_soc.cpp,位于该文件的第19行。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值