请使用下面的模版提问(创建话题后勾选相应的选项):
Jetson 模组
Jetson Orin NX
Jetson 软件
JetPack 5.1.1
操作过程:
1.生成yuv文件(仅供参考 任意1080p文件均可)
#生成文件
nvidia@miivii-tegra:/usr/src/jetson_multimedia_api/samples/15_multivideo_encode$
sudo ffmpeg -f lavfi -i testsrc=size=1920x1080:rate=30:duration=10 -pix_fmt yuv420p -y …/07_video_convert/video420.yuv0
2.进入nvidia 的视频编码api,修改multivideo_encode_main.cpp
cd /usr/src/jetson_multimedia_api/samples/15_multivideo_encode
在multivideo_encode_main.cpp中添加记录编码完成时间的代码。
修改后的文件如下:
multivideo_encode_main.txt (35.1 KB)
编译:sudo make
3.运行 8路1080p 视频编码 查看是否达到1080p 30FPS的纸面参数
运行命令如下:
nvidia@miivii-tegra:/usr/src/jetson_multimedia_api/samples/15_multivideo_encode$
sudo ./multivideo_encode num_files 8 \
…/07_video_convert/video420.yuv0 1920 1080 H265 test1.h265 \
…/07_video_convert/video420.yuv0 1920 1080 H265 test2.h265 \
…/07_video_convert/video420.yuv0 1920 1080 H265 test3.h265 \
…/07_video_convert/video420.yuv0 1920 1080 H265 test4.h265 \
…/07_video_convert/video420.yuv0 1920 1080 H265 test5.h265 \
…/07_video_convert/video420.yuv0 1920 1080 H265 test6.h265 \
…/07_video_convert/video420.yuv0 1920 1080 H265 test7.h265 \
…/07_video_convert/video420.yuv0 1920 1080 H265 test8.h265 \
异常现象
在8路1080p30帧下 H265 编码延时就会大于帧间隔
输出可见日志:
nvidia@miivii-tegra:/usr/src/jetson_multimedia_api/samples/15_multivideo_encode$ sudo ./multivideo_encode num_files 8 …/07_video_convert/video420.yuv0 1920 1080 H265 test1.h265 …/07_video_convert/video420.yuv0 1920 1080 H265 test2.h265 …/07_video_convert/video420.yuv0 1920 1080 H265 test3.h265 …/07_video_convert/video420.yuv0 1920 1080 H265 test4.h265 …/07_video_convert/video420.yuv0 1920 1080 H265 test5.h265 …/07_video_convert/video420.yuv0 1920 1080 H265 test6.h265 …/07_video_convert/video420.yuv0 1920 1080 H265 test7.h265 …/07_video_convert/video420.yuv0 1920 1080 H265 test8.h265 \
Creating Encoder in blocking mode
Creating Encoder in blocking mode
Creating Encoder in blocking mode
Creating Encoder in blocking mode
Creating Encoder in blocking mode
Creating Encoder in blocking mode
Creating Encoder in blocking mode
Creating Encoder in blocking mode
Opening in BLOCKING MODE
NvMMLiteOpen : Block : BlockType = 8
===== NvVideo: NVENC =====
NvMMLiteBlockCreate : Block : BlockType = 8
892744264
842091865
Opening in BLOCKING MODE
NvMMLiteOpen : Block : BlockType = 8
===== NvVideo: NVENC =====
NvMMLiteBlockCreate : Block : BlockType = 8
892744264
842091865
NvVideo: H265 : Profile : 1
NvVideo: H265 : Profile : 1
NVMEDIA: Need to set EMC bandwidth : 846000
NVMEDIA: Need to set EMC bandwidth : 846000
NvVideo: bBlitMode is set to TRUE
NvVideo: bBlitMode is set to TRUE
Opening in BLOCKING MODE
NvMMLiteOpen : Block : BlockType = 8
===== NvVideo: NVENC =====
NvMMLiteBlockCreate : Block : BlockType = 8
892744264
842091865
NvVideo: H265 : Profile : 1
NVMEDIA: Need to set EMC bandwidth : 846000
NvVideo: bBlitMode is set to TRUE
Opening in BLOCKING MODE
NvMMLiteOpen : Block : BlockType = 8
===== NvVideo: NVENC =====
NvMMLiteBlockCreate : Block : BlockType = 8
892744264
842091865
NvVideo: H265 : Profile : 1
Opening in BLOCKING MODE
NvMMLiteOpen : Block : BlockType = 8
===== NvVideo: NVENC =====
NvMMLiteBlockCreate : Block : BlockType = 8
892744264
842091865
NVMEDIA: Need to set EMC bandwidth : 846000
NvVideo: bBlitMode is set to TRUE
NvVideo: H265 : Profile : 1
NVMEDIA: Need to set EMC bandwidth : 846000
Opening in BLOCKING MODE
NvMMLiteOpen : Block : BlockType = 8
===== NvVideo: NVENC =====
NvMMLiteBlockCreate : Block : BlockType = 8
892744264
842091865
NvVideo: bBlitMode is set to TRUE
NvVideo: H265 : Profile : 1
NVMEDIA: Need to set EMC bandwidth : 846000
NvVideo: bBlitMode is set to TRUE
Opening in BLOCKING MODE
NvMMLiteOpen : Block : BlockType = 8
===== NvVideo: NVENC =====
NvMMLiteBlockCreate : Block : BlockType = 8
892744264
842091865
NvVideo: H265 : Profile : 1
Opening in BLOCKING MODE
NVMEDIA: Need to set EMC bandwidth : 846000
NvMMLiteOpen : Block : BlockType = 8
===== NvVideo: NVENC =====
NvMMLiteBlockCreate : Block : BlockType = 8
892744264
842091865
NvVideo: bBlitMode is set to TRUE
NvVideo: H265 : Profile : 1
NVMEDIA: Need to set EMC bandwidth : 846000
NvVideo: bBlitMode is set to TRUE
通道 4 帧 6 编码间隔: 39ms
通道 6 帧 3 编码间隔: 46ms
通道 0 帧 22 编码间隔: 35ms
通道 3 帧 18 编码间隔: 39ms
通道 2 帧 10 编码间隔: 39ms
通道 4 帧 7 编码间隔: 45ms
通道 0 帧 23 编码间隔: 35ms
通道 6 帧 4 编码间隔: 59ms
通道 3 帧 19 编码间隔: 39ms
通道 2 帧 11 编码间隔: 43ms
通道 4 帧 8 编码间隔: 43ms
通道 6 帧 5 编码间隔: 44ms
通道 1 帧 25 编码间隔: 35ms
通道 3 帧 20 编码间隔: 37ms
通道 2 帧 12 编码间隔: 38ms
通道 4 帧 9 编码间隔: 42ms
通道 3 帧 21 编码间隔: 37ms
通道 2 帧 13 编码间隔: 35ms
通道 7 帧 5 编码间隔: 35ms
通道 2 帧 14 编码间隔: 35ms
通道 6 帧 8 编码间隔: 35ms
通道 7 帧 6 编码间隔: 35ms
通道 1 帧 30 编码间隔: 34ms
通道 7 帧 8 编码间隔: 34ms
通道 0 帧 30 编码间隔: 36ms
通道 3 帧 25 编码间隔: 35ms
通道 5 帧 21 编码间隔: 35ms
通道 4 帧 14 编码间隔: 35ms
通道 2 帧 17 编码间隔: 35ms
通道 6 帧 11 编码间隔: 35ms
通道 1 帧 31 编码间隔: 36ms
通道 7 帧 9 编码间隔: 36ms
通道 0 帧 31 编码间隔: 36ms
通道 3 帧 26 编码间隔: 36ms
通道 5 帧 22 编码间隔: 35ms
通道 4 帧 15 编码间隔: 36ms
通道 2 帧 18 编码间隔: 36ms
通道 6 帧 12 编码间隔: 36ms
通道 1 帧 32 编码间隔: 34ms
通道 7 帧 10 编码间隔: 34ms
通道 3 帧 30 编码间隔: 34ms
通道 5 帧 26 编码间隔: 34ms
通道 4 帧 19 编码间隔: 35ms
通道 2 帧 22 编码间隔: 35ms
通道 6 帧 16 编码间隔: 35ms
通道 1 帧 36 编码间隔: 34ms
通道 7 帧 14 编码间隔: 35ms
通道 0 帧 36 编码间隔: 34ms
通道 3 帧 31 编码间隔: 35ms
通道 5 帧 27 编码间隔: 35ms
通道 4 帧 20 编码间隔: 35ms
通道 2 帧 23 编码间隔: 35ms
通道 6 帧 17 编码间隔: 35ms
通道 1 帧 37 编码间隔: 34ms
通道 7 帧 15 编码间隔: 35ms
通道 0 帧 37 编码间隔: 34ms
通道 5 帧 30 编码间隔: 35ms
通道 4 帧 23 编码间隔: 34ms
通道 2 帧 26 编码间隔: 34ms
通道 6 帧 20 编码间隔: 35ms
通道 1 帧 40 编码间隔: 35ms
通道 7 帧 18 编码间隔: 35ms
通道 0 帧 40 编码间隔: 34ms
通道 3 帧 35 编码间隔: 35ms
通道 5 帧 31 编码间隔: 34ms
通道 4 帧 24 编码间隔: 34ms
通道 2 帧 27 编码间隔: 34ms
通道 6 帧 21 编码间隔: 34ms
通道 1 帧 41 编码间隔: 34ms
通道 7 帧 19 编码间隔: 35ms
通道 0 帧 41 编码间隔: 34ms
通道 3 帧 36 编码间隔: 35ms
通道 2 帧 30 编码间隔: 34ms
通道 6 帧 24 编码间隔: 35ms
通道 1 帧 44 编码间隔: 34ms
通道 7 帧 22 编码间隔: 35ms
通道 0 帧 44 编码间隔: 34ms
通道 3 帧 39 编码间隔: 34ms
通道 5 帧 35 编码间隔: 35ms
通道 4 帧 28 编码间隔: 35ms
通道 2 帧 31 编码间隔: 35ms
通道 6 帧 25 编码间隔: 35ms
通道 1 帧 45 编码间隔: 34ms
…
…
Could not read complete frame from input file
File read complete.
Could not read complete frame from input file
File read complete.
通道 3 帧 286 编码间隔: 34ms
通道 6 帧 272 编码间隔: 34ms
通道 4 帧 275 编码间隔: 34ms
通道 2 帧 278 编码间隔: 34ms
通道 5 帧 282 编码间隔: 34ms
通道 7 帧 270 编码间隔: 34ms
通道 3 帧 287 编码间隔: 35ms
通道 6 帧 273 编码间隔: 34ms
通道 4 帧 276 编码间隔: 34ms
通道 5 帧 283 编码间隔: 34ms
通道 7 帧 271 编码间隔: 34ms
Could not read complete frame from input file
File read complete.
通道 5 帧 286 编码间隔: 34ms
通道 7 帧 274 编码间隔: 34ms
通道 6 帧 277 编码间隔: 34ms
通道 4 帧 280 编码间隔: 34ms
通道 2 帧 283 编码间隔: 34ms
通道 5 帧 287 编码间隔: 35ms
通道 7 帧 275 编码间隔: 34ms
通道 6 帧 278 编码间隔: 34ms
通道 4 帧 281 编码间隔: 34ms
通道 2 帧 284 编码间隔: 34ms
Got 0 size buffer in capture
通道 4 帧 282 编码间隔: 35ms
通道 2 帧 285 编码间隔: 35ms
Got 0 size buffer in capture
Could not read complete frame from input file
File read complete.
Instance 1 executed successfully.
Instance 0 executed successfully.
Could not read complete frame from input file
File read complete.
Got 0 size buffer in capture
Instance 3 executed successfully.
Could not read complete frame from input file
File read complete.
Got 0 size buffer in capture
Could not read complete frame from input file
File read complete.
Instance 5 executed successfully.
Could not read complete frame from input file
File read complete.
Got 0 size buffer in capture
Instance 2 executed successfully.
Got 0 size buffer in capture
Got 0 size buffer in capture
Instance 4 executed successfully.
Got 0 size buffer in capture
Instance 6 executed successfully.
Instance 7 executed successfully.
App run was successful
其他尝试:
1.sudo jetson_clocks >>> 依旧出现大于33ms的帧
2.降低码率 bitrate = 1 * 1024 * 1024 , 4M将至1M 与2M >>> 依旧出现问题
3.尝试每个进程执行一路,同时执行7个进程 >>> 依旧出现问题
nvidia@miivii-tegra:/usr/src/jetson_multimedia_api/samples/15_multivideo_encode$ sudo cat test.sh
#!/bin/bash
切换到脚本所在目录或使用绝对路径
cd /path/to/your/directory
sudo ./multivideo_encode num_files 1 …/07_video_convert/video420.yuv0 1920 1080 H265 test1.h265 &
sudo ./multivideo_encode num_files 1 …/07_video_convert/video420.yuv0 1920 1080 H265 test2.h265 &
sudo ./multivideo_encode num_files 1 …/07_video_convert/video420.yuv0 1920 1080 H265 test3.h265 &
sudo ./multivideo_encode num_files 1 …/07_video_convert/video420.yuv0 1920 1080 H265 test4.h265 &
sudo ./multivideo_encode num_files 1 …/07_video_convert/video420.yuv0 1920 1080 H265 test5.h265 &
sudo ./multivideo_encode num_files 1 …/07_video_convert/video420.yuv0 1920 1080 H265 test6.h265 &
sudo ./multivideo_encode num_files 1 …/07_video_convert/video420.yuv0 1920 1080 H265 test7.h265 &
sudo ./multivideo_encode num_files 1 …/07_video_convert/video420.yuv0 1920 1080 H265 test8.h265 &
等待所有后台进程完成
wait
echo “所有编码任务已完成”
疑问点
1.这样逐帧计算编码完成时间是否正确
2.如何才能达到 H265下 8路视频编码 1080p 30fps 的参数