我正在开发一个使用 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();