From 76d8a661ba02217a4e459b38591a997374e21c64 Mon Sep 17 00:00:00 2001 From: Takayuki Hoshi Date: Wed, 8 Jan 2020 18:43:14 +0900 Subject: [PATCH] =?UTF-8?q?Host=E3=83=97=E3=83=A9=E3=82=B0=E3=82=A4?= =?UTF-8?q?=E3=83=B3=E3=81=AERTSP=E3=82=B5=E3=83=BC=E3=83=90=E3=81=8C?= =?UTF-8?q?=E5=8B=95=E4=BD=9C=E3=81=97=E3=81=A6=E3=81=84=E3=81=AA=E3=81=84?= =?UTF-8?q?=E5=95=8F=E9=A1=8C=E3=81=AE=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## 修正内容 * HostプラグインのRTSPサーバが動作していない問題の修正 --- .../dConnectDeviceHost/app/build.gradle | 8 +- .../camera/Camera2RTSPPreviewServer.java | 81 ++++++++++--------- .../screen/ScreenCastRTSPPreviewServer.java | 61 +++++++------- 3 files changed, 75 insertions(+), 75 deletions(-) diff --git a/dConnectDevicePlugin/dConnectDeviceHost/app/build.gradle b/dConnectDevicePlugin/dConnectDeviceHost/app/build.gradle index 6a31f33032..fc654bcc5b 100644 --- a/dConnectDevicePlugin/dConnectDeviceHost/app/build.gradle +++ b/dConnectDevicePlugin/dConnectDeviceHost/app/build.gradle @@ -75,13 +75,7 @@ dependencies { implementation 'org.deviceconnect:dconnect-device-plugin-sdk:2.8.2' implementation project(':dconnect-demo-lib') implementation project(':libstreaming') - implementation('com.serenegiant:common:2.12.5') { - exclude module: 'support-v4' - //exclude module: 'recyclerview-v7' - exclude module: 'support-fragment' - exclude module: 'support-core-ui' - exclude module: 'appcompat-v7' - } + implementation 'com.serenegiant:common:2.12.5' } task zipDemo(type:Zip) { diff --git a/dConnectDevicePlugin/dConnectDeviceHost/app/src/main/java/org/deviceconnect/android/deviceplugin/host/recorder/camera/Camera2RTSPPreviewServer.java b/dConnectDevicePlugin/dConnectDeviceHost/app/src/main/java/org/deviceconnect/android/deviceplugin/host/recorder/camera/Camera2RTSPPreviewServer.java index 3ca61aa4c2..58b2c6dfd3 100644 --- a/dConnectDevicePlugin/dConnectDeviceHost/app/src/main/java/org/deviceconnect/android/deviceplugin/host/recorder/camera/Camera2RTSPPreviewServer.java +++ b/dConnectDevicePlugin/dConnectDeviceHost/app/src/main/java/org/deviceconnect/android/deviceplugin/host/recorder/camera/Camera2RTSPPreviewServer.java @@ -44,7 +44,7 @@ class Camera2RTSPPreviewServer extends AbstractRTSPPreviewServer implements Rtsp static final String MIME_TYPE = "video/x-rtp"; - private static final String SERVER_NAME = "Android Host Screen RTSP Server"; + private static final String SERVER_NAME = "Android Host Camera2 RTSP Server"; private final Object mLockObj = new Object(); @@ -62,7 +62,7 @@ class Camera2RTSPPreviewServer extends AbstractRTSPPreviewServer implements Rtsp private final Object mSync = new Object(); private volatile boolean mIsRecording; private boolean requestDraw; - private DrawTask mScreenCaptureTask; + private DrawTask mCameraCaptureTask; private AACStream mAac; Camera2RTSPPreviewServer(final Context context, @@ -108,7 +108,7 @@ public void startWebServer(final OnWebServerStartCallback callback) { } } if (mHandler == null) { - HandlerThread thread = new HandlerThread("ScreenCastRTSPPreviewServer"); + HandlerThread thread = new HandlerThread("Camera2RTSPPreviewServer"); thread.start(); mHandler = new Handler(thread.getLooper()); } @@ -159,7 +159,7 @@ public void onDisplayRotation(final int rotation) { if (DEBUG) { Log.d(TAG, "onDisplayRotation: rotation=" + rotation); } - DrawTask drawTask = mScreenCaptureTask; + DrawTask drawTask = mCameraCaptureTask; synchronized (mLockObj) { if (drawTask != null) { drawTask.onDisplayRotationChange(rotation); @@ -209,9 +209,9 @@ private Session startPreviewStreaming(final Socket clientSocket) throws IOExcept synchronized (mLockObj) { mClientSocket = clientSocket; mVideoStream = new SurfaceH264Stream(prefs, videoQuality); - mScreenCaptureTask = new DrawTask(null, 0, videoQuality); + mCameraCaptureTask = new DrawTask(null, 0, videoQuality); mIsRecording = true; - new Thread(mScreenCaptureTask, "ScreenCaptureThread").start(); + new Thread(mCameraCaptureTask, "CameraCaptureThread").start(); } SessionBuilder builder = new SessionBuilder(); @@ -335,7 +335,7 @@ protected void onStop() { @Override protected boolean onError(final Exception e) { - Log.w(TAG, "mScreenCaptureTask:", e); + Log.w(TAG, "mCameraCaptureTask:", e); return false; } @@ -354,43 +354,46 @@ protected Object processRequest(final int request, final int arg1, final int arg } }; - private final Runnable mDrawTask = () -> { - boolean localRequestDraw; - synchronized (mSync) { - localRequestDraw = requestDraw; - if (!requestDraw) { - try { - mSync.wait(intervals); - localRequestDraw = requestDraw; - requestDraw = false; - } catch (final InterruptedException e) { - if (DEBUG) { - Log.v(TAG, "draw:InterruptedException"); + private final Runnable mDrawTask = new Runnable() { + @Override + public void run() { + boolean localRequestDraw; + synchronized (mSync) { + localRequestDraw = requestDraw; + if (!requestDraw) { + try { + mSync.wait(intervals); + localRequestDraw = requestDraw; + requestDraw = false; + } catch (final InterruptedException e) { + if (DEBUG) { + Log.v(TAG, "draw:InterruptedException"); + } + return; } - return; } } - } - if (mIsRecording) { - synchronized (mDrawSync) { - if (localRequestDraw) { - mSourceTexture.updateTexImage(); - mSourceTexture.getTransformMatrix(mTexMatrix); - Matrix.rotateM(mTexMatrix, 0, mRotationDegree, 0, 0, 1); - Matrix.translateM(mTexMatrix, 0, mDeltaX, mDeltaY, 0); + if (mIsRecording) { + synchronized (mDrawSync) { + if (localRequestDraw) { + mSourceTexture.updateTexImage(); + mSourceTexture.getTransformMatrix(mTexMatrix); + Matrix.rotateM(mTexMatrix, 0, mRotationDegree, 0, 0, 1); + Matrix.translateM(mTexMatrix, 0, mDeltaX, mDeltaY, 0); + } + // SurfaceTextureで受け取った画像をMediaCodecの入力用Surfaceへ描画する + mEncoderSurface.makeCurrent(); + mDrawer.draw(mTexId, mTexMatrix, 0); + mEncoderSurface.swap(); + // EGL保持用のオフスクリーンに描画しないとハングアップする機種の為のworkaround + makeCurrent(); + GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT); + GLES20.glFlush(); + queueEvent(this); } - // SurfaceTextureで受け取った画像をMediaCodecの入力用Surfaceへ描画する - mEncoderSurface.makeCurrent(); - mDrawer.draw(mTexId, mTexMatrix, 0); - mEncoderSurface.swap(); - // EGL保持用のオフスクリーンに描画しないとハングアップする機種の為のworkaround - makeCurrent(); - GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT); - GLES20.glFlush(); - queueEvent(this); + } else { + releaseSelf(); } - } else { - releaseSelf(); } }; diff --git a/dConnectDevicePlugin/dConnectDeviceHost/app/src/main/java/org/deviceconnect/android/deviceplugin/host/recorder/screen/ScreenCastRTSPPreviewServer.java b/dConnectDevicePlugin/dConnectDeviceHost/app/src/main/java/org/deviceconnect/android/deviceplugin/host/recorder/screen/ScreenCastRTSPPreviewServer.java index fabf54ab2d..bb2bbf5088 100644 --- a/dConnectDevicePlugin/dConnectDeviceHost/app/src/main/java/org/deviceconnect/android/deviceplugin/host/recorder/screen/ScreenCastRTSPPreviewServer.java +++ b/dConnectDevicePlugin/dConnectDeviceHost/app/src/main/java/org/deviceconnect/android/deviceplugin/host/recorder/screen/ScreenCastRTSPPreviewServer.java @@ -306,39 +306,42 @@ protected Object processRequest(final int request, final int arg1, final int arg } }; - private final Runnable mDrawTask = () -> { - boolean localRequestDraw; - synchronized (mSync) { - localRequestDraw = requestDraw; - if (!requestDraw) { - try { - mSync.wait(intervals); - localRequestDraw = requestDraw; - requestDraw = false; - } catch (final InterruptedException e) { - if (DEBUG) { - Log.v(TAG, "draw:InterruptedException"); + private final Runnable mDrawTask = new Runnable() { + @Override + public void run() { + boolean localRequestDraw; + synchronized (mSync) { + localRequestDraw = requestDraw; + if (!requestDraw) { + try { + mSync.wait(intervals); + localRequestDraw = requestDraw; + requestDraw = false; + } catch (final InterruptedException e) { + if (DEBUG) { + Log.v(TAG, "draw:InterruptedException"); + } + return; } - return; } } - } - if (mIsRecording) { - if (localRequestDraw) { - mSourceTexture.updateTexImage(); - mSourceTexture.getTransformMatrix(mTexMatrix); + if (mIsRecording) { + if (localRequestDraw) { + mSourceTexture.updateTexImage(); + mSourceTexture.getTransformMatrix(mTexMatrix); + } + // SurfaceTextureで受け取った画像をMediaCodecの入力用Surfaceへ描画する + mEncoderSurface.makeCurrent(); + mDrawer.draw(mTexId, mTexMatrix, 0); + mEncoderSurface.swap(); + // EGL保持用のオフスクリーンに描画しないとハングアップする機種の為のworkaround + makeCurrent(); + GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT); + GLES20.glFlush(); + queueEvent(this); + } else { + releaseSelf(); } - // SurfaceTextureで受け取った画像をMediaCodecの入力用Surfaceへ描画する - mEncoderSurface.makeCurrent(); - mDrawer.draw(mTexId, mTexMatrix, 0); - mEncoderSurface.swap(); - // EGL保持用のオフスクリーンに描画しないとハングアップする機種の為のworkaround - makeCurrent(); - GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT); - GLES20.glFlush(); - queueEvent(this); - } else { - releaseSelf(); } };