视频开发

EAIS-750E包含强大的硬件编解码器,支持H.264 4Kx2K@30fps和H.265 4Kx2K@60fps解码能力,实测支持
H.264 4路1920x1080@30fps 或 6路 1280x720@30fps 或 4路 2560x1440@20fps
H.264 4路1920x1080@30fps + H.265 4路1920x1080@30fps 同时解码
H.265 8路1920x1080@30fps
芯片上包含图形处理加速器GE2D,支持Crop,resize,rotation,水印等常见CV算子操作,支持JPEG图片硬件解码与编码。下面通过Sample代码来举例具体使用

Sample1 RTSP视频流硬解码+resize

该例子借助ffmpeg的视频流协议功能,调用芯片的vdec硬解码器和GE2D图形硬件加速器实现功能。
应用支持输入1-8路H.264/H.265RTSP视频流地址,显示视频流帧率,保存视频缩略图。
下载decode_example代码解压放到/home/ubuntu/ 路径下 下载链接 密码750e。

确认视频流输入

确认摄像头的RTSP推流服务地址,分辨率和编码格式是H264还是H265,并通过VLC确认视频流可访问。

配置视频流输入

修改stream.cfg文件,输入视频流地址,编码格式,以及设置是否保存缩略图
$ cd sample_decode
$ vi stream.cfg

support 4xH.264 4xH.265 1920x1080 rtsp stream hardware decoder

copy/delelte item to add/remove streams

codec 0: H.264,

1: H.265

record 0: decode only

1: decode resize to 640x360 BGR and record sample frame in ./data/

Note the file size is about 659KB/frame, DO NOT save too long or too many stream or too frequenctly

frequency N [1-25] default 5, save 1 frame every N frame, only valid when issave = 1

IPC : { ipc1:{rtsp = “rtsp://admin:oalb2018@192.168.3.64:554/h264/ch0/main/av_stream”; codec = 0; record = 0; frequency = 5; }; ipc2:{rtsp = “rtsp://admin:oalb2018@192.168.3.64:554/h264/ch0/main/av_stream”; codec = 0; record = 0; frequency = 5; }; ipc3:{rtsp = “rtsp://admin:oalb2018@192.168.3.64:554/h264/ch0/main/av_stream”; codec = 0; record = 0; frequency = 5; }; ipc4:{rtsp = “rtsp://admin:oalb2018@192.168.3.64:554/h264/ch0/main/av_stream”; codec = 0; record = 0; frequency = 5; }; };

有几路视频流就写几个ipc描述,支持H.264/H.265同时解码工作,修改完成后保存退出。

执行应用

直接运行run.sh启动命令。由于调用硬件解码器需要root权限,因此需要按提示输入sudo密码。
$ ./run.sh
一开始会输出一大堆warning,因为拉流建立连接需要时间,解码器没有获得正确数据而报警。当看到 init n succ code is h264/265信息时表示IPCn成功建立连接。

default INFO src/RtspMediaSource.cpp:70 Init 1 init succ code is h264

当所有视频流都建立连接后,程序会自动统计并输出平均帧率,表示解码成功。

4320 1162.038766 default INFO src/main.cpp:69 main str1@27fps, str2@26fps, str3@30fps, str4@30fps 4320 1163.039011 default INFO src/main.cpp:69 main str1@26fps, str2@26fps, str3@29fps, str4@29fps 4320 1164.039297 default INFO src/main.cpp:69 main str1@26fps, str2@26fps, str3@29fps, str4@29fps 4320 1165.039522 default INFO src/main.cpp:69 main str1@26fps, str2@26fps, str3@28fps, str4@28fps 4320 1166.039737 default INFO src/main.cpp:69 main str1@26fps, str2@26fps, str3@28fps, str4@28fps

开新控制终端用htop或top命令看CPU占用率,发现占用率低于10%。
需要退出解码应用时使用Ctrl+C强行结束进程。

保存视频缩略图并查看

配置stream.cfg文件,修改第一路视频流record=1,启用视频缩略图保存功能。frequency = 表示每5帧保存一帧,该参数为了存储/计算频率,变相减少存储空间和计算量。

  1. ipc1:{rtsp = "rtsp://admin:oalb2018@192.168.3.64:554/h264/ch0/main/av_stream";
  2. codec = 0; record = 1; frequency = 5;
  3. };

注:应用支持所有视频流都保存,但考虑到视频保存文件非常大,建议路数不要开太多,时间不要持续太久,采样率设低一些。
保存后退出,执行程序,大约10-30s后Ctrl+C强制结束进程。
$ ./run.sh
在./data路径下会有stream1.BGR文件。该文件是5帧取1帧保存的视频缩略图,分辨率640x360,图片格式为BGR裸数据,可以复制到上位机借助小工具vooya(下载密码750e)查看。
截图.JPG

基于缩略小图进一步做AI应用开发

虽然例子中缩略图是保存在磁盘上的,但只需要设置保存在内存里,就可以传递给Tengine等AI推理应用进一步AI开发应用。
Sample代码中以注释代码形式保留了保存1080P YUV原图的代码,以方便获取原图做其他应用。

Sample2 播放MP4文件,通过HDMI输出显示

未完待续