11package org .deviceconnect .android .deviceplugin .host .profile ;
22
3- import android .content .Context ;
43import android .content .Intent ;
5- import android .hardware .camera2 .CameraCharacteristics ;
6- import android .hardware .camera2 .CameraManager ;
74import android .os .Bundle ;
85import android .util .Log ;
96
107import org .deviceconnect .android .BuildConfig ;
118import org .deviceconnect .android .deviceplugin .host .recorder .HostDeviceLiveStreamRecorder ;
129import org .deviceconnect .android .deviceplugin .host .recorder .HostMediaRecorder ;
1310import org .deviceconnect .android .deviceplugin .host .recorder .HostMediaRecorderManager ;
14- import org .deviceconnect .android .deviceplugin .host .recorder .screen .ScreenCastRecorder ;
1511import org .deviceconnect .android .event .Event ;
1612import org .deviceconnect .android .event .EventError ;
1713import org .deviceconnect .android .event .EventManager ;
2521import org .deviceconnect .android .profile .api .PutApi ;
2622import org .deviceconnect .message .DConnectMessage ;
2723
28- import java .util .List ;
2924
3025public 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