Skip to content

Commit 9e40022

Browse files
Merge branch 'modify_livestreaming_permission' into modify_livestreaming_screen
# Conflicts: # dConnectDevicePlugin/dConnectDeviceHost/app/src/main/java/org/deviceconnect/android/deviceplugin/host/profile/HostLiveStreamingProfile.java
2 parents 72fc8d5 + a1dfe7a commit 9e40022

1 file changed

Lines changed: 117 additions & 34 deletions

File tree

dConnectDevicePlugin/dConnectDeviceHost/app/src/main/java/org/deviceconnect/android/deviceplugin/host/profile/HostLiveStreamingProfile.java

Lines changed: 117 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,13 @@
11
package org.deviceconnect.android.deviceplugin.host.profile;
22

3-
import android.content.Context;
43
import android.content.Intent;
5-
import android.hardware.camera2.CameraCharacteristics;
6-
import android.hardware.camera2.CameraManager;
74
import android.os.Bundle;
85
import android.util.Log;
96

107
import org.deviceconnect.android.BuildConfig;
118
import org.deviceconnect.android.deviceplugin.host.recorder.HostDeviceLiveStreamRecorder;
129
import org.deviceconnect.android.deviceplugin.host.recorder.HostMediaRecorder;
1310
import org.deviceconnect.android.deviceplugin.host.recorder.HostMediaRecorderManager;
14-
import org.deviceconnect.android.deviceplugin.host.recorder.screen.ScreenCastRecorder;
1511
import org.deviceconnect.android.event.Event;
1612
import org.deviceconnect.android.event.EventError;
1713
import org.deviceconnect.android.event.EventManager;
@@ -25,7 +21,6 @@
2521
import org.deviceconnect.android.profile.api.PutApi;
2622
import org.deviceconnect.message.DConnectMessage;
2723

28-
import java.util.List;
2924

3025
public class HostLiveStreamingProfile extends DConnectProfile implements LiveStreamingClient.EventListener {
3126

@@ -102,7 +97,6 @@ public boolean onRequest(final Intent request, final Intent response) {
10297
Log.d(TAG, "broadcastURI : " + broadcastURI);
10398
}
10499

105-
boolean isScreenCast = false;
106100
//映像リソースURIの取得
107101
mVideoURI = (String) extras.get(PARAM_KEY_VIDEO);
108102
if (mVideoURI == null) {
@@ -115,9 +109,7 @@ public boolean onRequest(final Intent request, final Intent response) {
115109
case VIDEO_URI_CAMERA_BACK:
116110
case VIDEO_URI_CAMERA_0:
117111
case VIDEO_URI_CAMERA_1:
118-
break;
119112
case VIDEO_URI_SCREEN:
120-
isScreenCast = true;
121113
break;
122114
default:
123115
MessageUtils.setInvalidRequestParameterError(response, "video parameter illegal");
@@ -142,28 +134,68 @@ public boolean onRequest(final Intent request, final Intent response) {
142134
return true;
143135
}
144136

145-
if (isScreenCast) {
146-
((ScreenCastRecorder) mHostDeviceLiveStreamRecorder).requestPermission(new HostMediaRecorder.PermissionCallback() {
147-
@Override
148-
public void onAllowed() {
149-
startLiveStreaming(request, response, extras, broadcastURI, eventListener);
150-
sendResponse(response);
137+
((HostMediaRecorder) mHostDeviceLiveStreamRecorder).requestPermission(new HostMediaRecorder.PermissionCallback() {
138+
@Override
139+
public void onAllowed() {
140+
//クライアントの生成
141+
mHostDeviceLiveStreamRecorder.createLiveStreamingClient(broadcastURI, eventListener);
142+
143+
//映像無し以外の場合はエンコーダーとパラメーターをセット
144+
if (!mVideoURI.equals("false")) {
145+
Integer width = parseInteger(request, PARAM_KEY_WIDTH);
146+
Integer height = parseInteger(request, PARAM_KEY_HEIGHT);
147+
Integer bitrate = parseInteger(request, PARAM_KEY_BITRATE);
148+
Integer frameRate = parseInteger(request, PARAM_KEY_FRAME_RATE);
149+
if (DEBUG) {
150+
Log.d(TAG, "width : " + width);
151+
Log.d(TAG, "height : " + height);
152+
Log.d(TAG, "bitrate : " + bitrate);
153+
Log.d(TAG, "frameRate : " + frameRate);
154+
}
155+
mHostDeviceLiveStreamRecorder.setVideoEncoder(width, height, bitrate, frameRate);
151156
}
152157

153-
@Override
154-
public void onDisallowed() {
155-
MessageUtils.setUnknownError(response, "Permission for screencast is not granted.");
156-
sendResponse(response);
158+
//音声リソースURIの取得
159+
mAudioURI = (String) extras.get(PARAM_KEY_AUDIO);
160+
if (mAudioURI == null) {
161+
mAudioURI = "false";
162+
} else {
163+
switch (mAudioURI) {
164+
case AUDIO_URI_TRUE:
165+
case AUDIO_URI_FALSE:
166+
break;
167+
default:
168+
MessageUtils.setInvalidRequestParameterError(response, "audio parameter illegal");
169+
sendResponse(response);
170+
return;
171+
}
157172
}
158-
});
159-
return false;
160-
} else {
161-
startLiveStreaming(request, response, extras, broadcastURI, eventListener);
162-
}
173+
if (DEBUG) {
174+
Log.d(TAG, "audioUri : " + mAudioURI);
175+
}
176+
177+
//音声無し以外の場合はエンコーダーをセット
178+
if (!mAudioURI.equals("false")) {
179+
mHostDeviceLiveStreamRecorder.setAudioEncoder();
180+
}
181+
182+
//ストリーミング開始
183+
mHostDeviceLiveStreamRecorder.startLiveStreaming();
184+
185+
setResult(response, DConnectMessage.RESULT_OK);
186+
sendResponse(response);
187+
}
188+
189+
@Override
190+
public void onDisallowed() {
191+
MessageUtils.setUnknownError(response, "Permission for camera is not granted.");
192+
sendResponse(response);
193+
}
194+
});
195+
return false;
163196
} else {
164197
MessageUtils.setInvalidRequestParameterError(response, "parameter not available");
165198
}
166-
167199
return true;
168200
}
169201
});
@@ -185,10 +217,26 @@ public boolean onRequest(final Intent request, final Intent response) {
185217
MessageUtils.setIllegalDeviceStateError(response, "status is not normal(streaming)");
186218
return true;
187219
}
188-
mHostDeviceLiveStreamRecorder.stopLiveStreaming();
220+
((HostMediaRecorder) mHostDeviceLiveStreamRecorder)
221+
.requestPermission(new HostMediaRecorder.PermissionCallback() {
222+
@Override
223+
public void onAllowed() {
224+
mHostDeviceLiveStreamRecorder.stopLiveStreaming();
225+
setResult(response, DConnectMessage.RESULT_OK);
226+
sendResponse(response);
227+
}
228+
229+
@Override
230+
public void onDisallowed() {
231+
MessageUtils.setUnknownError(response, "Permission for camera is not granted.");
232+
sendResponse(response);
233+
}
234+
});
235+
return false;
236+
} else {
237+
MessageUtils.setIllegalDeviceStateError(response, "status is not normal(streaming)");
238+
return true;
189239
}
190-
setResult(response, DConnectMessage.RESULT_OK);
191-
return true;
192240
}
193241
});
194242

