一直想做一个小车, 可以通过4G推流, 没想到现在很多云服务提供商, SRS云服务器已经可以一键搭建了.
硬件方面, 就是一个1126驮着一个3516, 1126负责4G连接, 转流到Intenet, 3516负责vi_venc_rtsp
思路如下, 我的1126的摄像头一直没能横过来, 所以就不用1126的摄像头了, 先用3516建立rtsp服务.
源码在:
https://github.com/MontaukLaw/hi3516_rtsp
然后由于原子的1126, 可以插4G网卡, 我就用1126做一个推流的工具+上网.
推流使用的是ZLMedia, ZLMedia可以将rtsp的流, 推到rtmp的服务器上去.
ZLMedia的交叉编译方法是:
git clone --depth 1 https://gitee.com/xia-chu/ZLMediaKit
cd ZLMediaKit
git submodule update --init
修改tests\test_pusher.cpp这个文件的main函数为:
int main(int argc, char *argv[]) {
// 输入参数数量小于2个, 就返回报错
if (argc < 3) {
ErrorL << "example: ./test_pusher rtsp://192.168.1.99/live/1 rtmp://remote_server/live/main_stream" << endl;
}
return domain(argv[1], argv[2]);
}
这个含义就是第一个参数做拉流地址, 第二个参数做推流地址, 非常简单.
然后在根目录建一个arm_build.cmake文件, 内容为:
SET(CMAKE_SYSTEM_NAME Linux)
SET(CMAKE_SYSTEM_PROCESSOR arm)
set(CMAKE_STAGING_PREFIX /home/marc/ZL_Install)
SET(TOOLCHAIN_DIR "/opt/atk-dlrv1126-toolchain")
SET(CMAKE_FIND_ROOT_PATH ${TOOLCHAIN_DIR})
SET(CMAKE_C_COMPILER ${TOOLCHAIN_DIR}/bin/arm-linux-gnueabihf-gcc)
SET(CMAKE_CXX_COMPILER ${TOOLCHAIN_DIR}/bin/arm-linux-gnueabihf-g++)
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
然后
mkdir build
cd build
cmake ..
make -j4
编译之后搜索一下test_pusher这个应用, 复制到1126的板子上, 这个时候就可以测试一下rtsp转推是否好用了, 在windows上面跑一下
mediamtx, 参考我这个博客:
https://blog.csdn.net/zunly/article/details/135929959?spm=1001.2014.3001.5502
在局域网看看转流是否好使
./test_pusher rtsp://192.168.1.99/live/1 rtmp://192.168.1.242:1935/live/1
注意, 前面的rtsp是我3516的rtsp流地址, 后面的rtmp是我windows上面的mediamtx的rtmp地址, 注意网络要都通起来.
这样通过vlc就可以播放rtmp://192.168.1.242:1935/live/1这个流的视频了.
接下来把这个windows上面干的活儿, 弄到Intenet上去.
去腾讯云, 花大概50-70一个月, 弄一个srs的轻量服务器, 啥都不用做, 实例创建完毕之后, 就可以打开管理界面(注意, 这里我折腾了半个小时, 才发现, 一定要先把梯子关了…)
到这一步几乎就比较傻瓜了, 开防火墙, 然后把转流的命令中的rtmp地址, 换成这个云服务器上的rtmp地址, 就可以通过各种协议获取到这个流了.
是不是很简单?
下面的拉流地址就是:
rtmp://43.139.145.myip/live/livestream?secret=e8c13b9687ec47f_my_key
遗留问题:
为啥入带宽有9M