0

我正在开发一个使用 DJI Mobile SDK 将 DJI 无人机的视频流发送到 ANT 媒体服务器的 android 应用程序。使用 SDK 方法,使用 RTMP 协议对视频进行编码和发送。使用 ANT RTMP 到 WEBRTC,由于延迟非常低,我注意到一个问题:

  • 一旦开始流式传输,延迟大约为 600 毫秒
  • 大约 2-3 秒后,延迟开始线性下降,每 3-4 分钟损失大约 1 秒

我还用 DJI 提供的 Mobile SDK Sample 进行了测试,行为是相同的。考虑到性能问题,然后我附加了 Android Studio Profiler,我注意到一个非常奇怪的行为:附加分析器后,流式传输性能非常完美。4-500ms 的恒定延迟,即使在数小时后也没有任何损失。如果我在附加分析器的情况下立即启动应用程序或将其附加到打开的应用程序,则没有区别,重要的是在开始流式传输之前附加分析器。

分析环境和非分析环境有什么区别?在 Android Profiler 执行期间是否在系统/应用程序上设置了某些参数(线程优先级、系统计时器分辨率、无设备优化......?)?

编辑

这是设置 rtmp URL 并开始流式传输的代码片段,不需要更多代码。所有的魔法都由 DJI Mobile SDK 完成。

new Thread() {
        @Override
        public void run() {
            DJISDKManager.getInstance().getLiveStreamManager().setLiveUrl(rtmpUrl);
            int result = DJISDKManager.getInstance().getLiveStreamManager().startStream();
            DJISDKManager.getInstance().getLiveStreamManager().setStartTime();              
        }
}.start();
4

1 回答 1

0

我不知道是什么让您的应用程序在附加了探查器的情况下运行得更快,但我可以确认您提到的任何东西(线程优先级等)都没有在探查器中实现。我可以列出一堆在附加分析器时会导致性能开销的东西(设备上的服务器、JVMTI 回调等),它们只会减慢应用程序的速度,而不是相反。

如果不查看您的应用程序,我想不出任何解释。如果您愿意,可以查看 Android Studio 分析器的源代码

于 2020-09-16T23:31:50.160 回答