FAQ
一、RTSP 相关
如何测试连接
问题描述
用户程序通过 RTSP 协议连接前端设备失败时,如何判断是设备问题、网络问题,还是程序自身问题?
解决方案
1. 使用播放器测试
VLC 播放器是对 RTSP 协议支持较为全面的常用工具,适合用于初步连接测试:
- 优点:易于获取、使用简单、协议支持丰富
- 判断标准:
- 如果 VLC 能够正常连接设备并稳定播放视频,说明设备和网络环境正常,问题可能出现在用户程序侧
- 如果 VLC 也无法连接,则可能是设备或网络环境存在问题
2. 使用 ffmpeg 命令行工具
当需要录制前端设备发送的原始数据或进行协议级测试时,可使用 ffmpeg 命令行工具:
# TCP 协议测试
ffmpeg -rtsp_transport tcp -i <url> -f rawvideo -y /dev/null
# UDP 协议测试
ffmpeg -rtsp_transport udp -i <url> -f rawvideo -y /dev/null
# RTMP 协议测试
ffmpeg -i rtmp://<hostname[:port]>/<app>/<stream_key> <output>
注意事项:
- 连接失败通常表明网络或设备存在问题
- 常见问题:电脑防火墙软件可能屏蔽 RTSP 服务,请检查防火墙设置
3. 使用网络抓包工具
当常规检查方法无法确定问题时,可使用专业抓包工具进行深度分析:
- 推荐工具:Wireshark、TCPDump
- 使用场景:抓取网络数据流并提交给研发人员进行协议分析
- 适用阶段:作为最终的问题排查手段
排查流程建议
- 首先使用 VLC 播放器进行基本连接测试
- 如基本测试失败,使用
ffmpeg命令行进行协议级测试 - 如前两步均失败,检查网络设置和防火墙配置
- 如问题仍无法解决,使用抓包工具收集数据并寻求技术支持
通过以上方法,可以系统地定位连接问题的根本原因。
二、编解码相关
如何通过 FFmpeg 接口调用硬解码器
问题描述
如何通过 FFmpeg 接口调用硬解码器 ?
解决方案
建议通过明确 指定解码器名称 来调用硬解码器:
-
当视频流为 H.264 时,指定使用解码器
h264_tacoif (pStream->codecpar->codec_id == AV_CODEC_ID_H264)
{
pDecoder = avcodec_find_decoder_by_name("h264_taco");
} -
当视频流为 H.265 时,指定使用解码器
hevc_tacoif (pStream->codecpar->codec_id == AV_CODEC_ID_HEVC)
{
pDecoder = avcodec_find_decoder_by_name("hevc_taco");
}
三、性能优化相关
什么是 Zero Copy?
问题描述
在文档和代码中经常看到 Zero Copy(零拷贝)的概念,它的具体内涵是什么?
解决方案
某些硬件单元对输入数据在内存中的格式有特定要求。例如,FFmpeg 依赖的 VPU(Video Processing Unit,视频处理单元)要求数据在内存中必须是连续紧密排列的,硬件只能通过物理地址递增的方式读取数据。
但在 Linux 系统中,应用程序通过 malloc 接口申请到的内存通常不满足硬件要求,具体表现为:
malloc返回的是 Linux 用户态虚拟地址,而芯片硬件需要的是物理地址malloc返回的虚拟地址对应的内存页面在 DDR 中是不连续的,而硬件需要连续的物理页面
为了解决这些问题,传统的做法是:SDK 先申请一块连续的物理内存,然后将数据从源内存拷贝到这块连续物理内存上,再交给硬件处理。
而 Zero Copy(零拷贝)技术的意思是:如果输入数据已经位于连续的物理内存中,就可以避免这次不必要的数据拷贝。因此,SDK 通常会要求用户通过 zero_copy 参数来提供这个信息,SDK 根据此信息决定是否需要复制输入数据,从而在保证功能正确的同时实现最高的处理效率。
此外,接口的同步/异步特性也会影响 Zero Copy 的决策:
- 异步接口:返回时不能保证数据处理已经开始或结束。考虑到应用程序可能随时回收缓存,异步接口可能会在内部执行一次数据拷贝
- 同步接口:返回时保证数据处理已经完成,工作期间数据缓存是安全的,因此通常不需要额外拷贝
四、模型和推理相关
nb 模型是否对原始 onnx 模型进行结构变动
问题描述
ModelZoo 中提供的模型转换脚本,转换出的 nb 模型是否对原始 onnx 模型进行结构变动?
解决方案
nb 只是将 onnx 模型截断了,但是 onnx 截断的部分仍然在 CPU 上会做。 nb 本身并没有对 onnx 进行剪分支,或者算子替换。
如何查看转换后模型的网络结构
问题描述
有没有什么工具可以可视化转换后模型的网络结构?
解决方案
将工具链生成的 JSON 文件(网络结构文件)导入到 Netron,即可查看模型的网络结构。
五、运行环境相关
盒子是否支持 HDMI 输入
问题描述
盒子是否支持 HDMI 输入?
解决方案
盒子没有 HDMI 输入口,需要 HDMI 转 USB 输入口接入盒子。
并且推荐输入MJPEG流。
盒子的 Docker 中可以运行 yolov5_tracker_sample 吗?
问题描述
是否支持在盒子中运行 Docker,并且在 Docker 中部署和运行 yolov5_tracker_sample?
解决方案
盒子支持 Docker,但是暂不支持在 Docker 中调用底层硬件加速模块。
而 yolov5_tracker_sample 集成了调用底层硬件加速模块的功能,因此无法在 Docker 中正常运行。
盒子通电启动后,不跑任何应用的功耗是多少
问题描述
盒子通电情况下,启动后不跑任何应用的功耗是多少?
解决方案
盒子通电情况下,启动后不跑任何应用的功耗是 4.5 W。
如何查看 taco sdk 版本号
问题描述
如何查看 taco sdk 版本号?
解决方案
执行 tps-smi 或者 tps-version 都可以查询到 taco sdk 版本号。