1. 三方工具
建议使用ffmpeg,这个工具多平台可用,命令行和API都有提供,非常便捷。下载的位置:
我工作在debian环境,下载对应的源码后编译:
./configure
make
make install
2. 视频存储的实现
2.1 分段存储 - 比如每15分钟
下面的脚本里 MIN_PER_FILE控制的是每个视频文件的最大尺寸
bash
#usage: video_recorder <video_file_path> <min_per_file> <rtsp_path>
RTSP_URL_WITH_PASSWORD='rtsp://admin:xxxx@192.168.0.6:554/Streaming/Channels/101?transportmode=unicast&profile=Profile_1'
MIN_PER_FILE=03
VIDEO_FILE_PATH='/tmp/video/' #include postfix
mkdir -p $VIDEO_FILE_PATH
ffmpeg -rtsp_transport tcp -i $RTSP_URL_WITH_PASSWORD -c:v libx265 -preset fast -crf 28 -t 00:$MIN_PER_FILE:00 $VIDEO_FILE_PATH$(date +"%Y%m%d%H%M%S").mp4
这个命令执行时因为环境的原因,可能会提示错误,我这边的一个纠错参见附录A,正确调用后:
Output #0, mp4, to '/tmp/video/20240807094508.mp4':
Metadata:
title : Media Presentation
encoder : Lavf61.1.100
Stream #0:0: Video: hevc (hev1 / 0x31766568), yuvj420p(pc, bt709, progressive), 1920x1080, q=2-31, 10 fps, 10240 tbn
Metadata:
encoder : Lavc61.3.100 libx265
Side data:
cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: N/A
frame= 1555 fps= 10 q=31.9 size= 12288KiB time=00:02:35.30 bitrate= 648.2kbits/s speed= 1x
估算,最终的视频文件尺寸,单通道.h265大概每15分钟45~50MBytes.
2.2 对齐到15分钟整边界
3.封装
附录A: ffmpeg视频存储,运行时错误处理
1.运行ffmpeg存储视频时
Unrecognized option 'preset'.
Error splitting the argument list: Option not found
1.1 处理
- 检查是x265编码器可能没有装
- ./configure --enable-libx265 --enable-libx264 --disable-x86asm --enable-gpl --pkg-config="pkg-config --static"
- 提示:ERROR: x264 not found using pkg-config
- sudo apt install pkg-config
- sudo apt install libx264-dev
- sudo apt install libx265-dev
- ./configure --enable-libx265 --enable-libx264 --disable-x86asm --enable-gpl
- make
- make install
附录B 服务创建加载以及运行时异常处理
1.service无法enable
Failed to enable unit: Unit file /etc/systemd/system/guide_video_storage_ch05.service is masked.
1.1 处理
在更新.service前,一定记得要先disable。如果出现mask:
sudo systemctl unmask guide_video_storage_ch05
sudo systemctl stop guide_video_storage_ch05
sudo systemctl disable guide_video_storage_ch05