关键词:PSDK视频检测,SEI检测报错
PSDK可以用来传输视频到DJI APP端,但是接入PSDK的视频流相应的标准。官方也提供了一个视频流检测工具,本文主要记录一下遇到的问题以及检查,要是能对问题排查提供点思路,记录也就有点意义了。
看官方描述,该工具主要是用来检测用PSDK接入DJI无人机来传输到遥控端的视频流符不符合视频传输标准,以便查验出现视频问题是否为传输原始流的问题。
github链接:
https://www.github.com/dji-sdk/DJIPSDKVideoStreamCheckTool
首先问题发现:
在检测我们自己的视频流时,发现使用工具检测会有异常报错,但是这个报错貌似并不影响视频的解码播放。就顺便用工具检测了一下官方提供的demo裸流文件。
同样会出现报错,如下图:
换个H264解析工具试试,如下,裸流似乎并没有什么问题。
那这个问题可能就需要再仔细看看了,关注到检测工具实际就是基于ffmpeg解码的一段应用代码,是开源的,那就看看代码。
通过代码可以看到,工具检测实际检测的并不是我们直接传入的Custom-H264文件,会有一个tmp.h264中间文件生成,再解析检测的,先抛开代码,直接用H264分析软件查看这个tmp文件
这样一对比看,似乎有点头绪。再来定点查找代码:
https://www.github.com/dji-sdk/DJIPS ... /chk_strm_entry.cpp
switch (naluType)
{
case 0x07: // SPS
spsLen = len;
break;
case 0x08: // PPS
ppsLen = len;
addSlice = true;
break;
default:
if (addSlice == true) {
sliceLen = len + spsLen + ppsLen;
addSlice = false;
} else {
sliceLen = len;
}
frameInfo[packetCount].size = sliceLen;
frameInfo[packetCount].positionInFile = position - frameInfo[packetCount].size;
*frameCount = packetCount;
if (packetCount >= frameInfoBufferCount) {
printf("frame buffer is full.");
goto out;
}
packetCount++;
break;
}
代码中SEI帧没有做处理,仅对SPS和PPS和I帧进行了组包,也就比较明确看出SEI是单独当做帧并添加了AUD字段,导致解码失败报错,如果咱们自己接入的视频流,每个I帧前面都带有SEI帧,使用DJI 工具检测时就会规律的出现解码报,也就会看到检测通过与报错并存的检测结果。
照猫画虎,简单修改一下再来验证看看:
switch (naluType)
{
case 0x07: // SPS
spsLen = len;
break;
case 0x08: // PPS
ppsLen = len;
addSlice = true;
break;
case 0x06: // SEI
seiLen = len;
addSeiSlice = true;
break;
default:
if (addSlice == true && addSeiSlice == true) {
sliceLen = len + spsLen + ppsLen + seiLen;
addSlice = false;
addSeiSlice = false;
}
else if(addSlice == true && addSeiSlice == false)
{
sliceLen = len + spsLen + ppsLen;
addSlice = false;
}
else
{
sliceLen = len;
}
frameInfo[packetCount].size = sliceLen;
frameInfo[packetCount].positionInFile = position - frameInfo[packetCount].size;
*frameCount = packetCount;
if (packetCount >= frameInfoBufferCount) {
printf("frame buffer is full.");
goto out;
}
packetCount++;
break;
}
编译运行,问题貌似解决了。
再回过头去看看官方PSDK视频标准,Custom-H264貌似是可以携带SEI的,仅是DJI-H264会丢弃SEI信息,所以暂时看这部分修改应该是没有什么问题。
评论
0 条评论
请登录写评论。