Nvidia提供gstreamer和ffmpeg两种方法来实现对于音视频流的解析和硬件解码操作。我们的盒子基于Nvidia标准release的ffmpeg4.2.2来实现该功能。
获取示例代码
git clone https://github.com/apoidea-xhiveai/jetson.git
音视频解码的代码路径为:jetson/hd_decoder/ffmpeg
编译示例代码
copy代码到盒子上
scp -r ffmpeg root@<ai box ip address>:/root
ssh登录盒子后,执行以下命令来编译代码:
cd /root/ffmpeg
make
编译成功后,生成可执行文件:ffmpeg_hd_decoder
执行示例代码
示例程序解析输入的视频流,把硬件解码后的YUV图片数据写入文件。该文件可以在PC上用查看原始YUV/RGB数据的图片工具来验证是否工作正常。
命令的格式如下:
./ffmpeg_hd_decoder
./ffmpeg_hd_decoder (compiled Jul 19 2022)
Usage ./ffmpeg_hd_decoder [OPTION]
-i <video streaem url> : video stream in rtsp/http/file ...
-o <decoded yuv file> : output file path
-c <number of yuv frames>(default: 1) : the number of video frames
-h, --help : print this help and exit
-i: 输入的视频流可以为: http, rtsp, file 等格式
-o: 输出YUV文件的路径
-c: 指定输出几帧图片。默认是1帧
例子:
./ffmpeg_hd_decoder -i rtsp://admin:Apoidea_China@10.0.1.188 -o out.yuv
在操作实时rtsp流的时候,可能会遇到播放视频滞后的问题(譬如,你在camera前作出一个动作,但是解码后显示到LCD上有一定的延时)。这可以通过调整"nobuffer",“probesize” 等参数可以大幅减少这种delay。