目录
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两个版本供选择,其中1.20是默认选项。浏览1_20.inc文件
################################################################################
#
# 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服务,buildroot会去gstreamer.freedesktop.org自行下载对应版本的安装包。但在默认状态编译泰山派kernel时后没有提供gst-rtsp-server服务,说明SDK里并没有启用。
2. 启用gst-rtsp-server服务
由于SDK里已经包含了相关的必要的设置和工具,启用gst-rtsp-server服务仅需要3个步骤:
第一步是确认需要选择的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,与SDK默认版本的是一致的。
第二步就是开启gst-rtsp-server服务选项,让SDK编译并打包进去。去官网直接下载1.20包(不预先准备应该也是可以的,上面分析是能够自行下载包的),将其放在tspi_linux_sdk\buildroot\dl文件夹里,dl这个文件夹存放buildroot所有压缩包。下载链接
第三步是修改sdk/buildroot/configs/rockchip/video_gst.config文件,最后面添加一行
BR2_PACKAGE_GST1_RTSP_SERVER=y
使能gst-rtsp-server服务,然后就可以重新编译。同意更新定义
在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目录,执行ninja编译后会生成examples及tests文件夹,里面是编译好的程序
cd build
ninja
4. 开发板推流测试
将镜像烧写到开发板,将编译好的测试程序test-launch等这些文件拷贝到开发板,记得确认下文件的运行权限。我这里是直接打包到镜像里了。进入程序所在目录执行test-launch启动rtsp服务并从摄像头推流
#摄像头推流,有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 )" &
没有摄像头也可以用测试信号推流
#测试信号推流
./test-launch "( videotestsrc ! mpph264enc ! rtph264pay name=pay0 pt=96 )" &
本地拉流,在屏幕上输出
#本地拉流
gst-launch-1.0 playbin uri=rtsp://127.0.0.1:8554/test
电脑端用vlc拉流
由于摄像头是定焦的,自拍距离近了点,不太清晰。
后续将参考测试程序编写应用程序,实现摄像头控制及其他扩展需求。