@@ -291,11 +339,28 @@ public boolean onRequest(final Intent request, final Intent response) {
291339
if (DEBUG) {
292340
Log.d(TAG, "onRequest() : put /mute");
293341
}
342+
294343
if (mHostDeviceLiveStreamRecorder != null) {
295-
mHostDeviceLiveStreamRecorder.setMute(true);
344+
((HostMediaRecorder) mHostDeviceLiveStreamRecorder)
345+
.requestPermission(new HostMediaRecorder.PermissionCallback() {
346+
@Override
347+
public void onAllowed() {
348+
mHostDeviceLiveStreamRecorder.setMute(true);
349+
setResult(response, DConnectMessage.RESULT_OK);
350+
sendResponse(response);
351+
}
352+
353+
@Override
354+
public void onDisallowed() {
355+
MessageUtils.setUnknownError(response, "Permission for camera is not granted.");
356+
sendResponse(response);
357+
}
358+
});
359+
return false;
360+
} else {
361+
MessageUtils.setIllegalDeviceStateError(response, "status is not normal(streaming)");
362+
return true;
296363
}
297-
setResult(response, DConnectMessage.RESULT_OK);
298-
return true;
299364
}
300365
});
301366

@@ -311,10 +376,26 @@ public boolean onRequest(final Intent request, final Intent response) {
311376
Log.d(TAG, "onRequest() : delete /mute");
312377
}
313378
if (mHostDeviceLiveStreamRecorder != null) {
314-
mHostDeviceLiveStreamRecorder.setMute(false);
379+
((HostMediaRecorder) mHostDeviceLiveStreamRecorder)
380+
.requestPermission(new HostMediaRecorder.PermissionCallback() {
381+
@Override
382+
public void onAllowed() {
383+
mHostDeviceLiveStreamRecorder.setMute(false);
384+
setResult(response, DConnectMessage.RESULT_OK);
385+
sendResponse(response);
386+
}
387+
388+
@Override
389+
public void onDisallowed() {
390+
MessageUtils.setUnknownError(response, "Permission for camera is not granted.");
391+
sendResponse(response);
392+
}
393+
});
394+
return false;
395+
} else {
396+
MessageUtils.setIllegalDeviceStateError(response, "status is not normal(streaming)");
397+
return true;
315398
}
316-
setResult(response, DConnectMessage.RESULT_OK);
317-
return true;
318399
}
319400
});
320401

@@ -328,8 +409,10 @@ public String getAttribute() {
328409
public boolean onRequest(final Intent request, final Intent response) {
329410
if (mHostDeviceLiveStreamRecorder != null) {
330411
response.putExtra(PARAM_KEY_MUTE, mHostDeviceLiveStreamRecorder.isMute());
412+
setResult(response, DConnectMessage.RESULT_OK);
413+
} else {
414+
MessageUtils.setIllegalDeviceStateError(response, "status is not normal(streaming)");
331415
}
332-
setResult(response, DConnectMessage.RESULT_OK);
333416
return true;
334417
}
335418
});

0 commit comments

Comments
 (0)