尝试流式传输到自定义 RTMP 时,DJI Mobile SDK 中出现 LiveStreamManager 错误 -3?
Getting LiveStreamManager error -3 in DJI Mobile SDK when trying to stream to custom RTMP?
我正在尝试实现一个将实时视频从无人机发送到我的自定义 rtmp 服务器的应用程序。当我使用 DJI Mobile SDK 中的 de LiveStreamManager 时,它给我错误代码 -3,并且流不启动。我该如何使用这个 API?
我的应用程序注册成功,我可以设置任务,并从无人机获取遥测数据。但是,当我尝试使用 LiveStreamManeger 时,它无论如何都不起作用。即使完全按照 Sample Code 中的方式实施,它也不起作用。 DJI API 参考中的文档似乎也缺少一些方法。
这是我的实现
private void setupLiveStream() {
DJISDKManager.getInstance().getLiveStreamManager().registerListener(listener);
initListener();
DJISDKManager.getInstance().getLiveStreamManager().setAudioStreamingEnabled(false);
DJISDKManager.getInstance().getLiveStreamManager().setVideoSource(LiveStreamManager.LiveStreamVideoSource.Primary);
liveURL = "rtmp://mycustomrtmp.com/drone/live_testDJI";
}
private void initListener() {
listener = new LiveStreamManager.OnLiveChangeListener() {
@Override
public void onStatusChanged(int i) {
setResultToToast("status changed : " + i);
}
};
}
private void StartStreaming(){
if (!isLiveStreamManagerOn()) {
return;
}
if (DJISDKManager.getInstance().getLiveStreamManager().isStreaming()) {
setResultToToast("already started the Stream!");
return;
}
new Thread() {
@Override
public void run() {
DJISDKManager.getInstance().getLiveStreamManager().setLiveUrl(liveURL);// + vehicleID);
int result = DJISDKManager.getInstance().getLiveStreamManager().startStream();
DJISDKManager.getInstance().getLiveStreamManager().setStartTime();
setResultToToast("LiveStream Start: " + result +
"\n isVideoStreamSpeedConfigurable:" + DJISDKManager.getInstance().getLiveStreamManager().isVideoStreamSpeedConfigurable() +
"\n isLiveAudioEnabled:" + DJISDKManager.getInstance().getLiveStreamManager().isLiveAudioEnabled());
}
}.start();
}
我总是收到 return 代码 -3。当我使用示例代码时,我可以让它工作。唯一的区别是我调用了函数 isVideoStreamSpeedConfigurable(),它在我的代码中 return 为 true,在示例代码中为 false。但是我没有看到在哪里可以将这个东西设置为假。我应该如何实现 LiveStreamingManager?
回答我自己的问题...
我已经设法解决了这个问题。显然,为了能够使用 LiveStreamManager,您必须首先在代码中的某处调用函数 VideoFeeder.getPrimaryVideoFeed() ,否则它将给出错误代码 -3.
使用示例代码 internal.utils.VideoFeedView 中有一个 class 可用于此目的
我首先声明了一个私有 属性 VideoFeedView。
然后在我的 class 构造函数上调用 initUI 函数。
private VideoFeedView primaryVideoFeed;
private void initUI() {
primaryVideoFeed.registerLiveVideo(VideoFeeder.getInstance().getPrimaryVideoFeed(),true);
startStreaming();
}
不知道是不是我运气好,但对我来说,下面的代码解决了我的问题。我不再需要任何其他东西,例如 VideoFeedView。使用它的原因是什么?
我 运行 在 mavic 2 pro 上以 30fps 720p 流式传输到 youtube。
private LiveStreamManager l;
public int live_streaming_start(String live_url){
Log.d("MavicMax", "LiveStream:live_streaming_start:" + live_url);
l = DJISDKManager.getInstance().getLiveStreamManager();
l.registerListener((x)->{Log.d("MavicMax", "LiveStream callback:" + x);});
l.setVideoSource(LiveStreamManager.LiveStreamVideoSource.Primary);
l.setVideoEncodingEnabled(true);
l.setLiveUrl(live_url);
int r = 0;
r = l.startStream();
return r;
}
我正在尝试实现一个将实时视频从无人机发送到我的自定义 rtmp 服务器的应用程序。当我使用 DJI Mobile SDK 中的 de LiveStreamManager 时,它给我错误代码 -3,并且流不启动。我该如何使用这个 API?
我的应用程序注册成功,我可以设置任务,并从无人机获取遥测数据。但是,当我尝试使用 LiveStreamManeger 时,它无论如何都不起作用。即使完全按照 Sample Code 中的方式实施,它也不起作用。 DJI API 参考中的文档似乎也缺少一些方法。
这是我的实现
private void setupLiveStream() {
DJISDKManager.getInstance().getLiveStreamManager().registerListener(listener);
initListener();
DJISDKManager.getInstance().getLiveStreamManager().setAudioStreamingEnabled(false);
DJISDKManager.getInstance().getLiveStreamManager().setVideoSource(LiveStreamManager.LiveStreamVideoSource.Primary);
liveURL = "rtmp://mycustomrtmp.com/drone/live_testDJI";
}
private void initListener() {
listener = new LiveStreamManager.OnLiveChangeListener() {
@Override
public void onStatusChanged(int i) {
setResultToToast("status changed : " + i);
}
};
}
private void StartStreaming(){
if (!isLiveStreamManagerOn()) {
return;
}
if (DJISDKManager.getInstance().getLiveStreamManager().isStreaming()) {
setResultToToast("already started the Stream!");
return;
}
new Thread() {
@Override
public void run() {
DJISDKManager.getInstance().getLiveStreamManager().setLiveUrl(liveURL);// + vehicleID);
int result = DJISDKManager.getInstance().getLiveStreamManager().startStream();
DJISDKManager.getInstance().getLiveStreamManager().setStartTime();
setResultToToast("LiveStream Start: " + result +
"\n isVideoStreamSpeedConfigurable:" + DJISDKManager.getInstance().getLiveStreamManager().isVideoStreamSpeedConfigurable() +
"\n isLiveAudioEnabled:" + DJISDKManager.getInstance().getLiveStreamManager().isLiveAudioEnabled());
}
}.start();
}
我总是收到 return 代码 -3。当我使用示例代码时,我可以让它工作。唯一的区别是我调用了函数 isVideoStreamSpeedConfigurable(),它在我的代码中 return 为 true,在示例代码中为 false。但是我没有看到在哪里可以将这个东西设置为假。我应该如何实现 LiveStreamingManager?
回答我自己的问题...
我已经设法解决了这个问题。显然,为了能够使用 LiveStreamManager,您必须首先在代码中的某处调用函数 VideoFeeder.getPrimaryVideoFeed() ,否则它将给出错误代码 -3.
使用示例代码 internal.utils.VideoFeedView 中有一个 class 可用于此目的
我首先声明了一个私有 属性 VideoFeedView。
然后在我的 class 构造函数上调用 initUI 函数。
private VideoFeedView primaryVideoFeed;
private void initUI() {
primaryVideoFeed.registerLiveVideo(VideoFeeder.getInstance().getPrimaryVideoFeed(),true);
startStreaming();
}
不知道是不是我运气好,但对我来说,下面的代码解决了我的问题。我不再需要任何其他东西,例如 VideoFeedView。使用它的原因是什么? 我 运行 在 mavic 2 pro 上以 30fps 720p 流式传输到 youtube。
private LiveStreamManager l;
public int live_streaming_start(String live_url){
Log.d("MavicMax", "LiveStream:live_streaming_start:" + live_url);
l = DJISDKManager.getInstance().getLiveStreamManager();
l.registerListener((x)->{Log.d("MavicMax", "LiveStream callback:" + x);});
l.setVideoSource(LiveStreamManager.LiveStreamVideoSource.Primary);
l.setVideoEncodingEnabled(true);
l.setLiveUrl(live_url);
int r = 0;
r = l.startStream();
return r;
}