问题描述
我正在使用DJI Mobile SDK将DJI无人机的视频流发送到ANT Media Server的android应用程序上工作。 使用SDK方法,使用RTMP协议对视频进行编码和发送。 使用ANT RTMP到WEBRTC,由于延迟非常短,我注意到了一个问题:
- 开始流式传输后,延迟约为600ms
- 大约2-3秒后,等待时间开始线性下降,每3-4分钟损失大约1秒
我也使用DJI提供的Mobile SDK Sample进行了测试,其行为是相同的。 考虑到性能问题,然后我附加了Android Studio Profiler,我注意到了一个非常奇怪的行为:附加了Profiler后,流媒体性能非常完美。 4-500毫秒的恒定延迟,即使经过数小时也没有任何损失。 如果我在连接了事件探查器的情况下立即启动该应用程序,或者将其附加到已打开的应用程序,则没有任何区别,重要的是在开始流式传输之前,已连接事件探查器。
分析环境与非分析环境之间有什么区别?在执行Android Profiler的过程中,是否在系统/应用程序上设置了一些参数(线程优先级,系统计时器分辨率,没有设备优化..?)?
编辑
这是设置rtmp URL并开始流式传输的代码段,不需要更多代码。所有的魔力都是由DJI Mobile SDK完成的。
new Thread() {
@Override
public void run() {
DJI@R_142_502[email protected]().getLiveStreamManager().setLiveUrl(rtmpurl);
int result = DJI@R_142_502[email protected]().getLiveStreamManager().startStream();
DJI@R_142_502[email protected]().getLiveStreamManager().setStartTime();
}
}.start();
解决方法
我不知道是什么原因使您的应用程序在连接了探查器后运行得更快,但是我可以确认探查器中没有实现您提到的所有内容(线程优先级等)。当附加了探查器时(设备上的服务器,JVMTI回调等),我可以列出很多导致性能开销的内容,它们只会降低应用程序的运行速度,而不会反过来。
不看您的应用程序,我想不出任何解释。如果您愿意,可以签出source code的Android Studio分析器。