MSDK直播时候 进行第一人称视觉和地图切换直播就中断?是需要设置分辨率吗?
已完成import androidx.lifecycle.Lifecycle;
import androidx.lifecycle.LifecycleObserver;
import androidx.lifecycle.OnLifecycleEvent;
import com.easthope.aircraft.utils.Helper;
import com.easthope.aircraft.utils.ModuleVerificationUtil;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
import dji.sdk.sdkmanager.DJISDKManager;
import dji.sdk.sdkmanager.LiveStreamManager;
import me.logg.Logg;
/**
* file:LiveManager
* author:ssx
* date:2021/8/14 9:29
* describe:直播管理器
*/
public class LiveManager implements LifecycleObserver {
private static final String TAG = "LiveManager";
private String liveShowUrl;
private final LiveStreamManager.OnLiveChangeListener listener;
private final LiveStreamManager.OnLiveErrorStatusListener errorStatusListener;
private final LiveStreamManager.LiveStreamVideoSource currentVideoSource =
LiveStreamManager.LiveStreamVideoSource.Primary;
public LiveManager(String liveShowUrl) {
Logg.i(TAG, "LiveManager init ");
this.liveShowUrl = liveShowUrl;
listener = new LiveStreamManager.OnLiveChangeListener() {
@Override
public void onStatusChanged(int i) {
Logg.i(TAG, "onStatusChanged: " + i);
}
};
errorStatusListener = new LiveStreamManager.OnLiveErrorStatusListener() {
@Override
public void onError(int code, String msg) {
Logg.i(TAG, "errorCode: " + code);
Logg.i(TAG, "errorMsg: " + msg);
}
};
}
@OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
public void onCreate() {
Logg.d(TAG, "onCreate: ");
}
@OnLifecycleEvent(Lifecycle.Event.ON_START)
public void onStart() {
Logg.d(TAG, "onStart: ");
if (isLiveStreamManagerOn()) {
DJISDKManager.getInstance().getLiveStreamManager().registerListener(listener);
DJISDKManager.getInstance().getLiveStreamManager().addLiveErrorStatusListener(errorStatusListener);
}
}
@OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
public void onResume() {
Logg.d(TAG, "onResume: ");
startLiveShow();
}
@OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
public void onPause() {
Logg.d(TAG, "onPause: ");
stopLiveShow();
}
@OnLifecycleEvent(Lifecycle.Event.ON_STOP)
public void onStop() {
Logg.d(TAG, "onStop: ");
}
@OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
public void onDestroy() {
Logg.d(TAG, "onDestroy: ");
if (isLiveStreamManagerOn()) {
DJISDKManager.getInstance().getLiveStreamManager().unregisterListener(listener);
DJISDKManager.getInstance().getLiveStreamManager().removeLiveErrorStatusListener(errorStatusListener);
}
}
public void startLiveShow() {
Logg.i(TAG, "Start Live Show");
if (!isLiveStreamManagerOn()) {
return;
}
final LiveStreamManager liveStreamManager =
DJISDKManager.getInstance().getLiveStreamManager();
if (liveStreamManager.isStreaming()) {
Logg.i(TAG, "already started!");
return;
}
new Thread() {
@Override
public void run() {
liveStreamManager.setAudioStreamingEnabled(false);//启动音频
liveStreamManager.setVideoEncodingEnabled(true);//视频编码已启动
liveStreamManager.setLiveUrl(liveShowUrl);
int result = liveStreamManager.startStream();
liveStreamManager.setStartTime();
Logg.i(TAG, "startLive:" + result +
"\n isVideoStreamSpeedConfigurable:" + liveStreamManager.isVideoStreamSpeedConfigurable() +
"\n isLiveAudioEnabled:" + liveStreamManager.isLiveAudioEnabled());
}
}.start();
}
public void enableReEncoder() {
if (!isLiveStreamManagerOn()) {
return;
}
DJISDKManager.getInstance().getLiveStreamManager().setVideoEncodingEnabled(true);
Logg.i(TAG, "Force Re-Encoder Enabled!");
}
public void disableReEncoder() {
if (!isLiveStreamManagerOn()) {
return;
}
DJISDKManager.getInstance().getLiveStreamManager().setVideoEncodingEnabled(false);
Logg.i(TAG, "Disable Force Re-Encoder!");
}
public void stopLiveShow() {
if (!isLiveStreamManagerOn()) {
return;
}
DJISDKManager.getInstance().getLiveStreamManager().stopStream();
Logg.i(TAG, "Stop Live Show");
}
public void soundOn() {
if (!isLiveStreamManagerOn()) {
return;
}
DJISDKManager.getInstance().getLiveStreamManager().setAudioMuted(false);
Logg.i(TAG, "Sound On");
}
public void soundOff() {
if (!isLiveStreamManagerOn()) {
return;
}
DJISDKManager.getInstance().getLiveStreamManager().setAudioMuted(true);
Logg.i(TAG, "Sound Off");
}
public void isLiveShowOn() {
if (!isLiveStreamManagerOn()) {
return;
}
Logg.i(TAG,
"Is Live Show On:" + DJISDKManager.getInstance().getLiveStreamManager().isStreaming());
}
public void showInfo() {
if (!isLiveStreamManagerOn()) {
return;
}
StringBuilder sb = new StringBuilder();
sb.append("Video BitRate:").append(DJISDKManager.getInstance().getLiveStreamManager().getLiveVideoBitRate()).append(" kpbs\n");
sb.append("Audio BitRate:").append(DJISDKManager.getInstance().getLiveStreamManager().getLiveAudioBitRate()).append(" kpbs\n");
sb.append("Video FPS:").append(DJISDKManager.getInstance().getLiveStreamManager().getLiveVideoFps()).append("\n");
sb.append("Video Cache size:").append(DJISDKManager.getInstance().getLiveStreamManager().getLiveVideoCacheSize()).append(" frame");
Logg.i(TAG, sb.toString());
}
public void showLiveStartTime() {
if (!isLiveStreamManagerOn()) {
return;
}
if (!DJISDKManager.getInstance().getLiveStreamManager().isStreaming()) {
Logg.i(TAG, "Please Start Live First");
return;
}
long startTime = DJISDKManager.getInstance().getLiveStreamManager().getStartTime();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault());
String sd = sdf.format(new Date(Long.parseLong(String.valueOf(startTime))));
Logg.i(TAG, "Live Start Time: " + sd);
}
public void changeVideoSource(LiveStreamManager.LiveStreamVideoSource currentVideoSource) {
if (!isLiveStreamManagerOn()) {
return;
}
if (!isSupportSecondaryVideo()) {
return;
}
if (DJISDKManager.getInstance().getLiveStreamManager().isStreaming()) {
Logg.i(TAG, "Before change live source, you should stop live stream!");
DJISDKManager.getInstance().getLiveStreamManager().stopStream();
}
currentVideoSource =
(currentVideoSource == LiveStreamManager.LiveStreamVideoSource.Primary) ?
LiveStreamManager.LiveStreamVideoSource.Secoundary :
LiveStreamManager.LiveStreamVideoSource.Primary;
DJISDKManager.getInstance().getLiveStreamManager().setVideoSource(currentVideoSource);
Logg.i(TAG, "Change Success ! Video Source : " + currentVideoSource.name());
}
public void showCurrentVideoSource() {
Logg.i(TAG, "Video Source : " + currentVideoSource.name());
}
public boolean isLiveStreamManagerOn() {
if (!ModuleVerificationUtil.isProductModuleAvailable()) {
return false;
}
if (DJISDKManager.getInstance().getLiveStreamManager() == null) {
Logg.i(TAG, "No live stream manager!");
return false;
}
return true;
}
public boolean isSupportSecondaryVideo() {
if (!Helper.isMultiStreamPlatform()) {
Logg.i(TAG, "No secondary video!");
return false;
}
return true;
}
}
请先登录再写评论。
评论
3 条评论