目录
1. 环境
2. 启用gst-rtsp-server服务
3. 交叉编译测试程序examples
4. 推流测试
1. 环境
泰山派RK3566开发板的SDK使用了GStreamer媒体编解码框架,其扩展能力应该是优于ffmpeg,因此目前不考虑移植ffmpeg。要实现摄像头推流,还需要流体服务器。之前已经使用mediamtx做了测试,但后续需要在应用层面控制摄像头,也可能涉及一些功能需求,必须使用库函数方式。
分析了SDK文件,在\tspi_linux_sdk\buildroot\package\gstreamer1文件夹里,不仅包含gstreamer1和gst1-plugins-xxx插件,还看到了gst1-rtsp-server,集成1.18和1.20两个版本供选择。
################################################################################
#
# gst1-rtsp-server
#
################################################################################
GST1_RTSP_SERVER_VERSION = 1.20.0
GST1_RTSP_SERVER_SOURCE = gst-rtsp-server-$(GST1_RTSP_SERVER_VERSION).tar.xz
GST1_RTSP_SERVER_SITE = https://gstreamer.freedesktop.org/src/gst-rtsp-server
GST1_RTSP_SERVER_LICENSE = LGPL-2.1+
GST1_RTSP_SERVER_LICENSE_FILES = COPYING COPYING.LIB
GST1_RTSP_SERVER_CPE_ID_VENDOR = gstreamer_project
GST1_RTSP_SERVER_CPE_ID_PRODUCT = gst-rtsp-server
GST1_RTSP_SERVER_INSTALL_STAGING = YES
可以看到,如果启用gst-rtsp-server服务,会自行下载安装包。默认编译kernel是找不到gst-rtsp-server服务的,说明并没有启用。
2. 启用gst-rtsp-server服务
由于SDK里已经包含了必要的设置,启用gst-rtsp-server服务仅需要2个步骤
第一个是确认需要gst-rtsp-server服务的版本,按照说明,必须和gstreamer的版本一致。在开发板查看gstreamer的版本。
#确定GStreamer版本
root@RK356X:/# gst-inspect-1.0 --version
gst-inspect-1.0 version 1.20.0
GStreamer 1.20.0
Unknown package origin
的确是1.20,是一致的。
第二步就是开启gst-rtsp-server服务选项,让SDK编译并打包进去。我就去官网直接下载1.20包,将其放在tspi_linux_sdk\buildroot\dl文件夹里,下载链接
修改sdk/buildroot/configs/rockchip/video_gst.config文件,最后面添加一行
BR2_PACKAGE_GST1_RTSP_SERVER=y
然后就可以重新编译。
在output目录多了一个gst1-rtsp-server-1.20.0文件夹,在其中的gst子目录里有rtsp-server和rtsp-sink两个子目录,提供了rtsp server
但是,在gst1-rtsp-server-1.20.0/build这个文件夹里,没有examples文件夹。打开gst-rtsp-server-1.20.0.tar.xz包可以看到里面有examples和tests文件夹,里面是测试程序。我们需要自己来编译了。
3. 交叉编译测试程序examples
进入tspi_linux_sdk/buildroot/output/rockchip_rk3566/build/gst1-rtsp-server-1.20.0目录,在examples子目录里面有很多test测试源码,比如test-lanuch.c是启动rtsp服务拉流
gstreamer的包没用makefile,采用的是meson,应该是更加便捷,用ninja工具编译。
进入<sdk>/buildroot/output/rockchip_rk3566/build/gst1-rtsp-server-1.20.0文件夹,修改meson.build文件199行,把if判断注释掉,这样就直接编译examples文件夹了
subdir('gst')
#if not get_option('tests').disabled()
subdir('tests')
#endif
#if not get_option('examples').disabled()
subdir('examples')
#endif
subdir('docs')
进入build目录,编译后会生成examples及tests文件夹
cd build
ninja
4. 推流测试
将镜像烧写到开发板,将编译好的测试程序test-launch这些拷贝到开发板,记得确认下文件的运行权限。我这里是直接打包到镜像里了,进入程序所在目录
#摄像头推流,有1s多延迟
./test-launch "( v4l2src device=/dev/video0 ! video/x-raw, format=NV12, width=1920, height=1080, framerate=30/1 ! mpph264enc ! rtph264pay name=pay0 pt=96 )" &
#本地拉流
gst-launch-1.0 playbin uri=rtsp://127.0.0.1:8554/test
电脑端用vlc拉流
由于摄像头是定焦,自拍距离近了点,不太清晰。
后续可以参考测试程序编写应用程序,实现摄像头控制及其他扩展需求。