4. 使用sophon-sample
sophon-sample在不同的Linux发行版上提供不同类型的安装方式。请根据您的系统选择对应的方式,不要在一台机器上混用多种安装方式。 以下描述中“v23.05.01”仅为示例,视当前实际安装版本会有变化。
- 下文中$arch $system根据实际架构进行配置:
主机为x86 cpu的,$arch为amd64, $system为x86_64
主机为arm64或飞腾cpu的,$arch为arm64, $system为aarch64
如果使用Debian/Ubuntu系统:
- sophon-sample安装包由以下文件构成:
sophon-mw-sophon-sample_v23.05.01_$arch.deb
如果使用Fedora/CentOS系统:
- sophon-sample安装包由以下文件构成:
sophon-mw-sophon-sample_v23.05.01_$arch.rpm
其中:
sophon-mw-sophon-sample包含了数个用于测试sophon-ffmpeg/sophon-opencv的应用程序;
sophon-mw-sophon-sample依赖上一章节的sophon-ffmpeg/sophon-opencv包。
安装步骤如下:
安装libsophon依赖库(参考《LIBSOPHON使用手册》)
安装sophon-mw(参考上一章节)
安装sophon-sample
如果使用Debian/Ubuntu系统:
sudo dpkg -i sophon-mw-sophon-sample_v23.05.01_$arch.deb
如果使用Fedora/CentOS系统:
sudo rpm -ivh sophon-mw-sophon-sample_v23.05.01_$arch.rpm
安装位置为:
/opt/sophon/ ├── libsophon- v23.05.01├── libsophon-current -> /opt/sophon/libsophon v23.05.01├── sophon-ffmpeg v23.05.01├── sophon-ffmpeg-latest -> /opt/sophon/sophon-ffmpeg v23.05.01├── sophon-opencv v23.05.01├── sophon-opencv-latest -> /opt/sophon/sophon-opencv v23.05.01├── sophon-sample_ v23.05.01│ ├── bin │ │ ├── test_bm_restart │ │ ├── test_ff_bmcv_transcode │ │ ├── test_ff_scale_transcode │ │ ├── test_ff_video_encode │ │ ├── test_ff_video_xcode │ │ ├── test_ocv_jpubasic │ │ ├── test_ocv_jpumulti │ │ ├── test_ocv_vidbasic │ │ ├── test_ocv_video_xcode │ │ ├── test_ocv_vidmulti │ │ └── water.bin │ ├── data │ └── sample └── sophon-sample-latest -> /opt/sophon/sophon-sample_ v23.05.01
deb包安装方式并不允许您安装同一个包的多个不同版本,但您可能用其它方式在/opt/sophon下放置了若干不同版本。 在使用deb包安装时/opt/sophon/sophon-sample-latest会指向最后安装的那个版本。在卸载后,它会指向余下的最新版本(如果有的话)。
注意:soc模式下,deb安装包为
sophon-mw-soc-sophon-sample_v23.05.01_arm64.deb
安装位置同上
卸载方式:
如果使用Debian/Ubuntu系统:
sudo apt remove sophon-mw-sophon-sample 或者:
sudo dpkg -r sophon-mw-sophon-sample_v23.05.01_$arch.deb
如果使用Fedora/CentOS系统:
sudo rpm ‑e sophon-mw-sophon-sample_v23.05.01_$arch.rpm
用例介绍:
test_bm_restart
此用例主要用于测试ffmpeg模块下的视频解码功能和性能,支持多路解码和断线重连功能。用户可以通过用例监测视频、码流的解码情况。
test_bm_restart [api_version] [yuv_format] [pre_allocation_frame] [codec_name] [sophon_idx] [zero_copy] [input_file/url] [input_file/url]
参数:
- -api_version
指定解码过程使用的ffmpegAPI版本
0: 使用老版本的解码avcodec_decode_video2接口
1: 使用新版解码avcodec_send_packet接口
2: 使用av_parser_parse2的API用于抓包
- -yuv_format
是否压缩数据,
0表示不压缩
1表示压缩
- -pre_allocation_frame
允许的缓存帧数,最多为64
- -codec_name
指定解码器,可选择 h264_bm/hevc_bm,no为不指定
- -sophon_idx
若处于SOC模式,该选项可以随意设置(不可为空),其值将会被忽略
- -zero_copy
若处于SOC模式,0表示启用Host memory, 1表示不启用若处于 PCIE模式,该选项可以随意设置(不可为空),其值将会被忽略
- -input_file_or_url
输入的文件路径或码流地址
e.g
test_bm_restart 1 0 1 no 0 1 ./example0.mp4 ./example1.mp4 ./example2.mp4
test_ff_bmcv_transcode
此用例主要用于测试ffmpeg模块下的视频转码功能和性能,通过调用ff_video_decode,ff_video_encode用例中的数据类型和函数,来实现先解码后编码的转码过程,以此保证解码和编码功能的正确性。同时此用例也可测试ffmpeg下的转码性能,运行时程序会输出即时转码帧率供参考。
test_ff_bmcv_transcode [platform] [src_filename] [output_filename] [encode_pixel_format] [codecer_name] [width] [height] [frame_rate] [bitrate] [thread_num] [zero_copy] [sophon_idx] <optional: enable_mosaic> <optional: enable_watermark>
参数:
- -platform
平台: soc 或者 pcie
- -src_filename
输入文件名 如x.mp4 x.ts 等
- -output_filename
转码输出文件名 如x.mp4,x.ts 等
- -encode_pixel_format
编码格式 如 I420.
- -encoder_name
编码 h264_bm,h265_bm.
- -width
编码宽度 (32,4096]
- -height
编码高度 (32,4096]
- -frame_rate
编码帧率
- -bitrate
编码比特率encode bitrate 500 < bitrate < 10000
- -thread_num
线程数量
- -zero_copy
PCie模式: 0: 开启主从内存复制, 1: 关闭. SoC模式: 任何数字均可以,但是无效
- -sophon_idx
PCie模式: sophon设备id SoC模式: 任何数字均可以,但是无效
- -enable_mosaic
可选, 在左上角添加马赛克, 目前仅支持bm1686且-encode_pixel_format] 为I420
- -enable_watermark
可选,给视频添加水印,目前仅支持bm1686且-encode_pixel_format] 为I420
e.g
pcie mode example:
test_ff_bmcv_transcode pcie example.mp4 test.ts I420 h264_bm 800 400 25 3000 3 0 0
soc mode example:
test_ff_bmcv_transcode soc example.mp4 test.ts I420 h264_bm 800 400 25 3000 3 0 0
test_ff_scale_transcode
此用例主要用于测试 ffmpeg 下视频转码的功能和性能。此功能通过先解码再编码的过程实现,主要调用了 ff_video_decode,ff_video_encode 中的数据类型和函数。
test_ff_scale_transcode [src_filename] [output_filename] [encode_pixel_format] [codecer_name] [height] [width] [frame_rate] [bitrate] [thread_num] [zero_copy] [sophon_idx]
参数:
- -src_filename
输入文件名 如 x.mp4 x.ts…
- -output_filename
输出文件名 如 x.mp4,x.ts…
- -encode_pixel_format
编码格式 如 I420
- -codecer_name
编码名 如 h264_bm,hevc_bm,h265_bm
- -height
编码高度
- -width
编码宽度
- -frame_rate
编码帧率
- -bitrate
编码比特率
- -thread_num
使用线程数
- -zero_copy
0: copy host mem,1: nocopy.
- -sophon_idx
设备索引
e.g
test_ff_scale_transcode example.mp4 test.ts I420 h264_bm 800 400 25 3000 3 0 0
test_ff_video_encode
此用例主要用于测试ffmpeg模块下视频的编码功能。输入的视频限制为I420和NV12格式。通过调用此用例用户可以得到封装好的视频文件,ffmpeg支持的视频格式均可。
test_ff_video_encode <input file> <output file> <encoder> <width> <height> <roi_enable> <input pixel format> <bitrate(kbps)> <frame rate> <sophon device index>
- -input_file
输入视频路径
- -output_file
输出视频文件名
- -encoder
H264或者H265,默认为H264
- -width
视频宽度,输出与输入需一致,256 <= width <= 8192
- -height
视频高度,输出与输入需一致,128 <= height <= 8192
- -roi_enable
是否开启roi,0表示不开启,1表示开启
- -input_pixel_format
I420(YUV, 默认), NV12.
- -bitrate
输出比特率,10 < bitrate <= 100000,默认为帧率x宽x高/8
- -framerate
输出帧率,10 < framerate <= 60,默认为30
- -sophon_device_index
pcie模式可用,指定运行的设备号,最小为0
e.g
test_ff_video_encode <input file> <output file> H264 width height 0 I420 3000 30 2
test_ff_video_encode <input file> <output file> H264 width height 0 I420 3000 30
test_ff_video_encode <input file> <output file> H265 width height 0 I420
test_ff_video_encode <input file> <output file> H265 width height 0 NV12
test_ff_video_encode <input file> <output file> H265 width height 0
test_ff_video_xcode
此用例主要用于测试ffmpeg下视频转码的功能和性能。此功能通过先解码再编码的过程实现,主要调用了ff_video_decode,ff_video_encode中的数据类型和函数。 转码后的视频分辨率与原视频一致,比特率不能超过10000kbps 或小于 500kbps,否则会被置为默认值3000kbps。 转码后的视频如比特率与原视频一致,那么时长也应一致。有一些丢帧属于正常现象。
test_ff_video_xcode <input file> <output file> encoder framerate bitrate(kbps) isdmabuffer pcie_no_copyback sophon_idx
- -input_file
输入文件
- -output_file
输出文件
- -encoder
编码器 H264 或者 H265.
- -isdmabuffer
是否开启内存一致,1表示不开启,0表示开启
PCIE模式下可选:
- -pcie_no_copyback
表示不将解码后YUV数据复制到host主机内存,0表示复制YUV数据到host主机内存
- -sophon_idx
指定card编号,默认为0
e.g
test_ff_video_xcode ./file_example_MP4_1920_18MG.mp4 tran5.ts H264 30 3000 1 1 0
test_ff_video_xcode ./file_example_MP4_1920_18MG.mp4 tran5.ts H264 30 3000 0 0 0
test_ff_video_xcode ./file_example_MP4_1920_18MG.mp4 tran5.ts H264 30 3000 1 0 0
test_ocv_jpubasic
此用例主要用于测试图片编解码的基本功能。 此用例进行了3种测试,主要调用了opencv中的imread,imwrite,imdecode,imencode等接口用不同方式实现图片的编解码。
test_ocv_jpubasic <file> <loop> <yuv_enable> <dump_enable> [card]
- -file
图片文件路径
- -loop
循环次数
- -yuv_enable
0表示解码后输出BGR格式,1表示解码后输出YUV格式
- -dump_enable
1表示输出dump文件,0表示不输出
- -card
pcie模型下可选。指定运行的card编号
e.g
test_ocv_jpubasic 1920x1080_gray.jpg 1000 1 1 0
test_ocv_jpumulti
此用例主要用于测试多路图片编解码的功能和性能。
test_ocv_jpumulti <test type> <inputfile> <loop> <num_threads> <outjpg> [card]
- -test_type
测试类型,1表示只解码,2表示只编码,3表示解码编码混合
- -inputfile
输入文件
- -loop
循环次数
- -num_thread
线程数,最小为1,最大为12
- -outjpg
是否输出图片,1表示输出,0表示不输出
- -card
PICE模式下可选参数。指定运行的card编号
e.g
test_ocv_jpumulti 3 1088test1_420.jpg 10 2 1 0
test_ocv_vidbasic
此用例主要用于测试视频记录为 png 或 jpg格式的功能。如果启用dump,则也可输出 BGR 或 YUV 格式的原始数据。
test_ocv_vidbasic <input_video> <output_name> <frame_num> <yuv_enable> [card] [WxH] [dump.BGR or dump.YUV]
- -input_video
输入的视频文件路径
- -output_name
输出文件名前缀
- -frame_num
存储帧数
- -yuv_enable
是否开启yuv,0表示输出BGR格式,1表示输出YUV格式
- -card
PCIE模式下可选参数,指定运行的card编号
- -WxH
可选参数,指定输出文件的分辨率,未指定则与原视频分辨率一致
- -dumpBGR_or_dumpYUV
可选参数,是否输出 dump.BGR 或 dump.YUV 文件
e.g
test_ocv_vidbasic station.avi test_basic 10 1 0 1920x1080
test_ocv_video_xcode
此用例主要用于opencv模块下视频转码的全方位测试,对于opencv库支持的不同格式的视频输入,提供h264、h265编码,yuv格式输出,roi区域等多种功能以及多种格式输出,覆盖的格式以及功能范围非常广泛。
test_ocv_video_xcode <input> <code_type> <frame_num> <outputname> <yuv_enable> <roi_enable> [device_id] [encodeparams]
- -input
输入文件名
- -code_type
编码类型。H264enc 表示 H.264,H265enc 表示 H.265
- -frame_num
需要处理的帧数
- -outputname
指定输出文件名,可以设置为null
- -yuv_enable
0 指定输出文件为 bgr色彩格式; 1 指定输出文件为 yuv420色彩模式
- -roi_enable
0 表示禁用roi编码; 1 表示启用roi编码,启用roi编码时,输出文件名应指定为null 并且在编码参数中加上 roi_eanble=1
- -encodeparams
可选参数,可以设置 roi_enable ,bitrate,min_qp,gop等参数
- -device_id
pcie模式下可选参数,指定card编号
e.g
test_ocv_video_xcode rtsp://admin:bitmain.com@192.168.1.14:554 H265enc 10000 encoder_test265.ts 1 0 0 bitrate=1000
test_ocv_vidmulti
此用例主要用于opencv模块下视频以及码流的编解码性能测试, 测试设备在视频多路编解码转码时的性能, 终端可以输出每一个线程的编号、输入视频分辨率、重连次数、 当前解码帧数、实时帧率、总平均帧率、丢帧数等,以及编码功能相关信息。
test_ocv_vidmulti <thread_num> <input_video> [card] [enc_enable] <input_video> [card] [enc_enable]
- -thread_num
线程数,最大不超过512
- -enc_enable
是否开启编码。0表示不开启,1表示开启
- -card
PCIE模式下可选参数,指定运行每个文件对应的card编号
- 环境变量:
- export VIDMULTI_DISPLAY_FRAMERATE=0
只显示帧数
- export VIDMULTI_DISPLAY_FRAMERATE=1
会显示每一个channel的详细信息,可以看丢帧情况等
e.g
test_ocv_vidmulti 3 a.264 0 1 b.264 1 1 c.264 0 0