Skip to main content
Version: Current

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
  • 使用场景:抓取网络数据流并提交给研发人员进行协议分析
  • 适用阶段:作为最终的问题排查手段
排查流程建议​
  1. 首先使用 VLC 播放器进行基本连接测试
  2. 如基本测试失败,使用 ffmpeg 命令行进行协议级测试
  3. 如前两步均失败,检查网络设置和防火墙配置
  4. 如问题仍无法解决,使用抓包工具收集数据并寻求技术支持

通过以上方法,可以系统地定位连接问题的根本原因。

二、编解码相关​

如何通过 FFmpeg 接口调用硬解码器​

问题描述​

如何通过 FFmpeg 接口调用硬解码器 ?

解决方案​

建议通过明确 指定解码器名称 来调用硬解码器:

  1. 当视频流为 H.264 时,指定使用解码器 h264_taco

    if (pStream->codecpar->codec_id == AV_CODEC_ID_H264)
    {
    pDecoder = avcodec_find_decoder_by_name("h264_taco");
    }
  2. 当视频流为 H.265 时,指定使用解码器 hevc_taco

    if (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 接口申请到的内存通常不满足硬件要求,具体表现为:

  1. malloc 返回的是 Linux 用户态虚拟地址,而芯片硬件需要的是物理地址
  2. 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 版本号。