From 165655c4e66f319acf44473acd6207fb72b8c579 Mon Sep 17 00:00:00 2001 From: acgist <289547414@qq.com> Date: Sun, 30 Apr 2023 11:33:06 +0800 Subject: [PATCH] =?UTF-8?q?[+]=20=E4=BF=A1=E4=BB=A4=E6=96=AD=E5=BC=80?= =?UTF-8?q?=E9=87=8A=E6=94=BE=E5=AA=92=E4=BD=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 14 +++- taoyao-client-android/README.md | 6 ++ .../acgist/taoyao/client/MainActivity.java | 9 ++- .../acgist/taoyao/client/signal/Taoyao.java | 42 +++++++---- .../com/acgist/taoyao/media/MediaManager.java | 69 ++++++++++--------- .../acgist/taoyao/media/client/Client.java | 11 ++- .../taoyao/media/client/LocalClient.java | 19 +++-- .../taoyao/media/client/RemoteClient.java | 15 ++-- .../com/acgist/taoyao/media/client/Room.java | 2 +- .../taoyao/media/client/SessionClient.java | 3 - .../java/org/webrtc/AndroidVideoDecoder.java | 7 +- .../java/org/webrtc/Camera1Enumerator.java | 5 +- .../main/java/org/webrtc/Camera1Session.java | 4 +- .../main/java/org/webrtc/Camera2Capturer.java | 1 + .../java/org/webrtc/Camera2Enumerator.java | 7 +- .../main/java/org/webrtc/Camera2Session.java | 7 +- .../main/java/org/webrtc/CameraCapturer.java | 2 + .../org/webrtc/CameraEnumerationAndroid.java | 1 + .../main/java/org/webrtc/CameraSession.java | 2 +- .../webrtc/DefaultVideoDecoderFactory.java | 1 + .../webrtc/DefaultVideoEncoderFactory.java | 1 + .../src/main/java/org/webrtc/EglBase.java | 5 +- .../main/java/org/webrtc/EglBase10Impl.java | 4 +- .../main/java/org/webrtc/EglBase14Impl.java | 4 +- .../src/main/java/org/webrtc/EglRenderer.java | 4 +- .../main/java/org/webrtc/EncodedImage.java | 1 + .../java/org/webrtc/FileVideoCapturer.java | 1 + .../main/java/org/webrtc/GlGenericDrawer.java | 5 +- .../src/main/java/org/webrtc/GlUtil.java | 1 + .../src/main/java/org/webrtc/H264Utils.java | 2 +- .../webrtc/HardwareVideoDecoderFactory.java | 2 +- .../java/org/webrtc/HardwareVideoEncoder.java | 7 +- .../webrtc/HardwareVideoEncoderFactory.java | 2 + .../main/java/org/webrtc/IceCandidate.java | 2 +- .../src/main/java/org/webrtc/JNILogging.java | 2 - .../main/java/org/webrtc/JavaI420Buffer.java | 4 +- .../src/main/java/org/webrtc/Logging.java | 2 +- .../main/java/org/webrtc/MediaCodecUtils.java | 2 + .../webrtc/MediaCodecVideoDecoderFactory.java | 2 + .../java/org/webrtc/MediaCodecWrapper.java | 1 + .../webrtc/MediaCodecWrapperFactoryImpl.java | 1 + .../java/org/webrtc/MediaConstraints.java | 1 + .../src/main/java/org/webrtc/NV12Buffer.java | 1 + .../src/main/java/org/webrtc/NV21Buffer.java | 1 + .../webrtc/NativeAndroidVideoTrackSource.java | 2 - .../org/webrtc/NativeCapturerObserver.java | 2 - .../org/webrtc/NetworkChangeDetector.java | 1 + .../main/java/org/webrtc/NetworkMonitor.java | 3 +- .../org/webrtc/NetworkMonitorAutoDetect.java | 4 +- .../main/java/org/webrtc/PeerConnection.java | 5 +- .../org/webrtc/PeerConnectionFactory.java | 6 +- .../PlatformSoftwareVideoDecoderFactory.java | 2 +- .../java/org/webrtc/RefCountDelegate.java | 1 + .../java/org/webrtc/RtcCertificatePem.java | 2 - .../main/java/org/webrtc/RtpParameters.java | 4 +- .../src/main/java/org/webrtc/RtpReceiver.java | 1 - .../src/main/java/org/webrtc/RtpSender.java | 1 + .../main/java/org/webrtc/RtpTransceiver.java | 2 - .../org/webrtc/ScreenCapturerAndroid.java | 3 +- .../webrtc/SoftwareVideoDecoderFactory.java | 1 + .../webrtc/SoftwareVideoEncoderFactory.java | 1 + .../java/org/webrtc/SurfaceEglRenderer.java | 1 + .../java/org/webrtc/SurfaceTextureHelper.java | 5 +- .../java/org/webrtc/TextureBufferImpl.java | 1 + .../src/main/java/org/webrtc/ThreadUtils.java | 2 + .../main/java/org/webrtc/VideoCodecInfo.java | 1 + .../java/org/webrtc/VideoDecoderWrapper.java | 2 - .../main/java/org/webrtc/VideoEncoder.java | 1 - .../java/org/webrtc/VideoEncoderWrapper.java | 2 +- .../java/org/webrtc/VideoFileRenderer.java | 1 + .../src/main/java/org/webrtc/VideoFrame.java | 1 + .../java/org/webrtc/VideoFrameDrawer.java | 2 + .../main/java/org/webrtc/YuvConverter.java | 5 +- .../webrtc/audio/JavaAudioDeviceModule.java | 5 +- .../audio/LowLatencyAudioBufferManager.java | 1 + .../java/org/webrtc/audio/VolumeLogger.java | 5 +- .../org/webrtc/audio/WebRtcAudioEffects.java | 5 +- .../org/webrtc/audio/WebRtcAudioManager.java | 3 +- .../org/webrtc/audio/WebRtcAudioRecord.java | 18 ++--- .../org/webrtc/audio/WebRtcAudioTrack.java | 6 +- .../org/webrtc/audio/WebRtcAudioUtils.java | 5 +- .../voiceengine/WebRtcAudioEffects.java | 5 +- .../voiceengine/WebRtcAudioManager.java | 7 +- .../webrtc/voiceengine/WebRtcAudioRecord.java | 8 ++- .../webrtc/voiceengine/WebRtcAudioTrack.java | 6 +- .../webrtc/voiceengine/WebRtcAudioUtils.java | 7 +- taoyao-client-media/src/Taoyao.js | 17 ++++- taoyao-client-web/src/App.vue | 32 ++++----- taoyao-client-web/src/components/Taoyao.js | 44 +++++++++--- 89 files changed, 343 insertions(+), 181 deletions(-) diff --git a/README.md b/README.md index 2f1cba2..897ff1d 100644 --- a/README.md +++ b/README.md @@ -33,7 +33,7 @@ |功能|是否支持|是否实现|描述| |:--|:--|:--|:--| |P2P|支持|完成|视频会话(监控)| -|WebRTC|支持|完成|视频房间(会话)| +|Mediasoup|支持|完成|视频房间(会话)| |控制|支持|完成|完整控制信令| ### 安卓终端功能 @@ -41,7 +41,7 @@ |功能|是否支持|是否实现|描述| |:--|:--|:--|:--| |P2P|支持|完成|视频会话(监控)| -|WebRTC|支持|完成|视频房间(会议)| +|Mediasoup|支持|完成|视频房间(会议)| |控制|支持|完成|部分控制信令| |拍照|支持|完成|拍照| |录像|支持|完成|录制| @@ -71,3 +71,13 @@ #### 代理终端 将下级信令服务的终端全部使用代理终端注册到上级信令服务,上级信令服务代理终端处理信令时直接路由到下级路由服务,这样一级一级路由直到发送给真正的终端为止。 + +## 重连 + +### 信令重连 + +所有终端信令默认支持重连 + +### 媒体重连 + +信令没有断开媒体重连依赖具体协议支持,如果信令断开默认关闭所有媒体,信令重连以后需要自己实现媒体重连(控制方主动邀请或者重连方主动进入)。 diff --git a/taoyao-client-android/README.md b/taoyao-client-android/README.md index d8f8866..200c122 100644 --- a/taoyao-client-android/README.md +++ b/taoyao-client-android/README.md @@ -16,6 +16,12 @@ > 注意删除目录`linux-include/build`和`linux-include/third_party`目录中除了`abseil-cpp`以外的所有依赖(当然不删也没关系就是文件太多编译器会变慢) +## 镜头旋转 + +1. 应用旋转(横屏|竖屏) +2. 代码旋转 +3. 镜头物理旋转 + ## 学习资料 * https://developer.android.google.cn/docs?hl=zh-cn diff --git a/taoyao-client-android/taoyao/client/src/main/java/com/acgist/taoyao/client/MainActivity.java b/taoyao-client-android/taoyao/client/src/main/java/com/acgist/taoyao/client/MainActivity.java index 45c3b5e..c3b434e 100644 --- a/taoyao-client-android/taoyao/client/src/main/java/com/acgist/taoyao/client/MainActivity.java +++ b/taoyao-client-android/taoyao/client/src/main/java/com/acgist/taoyao/client/MainActivity.java @@ -6,7 +6,6 @@ import android.content.Intent; import android.content.pm.PackageManager; import android.content.res.ColorStateList; import android.content.res.Resources; -import android.graphics.Color; import android.media.projection.MediaProjectionManager; import android.os.Bundle; import android.os.Handler; @@ -27,7 +26,6 @@ import androidx.appcompat.app.AppCompatActivity; import androidx.core.app.ActivityCompat; import com.acgist.taoyao.client.databinding.ActivityMainBinding; -import com.acgist.taoyao.client.signal.Taoyao; import com.acgist.taoyao.media.MediaManager; import com.acgist.taoyao.media.VideoSourceType; import com.acgist.taoyao.media.config.Config; @@ -53,6 +51,8 @@ public class MainActivity extends AppCompatActivity implements Serializable { protected void onCreate(Bundle bundle) { Log.i(MainActivity.class.getSimpleName(), "onCreate"); super.onCreate(bundle); + // 强制横屏 +// this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); this.requestPermission(); this.launchMediaService(); this.setTurnScreenOn(true); @@ -216,7 +216,7 @@ public class MainActivity extends AppCompatActivity implements Serializable { @Override public void handleMessage(@NonNull Message message) { super.handleMessage(message); - Log.d(MainHandler.class.getSimpleName(), "Handler消息:" + message.what + " - " + message.obj); + Log.d(MainHandler.class.getSimpleName(), "Handler消息:" + message.what); switch (message.what) { case Config.WHAT_SCREEN_CAPTURE -> MainActivity.this.screenCapture(message); case Config.WHAT_RECORD -> MainActivity.this.record(message); @@ -270,6 +270,9 @@ public class MainActivity extends AppCompatActivity implements Serializable { final GridLayout video = this.binding.video; final SurfaceView surfaceView = (SurfaceView) message.obj; final int index = video.indexOfChild(surfaceView); + if(index < 0) { + return; + } video.removeViewAt(index); } } diff --git a/taoyao-client-android/taoyao/client/src/main/java/com/acgist/taoyao/client/signal/Taoyao.java b/taoyao-client-android/taoyao/client/src/main/java/com/acgist/taoyao/client/signal/Taoyao.java index e164218..0847080 100644 --- a/taoyao-client-android/taoyao/client/src/main/java/com/acgist/taoyao/client/signal/Taoyao.java +++ b/taoyao-client-android/taoyao/client/src/main/java/com/acgist/taoyao/client/signal/Taoyao.java @@ -184,13 +184,13 @@ public final class Taoyao implements ITaoyao { */ private final MediaManager mediaManager; /** - * 房间列表 + * 视频房间列表 */ private final Map rooms; /** - * 会话终端列表 + * 视频会话列表 */ - private final Map sessionClients; + private final Map sessions; /** * 全局静态变量 */ @@ -240,7 +240,7 @@ public final class Taoyao implements ITaoyao { this.heartbeatHandler.postDelayed(this::heartbeat, 30L * 1000); this.mediaManager = MediaManager.getInstance(); this.rooms = new ConcurrentHashMap<>(); - this.sessionClients = new ConcurrentHashMap<>(); + this.sessions = new ConcurrentHashMap<>(); Taoyao.taoyao = this; } @@ -441,6 +441,24 @@ public final class Taoyao implements ITaoyao { this.input = null; this.output = null; this.socket = null; + this.closeRoomMedia(); + this.closeSessionMedia(); + } + + private void closeRoomMedia() { + Log.i(Taoyao.class.getSimpleName(), "释放所有视频房间"); + this.rooms.forEach((k, v) -> { + v.close(); + }); + this.rooms.clear(); + } + + private void closeSessionMedia() { + Log.i(Taoyao.class.getSimpleName(), "释放所有视频会话"); + this.sessions.forEach((k, v) -> { + v.close(); + }); + this.sessions.clear(); } /** @@ -457,7 +475,7 @@ public final class Taoyao implements ITaoyao { this.messageThread.quitSafely(); this.executeThread.quitSafely(); this.rooms.values().forEach(Room::close); - this.sessionClients.values().forEach(SessionClient::close); + this.sessions.values().forEach(SessionClient::close); } /** @@ -624,7 +642,7 @@ public final class Taoyao implements ITaoyao { */ private void clientConfig(Message message, Map body) { final MediaProperties mediaProperties = JSONUtils.toJava(JSONUtils.toJSON(body.get("media")), MediaProperties.class); - this.mediaManager.updateMediaConfig(mediaProperties, mediaProperties.getAudio(), mediaProperties.getVideo()); + this.mediaManager.updateMediaConfig(mediaProperties); final WebrtcProperties webrtcProperties = JSONUtils.toJava(JSONUtils.toJSON(body.get("webrtc")), WebrtcProperties.class); this.mediaManager.updateWebrtcConfig(webrtcProperties); } @@ -853,7 +871,7 @@ public final class Taoyao implements ITaoyao { this.mediaManager.getMediaProperties(), this.mediaManager.getWebrtcProperties() ); - this.sessionClients.put(sessionId, sessionClient); + this.sessions.put(sessionId, sessionClient); } ); } @@ -877,14 +895,14 @@ public final class Taoyao implements ITaoyao { this.mediaManager.getMediaProperties(), this.mediaManager.getWebrtcProperties() ); - this.sessionClients.put(sessionId, sessionClient); + this.sessions.put(sessionId, sessionClient); sessionClient.init(); sessionClient.offer(); } private void sessionClose(Message message, Map body) { final String sessionId = MapUtils.get(body, "sessionId"); - final SessionClient sessionClient = this.sessionClients.remove(sessionId); + final SessionClient sessionClient = this.sessions.remove(sessionId); if(sessionClient == null) { return; } @@ -893,7 +911,7 @@ public final class Taoyao implements ITaoyao { private void sessionExchange(Message message, Map body) { final String sessionId = MapUtils.get(body, "sessionId"); - final SessionClient sessionClient = this.sessionClients.get(sessionId); + final SessionClient sessionClient = this.sessions.get(sessionId); if(sessionClient == null) { Log.w(Taoyao.class.getSimpleName(), "会话交换无效会话:" + sessionId); return; @@ -903,7 +921,7 @@ public final class Taoyao implements ITaoyao { private void sessionPause(Message message, Map body) { final String sessionId = MapUtils.get(body, "sessionId"); - final SessionClient sessionClient = this.sessionClients.get(sessionId); + final SessionClient sessionClient = this.sessions.get(sessionId); if(sessionClient == null) { return; } @@ -913,7 +931,7 @@ public final class Taoyao implements ITaoyao { private void sessionResume(Message message, Map body) { final String sessionId = MapUtils.get(body, "sessionId"); - final SessionClient sessionClient = this.sessionClients.get(sessionId); + final SessionClient sessionClient = this.sessions.get(sessionId); if(sessionClient == null) { return; } diff --git a/taoyao-client-android/taoyao/media/src/main/java/com/acgist/taoyao/media/MediaManager.java b/taoyao-client-android/taoyao/media/src/main/java/com/acgist/taoyao/media/MediaManager.java index 76a9618..8ed0ab1 100644 --- a/taoyao-client-android/taoyao/media/src/main/java/com/acgist/taoyao/media/MediaManager.java +++ b/taoyao-client-android/taoyao/media/src/main/java/com/acgist/taoyao/media/MediaManager.java @@ -4,7 +4,6 @@ import android.content.Context; import android.content.Intent; import android.media.projection.MediaProjection; import android.os.Handler; -import android.os.Message; import android.util.Log; import com.acgist.taoyao.media.client.PhotographClient; @@ -109,14 +108,6 @@ public final class MediaManager { * 媒体配置 */ private MediaProperties mediaProperties; - /** - * 当前共享视频配置 - */ - private MediaVideoProperties mediaVideoProperties; - /** - * 当前共享音频配置 - */ - private MediaAudioProperties mediaAudioProperties; /** * WebRTC配置 */ @@ -291,7 +282,6 @@ public final class MediaManager { PeerConnectionFactory.InitializationOptions.builder(this.context) // .setFieldTrials("WebRTC-IntelVP8/Enabled/") // .setFieldTrials("WebRTC-H264HighProfile/Enabled/") - // TODO:测试是否需要c++全局加载JavaVM? // .setNativeLibraryName("jingle_peerconnection_so") // .setEnableInternalTracer(true) .createInitializationOptions() @@ -433,9 +423,7 @@ public final class MediaManager { } private void initSharePromise() { - final Message message = new Message(); - message.what = Config.WHAT_SCREEN_CAPTURE; - this.mainHandler.sendMessage(message); + this.mainHandler.obtainMessage(Config.WHAT_SCREEN_CAPTURE).sendToTarget(); } /** @@ -460,7 +448,8 @@ public final class MediaManager { this.mainVideoSource = this.peerConnectionFactory.createVideoSource(this.videoCapturer.isScreencast()); // 次码流 this.shareVideoSource = this.peerConnectionFactory.createVideoSource(this.videoCapturer.isScreencast()); - this.shareVideoSource.adaptOutputFormat(this.mediaVideoProperties.getWidth(), this.mediaVideoProperties.getHeight(), this.mediaVideoProperties.getFrameRate()); + final MediaVideoProperties mediaVideoProperties = this.mediaProperties.getVideo(); + this.shareVideoSource.adaptOutputFormat(mediaVideoProperties.getWidth(), mediaVideoProperties.getHeight(), mediaVideoProperties.getFrameRate()); // 视频捕获 this.videoCapturer.initialize(this.surfaceTextureHelper, this.context, new VideoCapturerObserver()); // 次码流视频处理 @@ -474,25 +463,39 @@ public final class MediaManager { * @param mediaAudioProperties 音频配置 * @param mediaVideoProperties 视频配置 */ - public void updateMediaConfig(MediaProperties mediaProperties, MediaAudioProperties mediaAudioProperties, MediaVideoProperties mediaVideoProperties) { + public void updateMediaConfig(MediaProperties mediaProperties) { this.mediaProperties = mediaProperties; - this.updateAudioConfig(this.mediaProperties.getAudio()); - this.updateVideoConfig(this.mediaProperties.getVideo()); + this.updateAudioConfig(); + this.updateVideoConfig(); synchronized (this) { this.notifyAll(); } } public void updateAudioConfig(MediaAudioProperties mediaAudioProperties) { - this.mediaAudioProperties = mediaAudioProperties; + this.mediaProperties.setAudio(mediaAudioProperties); + this.updateAudioConfig(); + } + + private void updateAudioConfig() { + MediaAudioProperties mediaAudioProperties = this.mediaProperties.getAudio(); + // TODO:调整音频 } public void updateVideoConfig(MediaVideoProperties mediaVideoProperties) { - this.mediaVideoProperties = mediaVideoProperties; - if(this.shareVideoSource == null) { - return; + this.mediaProperties.setVideo(mediaVideoProperties); + this.updateVideoConfig(); + } + + private void updateVideoConfig() { + if(this.videoCapturer != null) { + final MediaVideoProperties mediaVideoProperties = this.mediaProperties.getVideos().get(this.videoQuantity); + this.videoCapturer.changeCaptureFormat(mediaVideoProperties.getWidth(), mediaVideoProperties.getHeight(), mediaVideoProperties.getFrameRate()); + } + if(this.shareVideoSource != null) { + final MediaVideoProperties mediaVideoProperties = this.mediaProperties.getVideo(); + this.shareVideoSource.adaptOutputFormat(mediaVideoProperties.getWidth(), mediaVideoProperties.getHeight(), mediaVideoProperties.getFrameRate()); } - this.shareVideoSource.adaptOutputFormat(this.mediaVideoProperties.getWidth(), this.mediaVideoProperties.getHeight(), this.mediaVideoProperties.getFrameRate()); } public void updateWebrtcConfig(WebrtcProperties webrtcProperties) { @@ -658,24 +661,24 @@ public final class MediaManager { public SurfaceViewRenderer buildSurfaceViewRenderer(final int flag, final VideoTrack videoTrack) { // 预览控件 final SurfaceViewRenderer surfaceViewRenderer = new SurfaceViewRenderer(this.context); + // 添加播放 + videoTrack.addSink(surfaceViewRenderer); + // 页面加载 + this.mainHandler.obtainMessage(flag, surfaceViewRenderer).sendToTarget(); this.mainHandler.post(() -> { // 视频反转 - surfaceViewRenderer.setMirror(false); +// surfaceViewRenderer.setMirror(false); + // 旋转画面 +// surfaceViewRenderer.setRotation(90); // 视频拉伸 - surfaceViewRenderer.setScalingType(RendererCommon.ScalingType.SCALE_ASPECT_FILL); - // 硬件拉伸 - surfaceViewRenderer.setEnableHardwareScaler(true); +// surfaceViewRenderer.setScalingType(RendererCommon.ScalingType.SCALE_ASPECT_FILL); + // 调整帧率 // surfaceViewRenderer.setFpsReduction(); + // 硬件拉伸 +// surfaceViewRenderer.setEnableHardwareScaler(true); // 加载OpenSL ES surfaceViewRenderer.init(this.eglContext, null); - // 添加播放 - videoTrack.addSink(surfaceViewRenderer); }); - // 页面加载 - final Message message = new Message(); - message.obj = surfaceViewRenderer; - message.what = flag; - this.mainHandler.sendMessage(message); return surfaceViewRenderer; } diff --git a/taoyao-client-android/taoyao/media/src/main/java/com/acgist/taoyao/media/client/Client.java b/taoyao-client-android/taoyao/media/src/main/java/com/acgist/taoyao/media/client/Client.java index 3f99ec8..0ca72a6 100644 --- a/taoyao-client-android/taoyao/media/src/main/java/com/acgist/taoyao/media/client/Client.java +++ b/taoyao-client-android/taoyao/media/src/main/java/com/acgist/taoyao/media/client/Client.java @@ -1,7 +1,6 @@ package com.acgist.taoyao.media.client; import android.os.Handler; -import android.os.Message; import android.util.Log; import com.acgist.taoyao.media.config.Config; @@ -77,13 +76,11 @@ public abstract class Client extends CloseableClient { super.close(); Log.i(this.getClass().getSimpleName(), "关闭终端:" + this.clientId); if(this.surfaceViewRenderer != null) { - // 移除 - final Message message = new Message(); - message.obj = surfaceViewRenderer; - message.what = Config.WHAT_REMOVE_VIDEO; - this.mainHandler.sendMessage(message); - // 销毁 + // 释放资源 this.surfaceViewRenderer.release(); + // 移除资源:注意先释放再移除避免报错 + this.mainHandler.obtainMessage(Config.WHAT_REMOVE_VIDEO, this.surfaceViewRenderer).sendToTarget(); + // 设置为空 this.surfaceViewRenderer = null; } } diff --git a/taoyao-client-android/taoyao/media/src/main/java/com/acgist/taoyao/media/client/LocalClient.java b/taoyao-client-android/taoyao/media/src/main/java/com/acgist/taoyao/media/client/LocalClient.java index 572b7ca..d1c7599 100644 --- a/taoyao-client-android/taoyao/media/src/main/java/com/acgist/taoyao/media/client/LocalClient.java +++ b/taoyao-client-android/taoyao/media/src/main/java/com/acgist/taoyao/media/client/LocalClient.java @@ -74,13 +74,18 @@ public class LocalClient extends RoomClient { @Override public void close() { - Log.i(RemoteClient.class.getSimpleName(), "关闭本地终端:" + this.clientId); - super.close(); - if(this.mediaStream == null) { - return; - } - synchronized (this.mediaStream) { - this.mediaStream.dispose(); + synchronized (this) { + if(this.close) { + return; + } + super.close(); + Log.i(RemoteClient.class.getSimpleName(), "关闭本地终端:" + this.clientId); + if(this.mediaStream == null) { + return; + } + synchronized (this.mediaStream) { + this.mediaStream.dispose(); + } } } diff --git a/taoyao-client-android/taoyao/media/src/main/java/com/acgist/taoyao/media/client/RemoteClient.java b/taoyao-client-android/taoyao/media/src/main/java/com/acgist/taoyao/media/client/RemoteClient.java index f9e7f58..ae1c64b 100644 --- a/taoyao-client-android/taoyao/media/src/main/java/com/acgist/taoyao/media/client/RemoteClient.java +++ b/taoyao-client-android/taoyao/media/src/main/java/com/acgist/taoyao/media/client/RemoteClient.java @@ -67,11 +67,16 @@ public class RemoteClient extends RoomClient { @Override public void close() { - Log.i(RemoteClient.class.getSimpleName(), "关闭远程终端:" + this.clientId); - super.close(); - synchronized (this.tracks) { - // 注意:使用nativeMediaConsumerClose释放 - this.tracks.clear(); + synchronized (this) { + if(this.close) { + return; + } + super.close(); + Log.i(RemoteClient.class.getSimpleName(), "关闭远程终端:" + this.clientId); + synchronized (this.tracks) { + // 注意:使用nativeMediaConsumerClose释放 + this.tracks.clear(); + } } } diff --git a/taoyao-client-android/taoyao/media/src/main/java/com/acgist/taoyao/media/client/Room.java b/taoyao-client-android/taoyao/media/src/main/java/com/acgist/taoyao/media/client/Room.java index 3080d99..33528bc 100644 --- a/taoyao-client-android/taoyao/media/src/main/java/com/acgist/taoyao/media/client/Room.java +++ b/taoyao-client-android/taoyao/media/src/main/java/com/acgist/taoyao/media/client/Room.java @@ -27,7 +27,7 @@ import java.util.Map; import java.util.concurrent.ConcurrentHashMap; /** - * 房间 + * 视频房间 * * @author acgist */ diff --git a/taoyao-client-android/taoyao/media/src/main/java/com/acgist/taoyao/media/client/SessionClient.java b/taoyao-client-android/taoyao/media/src/main/java/com/acgist/taoyao/media/client/SessionClient.java index b0f7be7..d515390 100644 --- a/taoyao-client-android/taoyao/media/src/main/java/com/acgist/taoyao/media/client/SessionClient.java +++ b/taoyao-client-android/taoyao/media/src/main/java/com/acgist/taoyao/media/client/SessionClient.java @@ -365,21 +365,18 @@ public class SessionClient extends Client { public void onSignalingChange(PeerConnection.SignalingState signalingState) { Log.d(SessionClient.class.getSimpleName(), "PC信令状态改变:" + signalingState); SessionClient.this.logState(); - // TODO:处理失败 } @Override public void onIceGatheringChange(PeerConnection.IceGatheringState iceGatheringState) { Log.d(SessionClient.class.getSimpleName(), "PCIce收集状态改变:" + iceGatheringState); SessionClient.this.logState(); - // TODO:处理失败 } @Override public void onIceConnectionChange(PeerConnection.IceConnectionState iceConnectionState) { Log.d(SessionClient.class.getSimpleName(), "PCIce连接状态改变:" + iceConnectionState); SessionClient.this.logState(); - // TODO:处理失败 } @Override diff --git a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/AndroidVideoDecoder.java b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/AndroidVideoDecoder.java index ea4787a..eb6248f 100644 --- a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/AndroidVideoDecoder.java +++ b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/AndroidVideoDecoder.java @@ -14,14 +14,17 @@ import android.media.MediaCodec; import android.media.MediaCodecInfo.CodecCapabilities; import android.media.MediaFormat; import android.os.SystemClock; -import androidx.annotation.Nullable; import android.view.Surface; + +import androidx.annotation.Nullable; + +import org.webrtc.ThreadUtils.ThreadChecker; + import java.io.IOException; import java.nio.ByteBuffer; import java.util.concurrent.BlockingDeque; import java.util.concurrent.LinkedBlockingDeque; import java.util.concurrent.TimeUnit; -import org.webrtc.ThreadUtils.ThreadChecker; /** * Android hardware video decoder. diff --git a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/Camera1Enumerator.java b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/Camera1Enumerator.java index fb1a21f..e90bf99 100644 --- a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/Camera1Enumerator.java +++ b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/Camera1Enumerator.java @@ -11,10 +11,13 @@ package org.webrtc; import android.os.SystemClock; + import androidx.annotation.Nullable; + +import org.webrtc.CameraEnumerationAndroid.CaptureFormat; + import java.util.ArrayList; import java.util.List; -import org.webrtc.CameraEnumerationAndroid.CaptureFormat; @SuppressWarnings("deprecation") public class Camera1Enumerator implements CameraEnumerator { diff --git a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/Camera1Session.java b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/Camera1Session.java index a439315..983f5e9 100644 --- a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/Camera1Session.java +++ b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/Camera1Session.java @@ -13,11 +13,13 @@ package org.webrtc; import android.content.Context; import android.os.Handler; import android.os.SystemClock; + +import org.webrtc.CameraEnumerationAndroid.CaptureFormat; + import java.io.IOException; import java.nio.ByteBuffer; import java.util.List; import java.util.concurrent.TimeUnit; -import org.webrtc.CameraEnumerationAndroid.CaptureFormat; @SuppressWarnings("deprecation") class Camera1Session implements CameraSession { diff --git a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/Camera2Capturer.java b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/Camera2Capturer.java index 3c1d477..67303f9 100644 --- a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/Camera2Capturer.java +++ b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/Camera2Capturer.java @@ -13,6 +13,7 @@ package org.webrtc; import android.annotation.TargetApi; import android.content.Context; import android.hardware.camera2.CameraManager; + import androidx.annotation.Nullable; @TargetApi(21) diff --git a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/Camera2Enumerator.java b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/Camera2Enumerator.java index b77bf00..9a68621 100644 --- a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/Camera2Enumerator.java +++ b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/Camera2Enumerator.java @@ -20,14 +20,17 @@ import android.hardware.camera2.CameraMetadata; import android.hardware.camera2.params.StreamConfigurationMap; import android.os.Build; import android.os.SystemClock; -import androidx.annotation.Nullable; import android.util.AndroidException; import android.util.Range; + +import androidx.annotation.Nullable; + +import org.webrtc.CameraEnumerationAndroid.CaptureFormat; + import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; -import org.webrtc.CameraEnumerationAndroid.CaptureFormat; @TargetApi(21) public class Camera2Enumerator implements CameraEnumerator { diff --git a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/Camera2Session.java b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/Camera2Session.java index b879343..d5f6c7b 100644 --- a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/Camera2Session.java +++ b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/Camera2Session.java @@ -21,13 +21,16 @@ import android.hardware.camera2.CameraMetadata; import android.hardware.camera2.CaptureFailure; import android.hardware.camera2.CaptureRequest; import android.os.Handler; -import androidx.annotation.Nullable; import android.util.Range; import android.view.Surface; + +import androidx.annotation.Nullable; + +import org.webrtc.CameraEnumerationAndroid.CaptureFormat; + import java.util.Arrays; import java.util.List; import java.util.concurrent.TimeUnit; -import org.webrtc.CameraEnumerationAndroid.CaptureFormat; @TargetApi(21) class Camera2Session implements CameraSession { diff --git a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/CameraCapturer.java b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/CameraCapturer.java index 1922a52..41fc846 100644 --- a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/CameraCapturer.java +++ b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/CameraCapturer.java @@ -13,7 +13,9 @@ package org.webrtc; import android.content.Context; import android.os.Handler; import android.os.Looper; + import androidx.annotation.Nullable; + import java.util.Arrays; import java.util.List; diff --git a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/CameraEnumerationAndroid.java b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/CameraEnumerationAndroid.java index 0c3188f..051c772 100644 --- a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/CameraEnumerationAndroid.java +++ b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/CameraEnumerationAndroid.java @@ -13,6 +13,7 @@ package org.webrtc; import static java.lang.Math.abs; import android.graphics.ImageFormat; + import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; diff --git a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/CameraSession.java b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/CameraSession.java index 8d13785..ac9926e 100644 --- a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/CameraSession.java +++ b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/CameraSession.java @@ -12,8 +12,8 @@ package org.webrtc; import android.content.Context; import android.graphics.Matrix; -import android.view.WindowManager; import android.view.Surface; +import android.view.WindowManager; interface CameraSession { enum FailureType { ERROR, DISCONNECTED } diff --git a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/DefaultVideoDecoderFactory.java b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/DefaultVideoDecoderFactory.java index d7a8694..fda2042 100644 --- a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/DefaultVideoDecoderFactory.java +++ b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/DefaultVideoDecoderFactory.java @@ -11,6 +11,7 @@ package org.webrtc; import androidx.annotation.Nullable; + import java.util.Arrays; import java.util.LinkedHashSet; diff --git a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/DefaultVideoEncoderFactory.java b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/DefaultVideoEncoderFactory.java index 76896b6..125c088 100644 --- a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/DefaultVideoEncoderFactory.java +++ b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/DefaultVideoEncoderFactory.java @@ -11,6 +11,7 @@ package org.webrtc; import androidx.annotation.Nullable; + import java.util.Arrays; import java.util.LinkedHashSet; diff --git a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/EglBase.java b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/EglBase.java index fa16944..6277ef5 100644 --- a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/EglBase.java +++ b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/EglBase.java @@ -11,9 +11,12 @@ package org.webrtc; import android.graphics.SurfaceTexture; -import androidx.annotation.Nullable; import android.view.Surface; + +import androidx.annotation.Nullable; + import java.util.ArrayList; + import javax.microedition.khronos.egl.EGL10; /** diff --git a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/EglBase10Impl.java b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/EglBase10Impl.java index eec5f70..d8bb284 100644 --- a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/EglBase10Impl.java +++ b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/EglBase10Impl.java @@ -13,9 +13,11 @@ package org.webrtc; import android.graphics.Canvas; import android.graphics.Rect; import android.graphics.SurfaceTexture; -import androidx.annotation.Nullable; import android.view.Surface; import android.view.SurfaceHolder; + +import androidx.annotation.Nullable; + import javax.microedition.khronos.egl.EGL10; import javax.microedition.khronos.egl.EGLConfig; import javax.microedition.khronos.egl.EGLContext; diff --git a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/EglBase14Impl.java b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/EglBase14Impl.java index 4d2c50e..8aaa724 100644 --- a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/EglBase14Impl.java +++ b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/EglBase14Impl.java @@ -19,9 +19,9 @@ import android.opengl.EGLDisplay; import android.opengl.EGLExt; import android.opengl.EGLSurface; import android.os.Build; -import androidx.annotation.Nullable; import android.view.Surface; -import org.webrtc.EglBase; + +import androidx.annotation.Nullable; /** * Holds EGL state and utility methods for handling an EGL14 EGLContext, an EGLDisplay, diff --git a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/EglRenderer.java b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/EglRenderer.java index 55962ed..5f7efb7 100644 --- a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/EglRenderer.java +++ b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/EglRenderer.java @@ -18,8 +18,10 @@ import android.os.Handler; import android.os.HandlerThread; import android.os.Looper; import android.os.Message; -import androidx.annotation.Nullable; import android.view.Surface; + +import androidx.annotation.Nullable; + import java.nio.ByteBuffer; import java.text.DecimalFormat; import java.util.ArrayList; diff --git a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/EncodedImage.java b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/EncodedImage.java index a6eef67..771ce0b 100644 --- a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/EncodedImage.java +++ b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/EncodedImage.java @@ -11,6 +11,7 @@ package org.webrtc; import androidx.annotation.Nullable; + import java.nio.ByteBuffer; import java.util.concurrent.TimeUnit; diff --git a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/FileVideoCapturer.java b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/FileVideoCapturer.java index 8270367..5ac89ec 100644 --- a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/FileVideoCapturer.java +++ b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/FileVideoCapturer.java @@ -12,6 +12,7 @@ package org.webrtc; import android.content.Context; import android.os.SystemClock; + import java.io.IOException; import java.io.RandomAccessFile; import java.nio.ByteBuffer; diff --git a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/GlGenericDrawer.java b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/GlGenericDrawer.java index b70a372..6ae843d 100644 --- a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/GlGenericDrawer.java +++ b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/GlGenericDrawer.java @@ -12,11 +12,10 @@ package org.webrtc; import android.opengl.GLES11Ext; import android.opengl.GLES20; + import androidx.annotation.Nullable; + import java.nio.FloatBuffer; -import org.webrtc.GlShader; -import org.webrtc.GlUtil; -import org.webrtc.RendererCommon; /** * Helper class to implement an instance of RendererCommon.GlDrawer that can accept multiple input diff --git a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/GlUtil.java b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/GlUtil.java index e2dd0c5..f7ad99f 100644 --- a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/GlUtil.java +++ b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/GlUtil.java @@ -12,6 +12,7 @@ package org.webrtc; import android.opengl.GLES20; import android.opengl.GLException; + import java.nio.ByteBuffer; import java.nio.ByteOrder; import java.nio.FloatBuffer; diff --git a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/H264Utils.java b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/H264Utils.java index abb79c6..34dffc9 100644 --- a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/H264Utils.java +++ b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/H264Utils.java @@ -10,8 +10,8 @@ package org.webrtc; -import java.util.Map; import java.util.HashMap; +import java.util.Map; /** Container for static helper functions related to dealing with H264 codecs. */ class H264Utils { diff --git a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/HardwareVideoDecoderFactory.java b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/HardwareVideoDecoderFactory.java index 215598a..2a2988c 100644 --- a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/HardwareVideoDecoderFactory.java +++ b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/HardwareVideoDecoderFactory.java @@ -11,8 +11,8 @@ package org.webrtc; import android.media.MediaCodecInfo; + import androidx.annotation.Nullable; -import java.util.Arrays; /** Factory for Android hardware VideoDecoders. */ public class HardwareVideoDecoderFactory extends MediaCodecVideoDecoderFactory { diff --git a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/HardwareVideoEncoder.java b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/HardwareVideoEncoder.java index 1fd61b5..8aacdb2 100644 --- a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/HardwareVideoEncoder.java +++ b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/HardwareVideoEncoder.java @@ -16,15 +16,18 @@ import android.media.MediaCodecInfo; import android.media.MediaFormat; import android.opengl.GLES20; import android.os.Bundle; -import androidx.annotation.Nullable; import android.view.Surface; + +import androidx.annotation.Nullable; + +import org.webrtc.ThreadUtils.ThreadChecker; + import java.io.IOException; import java.nio.ByteBuffer; import java.util.Map; import java.util.concurrent.BlockingDeque; import java.util.concurrent.LinkedBlockingDeque; import java.util.concurrent.TimeUnit; -import org.webrtc.ThreadUtils.ThreadChecker; /** * Android hardware video encoder. diff --git a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/HardwareVideoEncoderFactory.java b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/HardwareVideoEncoderFactory.java index f2cde8f..68708ef 100644 --- a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/HardwareVideoEncoderFactory.java +++ b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/HardwareVideoEncoderFactory.java @@ -17,7 +17,9 @@ import static org.webrtc.MediaCodecUtils.QCOM_PREFIX; import android.media.MediaCodecInfo; import android.media.MediaCodecList; import android.os.Build; + import androidx.annotation.Nullable; + import java.util.ArrayList; import java.util.Arrays; import java.util.List; diff --git a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/IceCandidate.java b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/IceCandidate.java index 5f00b2a..2a67ced 100644 --- a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/IceCandidate.java +++ b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/IceCandidate.java @@ -11,8 +11,8 @@ package org.webrtc; import androidx.annotation.Nullable; + import java.util.Arrays; -import org.webrtc.PeerConnection; /** * Representation of a single ICE Candidate, mirroring diff --git a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/JNILogging.java b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/JNILogging.java index f391db6..1f17d31 100644 --- a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/JNILogging.java +++ b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/JNILogging.java @@ -10,8 +10,6 @@ package org.webrtc; -import org.webrtc.CalledByNative; -import org.webrtc.Loggable; import org.webrtc.Logging.Severity; class JNILogging { diff --git a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/JavaI420Buffer.java b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/JavaI420Buffer.java index 322b8f3..01a3e40 100644 --- a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/JavaI420Buffer.java +++ b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/JavaI420Buffer.java @@ -11,9 +11,11 @@ package org.webrtc; import androidx.annotation.Nullable; -import java.nio.ByteBuffer; + import org.webrtc.VideoFrame.I420Buffer; +import java.nio.ByteBuffer; + /** Implementation of VideoFrame.I420Buffer backed by Java direct byte buffers. */ public class JavaI420Buffer implements VideoFrame.I420Buffer { private final int width; diff --git a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/Logging.java b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/Logging.java index e7a9921..658d352 100644 --- a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/Logging.java +++ b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/Logging.java @@ -11,12 +11,12 @@ package org.webrtc; import androidx.annotation.Nullable; + import java.io.PrintWriter; import java.io.StringWriter; import java.util.EnumSet; import java.util.logging.Level; import java.util.logging.Logger; -import org.webrtc.Loggable; /** * Java wrapper for WebRTC logging. Logging defaults to java.util.logging.Logger, but a custom diff --git a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/MediaCodecUtils.java b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/MediaCodecUtils.java index 5d83014..c4a2fcd 100644 --- a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/MediaCodecUtils.java +++ b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/MediaCodecUtils.java @@ -14,7 +14,9 @@ import android.annotation.TargetApi; import android.media.MediaCodecInfo; import android.media.MediaCodecInfo.CodecCapabilities; import android.os.Build; + import androidx.annotation.Nullable; + import java.util.HashMap; import java.util.Map; diff --git a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/MediaCodecVideoDecoderFactory.java b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/MediaCodecVideoDecoderFactory.java index 9410c4c..16eb828 100644 --- a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/MediaCodecVideoDecoderFactory.java +++ b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/MediaCodecVideoDecoderFactory.java @@ -17,7 +17,9 @@ import android.media.MediaCodecInfo; import android.media.MediaCodecInfo.CodecCapabilities; import android.media.MediaCodecList; import android.os.Build; + import androidx.annotation.Nullable; + import java.util.ArrayList; import java.util.List; diff --git a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/MediaCodecWrapper.java b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/MediaCodecWrapper.java index bb67d1f..051b4ea 100644 --- a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/MediaCodecWrapper.java +++ b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/MediaCodecWrapper.java @@ -15,6 +15,7 @@ import android.media.MediaCrypto; import android.media.MediaFormat; import android.os.Bundle; import android.view.Surface; + import java.nio.ByteBuffer; /** diff --git a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/MediaCodecWrapperFactoryImpl.java b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/MediaCodecWrapperFactoryImpl.java index 544d6eb..2042dc4 100644 --- a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/MediaCodecWrapperFactoryImpl.java +++ b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/MediaCodecWrapperFactoryImpl.java @@ -17,6 +17,7 @@ import android.media.MediaCrypto; import android.media.MediaFormat; import android.os.Bundle; import android.view.Surface; + import java.io.IOException; import java.nio.ByteBuffer; diff --git a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/MediaConstraints.java b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/MediaConstraints.java index bae04e5..6606bcb 100644 --- a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/MediaConstraints.java +++ b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/MediaConstraints.java @@ -11,6 +11,7 @@ package org.webrtc; import androidx.annotation.Nullable; + import java.util.ArrayList; import java.util.List; diff --git a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/NV12Buffer.java b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/NV12Buffer.java index fe0221d..151048d 100644 --- a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/NV12Buffer.java +++ b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/NV12Buffer.java @@ -11,6 +11,7 @@ package org.webrtc; import androidx.annotation.Nullable; + import java.nio.ByteBuffer; public class NV12Buffer implements VideoFrame.Buffer { diff --git a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/NV21Buffer.java b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/NV21Buffer.java index 0fb1afe..42894ee 100644 --- a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/NV21Buffer.java +++ b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/NV21Buffer.java @@ -11,6 +11,7 @@ package org.webrtc; import androidx.annotation.Nullable; + import java.nio.ByteBuffer; public class NV21Buffer implements VideoFrame.Buffer { diff --git a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/NativeAndroidVideoTrackSource.java b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/NativeAndroidVideoTrackSource.java index d4fba48..320c4a2 100644 --- a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/NativeAndroidVideoTrackSource.java +++ b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/NativeAndroidVideoTrackSource.java @@ -11,8 +11,6 @@ package org.webrtc; import androidx.annotation.Nullable; -import org.webrtc.VideoFrame; -import org.webrtc.VideoProcessor; /** * This class is meant to be a simple layer that only handles the JNI wrapping of a C++ diff --git a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/NativeCapturerObserver.java b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/NativeCapturerObserver.java index c195fb3..990808f 100644 --- a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/NativeCapturerObserver.java +++ b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/NativeCapturerObserver.java @@ -10,8 +10,6 @@ package org.webrtc; -import org.webrtc.VideoFrame; - /** * Used from native api and implements a simple VideoCapturer.CapturerObserver that feeds frames to * a webrtc::jni::AndroidVideoTrackSource. diff --git a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/NetworkChangeDetector.java b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/NetworkChangeDetector.java index 856fe7d..b404787 100644 --- a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/NetworkChangeDetector.java +++ b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/NetworkChangeDetector.java @@ -11,6 +11,7 @@ package org.webrtc; import androidx.annotation.Nullable; + import java.util.List; /** Interface for detecting network changes */ diff --git a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/NetworkMonitor.java b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/NetworkMonitor.java index 9e14a2e..82d112c 100644 --- a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/NetworkMonitor.java +++ b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/NetworkMonitor.java @@ -12,10 +12,11 @@ package org.webrtc; import android.content.Context; import android.os.Build; + import androidx.annotation.Nullable; + import java.util.ArrayList; import java.util.List; -import org.webrtc.NetworkChangeDetector; /** * Borrowed from Chromium's diff --git a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/NetworkMonitorAutoDetect.java b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/NetworkMonitorAutoDetect.java index c06ec63..7561975 100644 --- a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/NetworkMonitorAutoDetect.java +++ b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/NetworkMonitorAutoDetect.java @@ -28,8 +28,10 @@ import android.net.wifi.WifiManager; import android.net.wifi.p2p.WifiP2pGroup; import android.net.wifi.p2p.WifiP2pManager; import android.os.Build; -import androidx.annotation.Nullable; import android.telephony.TelephonyManager; + +import androidx.annotation.Nullable; + import java.net.InetAddress; import java.net.NetworkInterface; import java.net.SocketException; diff --git a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/PeerConnection.java b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/PeerConnection.java index 67b551c..fde6491 100644 --- a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/PeerConnection.java +++ b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/PeerConnection.java @@ -11,16 +11,13 @@ package org.webrtc; import androidx.annotation.Nullable; + import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; -import org.webrtc.CandidatePairChangeEvent; -import org.webrtc.DataChannel; -import org.webrtc.MediaStreamTrack; -import org.webrtc.RtpTransceiver; /** * Java-land version of the PeerConnection APIs; wraps the C++ API diff --git a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/PeerConnectionFactory.java b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/PeerConnectionFactory.java index 2b33c6c..4221b3a 100644 --- a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/PeerConnectionFactory.java +++ b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/PeerConnectionFactory.java @@ -12,13 +12,15 @@ package org.webrtc; import android.content.Context; import android.os.Process; + import androidx.annotation.Nullable; -import java.util.List; + import org.webrtc.Logging.Severity; -import org.webrtc.PeerConnection; import org.webrtc.audio.AudioDeviceModule; import org.webrtc.audio.JavaAudioDeviceModule; +import java.util.List; + /** * Java wrapper for a C++ PeerConnectionFactoryInterface. Main entry point to * the PeerConnection API for clients. diff --git a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/PlatformSoftwareVideoDecoderFactory.java b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/PlatformSoftwareVideoDecoderFactory.java index caca5e5..70a13fa 100644 --- a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/PlatformSoftwareVideoDecoderFactory.java +++ b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/PlatformSoftwareVideoDecoderFactory.java @@ -11,8 +11,8 @@ package org.webrtc; import android.media.MediaCodecInfo; + import androidx.annotation.Nullable; -import java.util.Arrays; /** Factory for Android platform software VideoDecoders. */ public class PlatformSoftwareVideoDecoderFactory extends MediaCodecVideoDecoderFactory { diff --git a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/RefCountDelegate.java b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/RefCountDelegate.java index b9210d2..c8500ff 100644 --- a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/RefCountDelegate.java +++ b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/RefCountDelegate.java @@ -11,6 +11,7 @@ package org.webrtc; import androidx.annotation.Nullable; + import java.util.concurrent.atomic.AtomicInteger; /** diff --git a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/RtcCertificatePem.java b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/RtcCertificatePem.java index 6070135..6856e40 100644 --- a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/RtcCertificatePem.java +++ b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/RtcCertificatePem.java @@ -10,8 +10,6 @@ package org.webrtc; -import org.webrtc.PeerConnection; - /** * Easily storable/serializable version of a native C++ RTCCertificatePEM. */ diff --git a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/RtpParameters.java b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/RtpParameters.java index 9ca8311..030e91c 100644 --- a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/RtpParameters.java +++ b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/RtpParameters.java @@ -11,11 +11,9 @@ package org.webrtc; import androidx.annotation.Nullable; -import java.lang.Double; -import java.lang.String; + import java.util.List; import java.util.Map; -import org.webrtc.MediaStreamTrack; /** * The parameters for an {@code RtpSender}, as defined in diff --git a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/RtpReceiver.java b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/RtpReceiver.java index a5710f9..34d35ea 100644 --- a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/RtpReceiver.java +++ b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/RtpReceiver.java @@ -11,7 +11,6 @@ package org.webrtc; import androidx.annotation.Nullable; -import org.webrtc.MediaStreamTrack; /** Java wrapper for a C++ RtpReceiverInterface. */ public class RtpReceiver { diff --git a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/RtpSender.java b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/RtpSender.java index b78bbf6..6a5c7c2 100644 --- a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/RtpSender.java +++ b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/RtpSender.java @@ -11,6 +11,7 @@ package org.webrtc; import androidx.annotation.Nullable; + import java.util.List; /** Java wrapper for a C++ RtpSenderInterface. */ diff --git a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/RtpTransceiver.java b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/RtpTransceiver.java index aff1bfb..7d3d347 100644 --- a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/RtpTransceiver.java +++ b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/RtpTransceiver.java @@ -13,8 +13,6 @@ package org.webrtc; import java.util.ArrayList; import java.util.Collections; import java.util.List; -import org.webrtc.MediaStreamTrack; -import org.webrtc.RtpParameters; /** * Java wrapper for a C++ RtpTransceiverInterface. diff --git a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/ScreenCapturerAndroid.java b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/ScreenCapturerAndroid.java index 05921a8..a522f4f 100644 --- a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/ScreenCapturerAndroid.java +++ b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/ScreenCapturerAndroid.java @@ -18,9 +18,10 @@ import android.hardware.display.DisplayManager; import android.hardware.display.VirtualDisplay; import android.media.projection.MediaProjection; import android.media.projection.MediaProjectionManager; -import androidx.annotation.Nullable; import android.view.Surface; +import androidx.annotation.Nullable; + /** * An implementation of VideoCapturer to capture the screen content as a video stream. * Capturing is done by {@code MediaProjection} on a {@code SurfaceTexture}. We interact with this diff --git a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/SoftwareVideoDecoderFactory.java b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/SoftwareVideoDecoderFactory.java index e767aee..7091d1f 100644 --- a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/SoftwareVideoDecoderFactory.java +++ b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/SoftwareVideoDecoderFactory.java @@ -11,6 +11,7 @@ package org.webrtc; import androidx.annotation.Nullable; + import java.util.ArrayList; import java.util.HashMap; import java.util.List; diff --git a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/SoftwareVideoEncoderFactory.java b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/SoftwareVideoEncoderFactory.java index 6074be2..c01c779 100644 --- a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/SoftwareVideoEncoderFactory.java +++ b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/SoftwareVideoEncoderFactory.java @@ -11,6 +11,7 @@ package org.webrtc; import androidx.annotation.Nullable; + import java.util.ArrayList; import java.util.HashMap; import java.util.List; diff --git a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/SurfaceEglRenderer.java b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/SurfaceEglRenderer.java index 6cba3f4..13041a3 100644 --- a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/SurfaceEglRenderer.java +++ b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/SurfaceEglRenderer.java @@ -11,6 +11,7 @@ package org.webrtc; import android.view.SurfaceHolder; + import java.util.concurrent.CountDownLatch; /** diff --git a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/SurfaceTextureHelper.java b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/SurfaceTextureHelper.java index e186f9a..6b6cf3f 100644 --- a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/SurfaceTextureHelper.java +++ b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/SurfaceTextureHelper.java @@ -17,12 +17,15 @@ import android.opengl.GLES20; import android.os.Build; import android.os.Handler; import android.os.HandlerThread; + import androidx.annotation.Nullable; -import java.util.concurrent.Callable; + import org.webrtc.EglBase.Context; import org.webrtc.TextureBufferImpl.RefCountMonitor; import org.webrtc.VideoFrame.TextureBuffer; +import java.util.concurrent.Callable; + /** * Helper class for using a SurfaceTexture to create WebRTC VideoFrames. In order to create WebRTC * VideoFrames, render onto the SurfaceTexture. The frames will be delivered to the listener. Only diff --git a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/TextureBufferImpl.java b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/TextureBufferImpl.java index 31d0456..fb49417 100644 --- a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/TextureBufferImpl.java +++ b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/TextureBufferImpl.java @@ -12,6 +12,7 @@ package org.webrtc; import android.graphics.Matrix; import android.os.Handler; + import androidx.annotation.Nullable; /** diff --git a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/ThreadUtils.java b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/ThreadUtils.java index 0c502b1..b2089ea 100644 --- a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/ThreadUtils.java +++ b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/ThreadUtils.java @@ -13,7 +13,9 @@ package org.webrtc; import android.os.Handler; import android.os.Looper; import android.os.SystemClock; + import androidx.annotation.Nullable; + import java.util.concurrent.Callable; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; diff --git a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/VideoCodecInfo.java b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/VideoCodecInfo.java index 4f97cf7..30b288a 100644 --- a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/VideoCodecInfo.java +++ b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/VideoCodecInfo.java @@ -11,6 +11,7 @@ package org.webrtc; import androidx.annotation.Nullable; + import java.util.Arrays; import java.util.Locale; import java.util.Map; diff --git a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/VideoDecoderWrapper.java b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/VideoDecoderWrapper.java index 2aae041..59d3d83 100644 --- a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/VideoDecoderWrapper.java +++ b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/VideoDecoderWrapper.java @@ -10,8 +10,6 @@ package org.webrtc; -import org.webrtc.VideoDecoder; - /** * This class contains the Java glue code for JNI generation of VideoDecoder. */ diff --git a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/VideoEncoder.java b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/VideoEncoder.java index 0a46014..952caf2 100644 --- a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/VideoEncoder.java +++ b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/VideoEncoder.java @@ -11,7 +11,6 @@ package org.webrtc; import androidx.annotation.Nullable; -import org.webrtc.EncodedImage; /** * Interface for a video encoder that can be used with WebRTC. All calls will be made on the diff --git a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/VideoEncoderWrapper.java b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/VideoEncoderWrapper.java index b5485d4..5b2c0b3 100644 --- a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/VideoEncoderWrapper.java +++ b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/VideoEncoderWrapper.java @@ -11,8 +11,8 @@ package org.webrtc; // Explicit imports necessary for JNI generation. + import androidx.annotation.Nullable; -import org.webrtc.VideoEncoder; /** * This class contains the Java glue code for JNI generation of VideoEncoder. diff --git a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/VideoFileRenderer.java b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/VideoFileRenderer.java index aef8030..d4c21eb 100644 --- a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/VideoFileRenderer.java +++ b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/VideoFileRenderer.java @@ -12,6 +12,7 @@ package org.webrtc; import android.os.Handler; import android.os.HandlerThread; + import java.io.FileOutputStream; import java.io.IOException; import java.nio.ByteBuffer; diff --git a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/VideoFrame.java b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/VideoFrame.java index 0066354..912e260 100644 --- a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/VideoFrame.java +++ b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/VideoFrame.java @@ -13,6 +13,7 @@ package org.webrtc; import android.graphics.Matrix; import android.opengl.GLES11Ext; import android.opengl.GLES20; + import java.nio.ByteBuffer; /** diff --git a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/VideoFrameDrawer.java b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/VideoFrameDrawer.java index af32587..ff0e607 100644 --- a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/VideoFrameDrawer.java +++ b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/VideoFrameDrawer.java @@ -13,7 +13,9 @@ package org.webrtc; import android.graphics.Matrix; import android.graphics.Point; import android.opengl.GLES20; + import androidx.annotation.Nullable; + import java.nio.ByteBuffer; /** diff --git a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/YuvConverter.java b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/YuvConverter.java index ab9688a..4cca77f 100644 --- a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/YuvConverter.java +++ b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/YuvConverter.java @@ -13,11 +13,14 @@ package org.webrtc; import android.graphics.Matrix; import android.opengl.GLES20; import android.opengl.GLException; + import androidx.annotation.Nullable; -import java.nio.ByteBuffer; + import org.webrtc.VideoFrame.I420Buffer; import org.webrtc.VideoFrame.TextureBuffer; +import java.nio.ByteBuffer; + /** * Class for converting OES textures to a YUV ByteBuffer. It can be constructed on any thread, but * should only be operated from a single thread with an active EGL context. diff --git a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/audio/JavaAudioDeviceModule.java b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/audio/JavaAudioDeviceModule.java index ae5858a..48402e4 100644 --- a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/audio/JavaAudioDeviceModule.java +++ b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/audio/JavaAudioDeviceModule.java @@ -15,11 +15,14 @@ import android.media.AudioAttributes; import android.media.AudioDeviceInfo; import android.media.AudioManager; import android.os.Build; + import androidx.annotation.RequiresApi; -import java.util.concurrent.ScheduledExecutorService; + import org.webrtc.JniCommon; import org.webrtc.Logging; +import java.util.concurrent.ScheduledExecutorService; + /** * AudioDeviceModule implemented using android.media.AudioRecord as input and * android.media.AudioTrack as output. diff --git a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/audio/LowLatencyAudioBufferManager.java b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/audio/LowLatencyAudioBufferManager.java index 70c625a..f4c6407 100644 --- a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/audio/LowLatencyAudioBufferManager.java +++ b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/audio/LowLatencyAudioBufferManager.java @@ -12,6 +12,7 @@ package org.webrtc.audio; import android.media.AudioTrack; import android.os.Build; + import org.webrtc.Logging; // Lowers the buffer size if no underruns are detected for 100 ms. Once an diff --git a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/audio/VolumeLogger.java b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/audio/VolumeLogger.java index 06d5cd3..f5622ac 100644 --- a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/audio/VolumeLogger.java +++ b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/audio/VolumeLogger.java @@ -11,10 +11,13 @@ package org.webrtc.audio; import android.media.AudioManager; + import androidx.annotation.Nullable; + +import org.webrtc.Logging; + import java.util.Timer; import java.util.TimerTask; -import org.webrtc.Logging; // TODO(magjed): Do we really need to spawn a new thread just to log volume? Can we re-use the // AudioTrackThread instead? diff --git a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/audio/WebRtcAudioEffects.java b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/audio/WebRtcAudioEffects.java index fb132c6..fc9a78a 100644 --- a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/audio/WebRtcAudioEffects.java +++ b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/audio/WebRtcAudioEffects.java @@ -15,10 +15,13 @@ import android.media.audiofx.AudioEffect; import android.media.audiofx.AudioEffect.Descriptor; import android.media.audiofx.NoiseSuppressor; import android.os.Build; + import androidx.annotation.Nullable; -import java.util.UUID; + import org.webrtc.Logging; +import java.util.UUID; + // This class wraps control of three different platform effects. Supported // effects are: AcousticEchoCanceler (AEC) and NoiseSuppressor (NS). // Calling enable() will active all effects that are diff --git a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/audio/WebRtcAudioManager.java b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/audio/WebRtcAudioManager.java index f016dad..3a7a095 100644 --- a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/audio/WebRtcAudioManager.java +++ b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/audio/WebRtcAudioManager.java @@ -17,8 +17,9 @@ import android.media.AudioManager; import android.media.AudioRecord; import android.media.AudioTrack; import android.os.Build; -import org.webrtc.Logging; + import org.webrtc.CalledByNative; +import org.webrtc.Logging; /** * This class contains static functions to query sample rate and input/output audio buffer sizes. diff --git a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/audio/WebRtcAudioRecord.java b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/audio/WebRtcAudioRecord.java index 10fd58c..623b529 100644 --- a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/audio/WebRtcAudioRecord.java +++ b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/audio/WebRtcAudioRecord.java @@ -20,9 +20,18 @@ import android.media.AudioRecordingConfiguration; import android.media.MediaRecorder.AudioSource; import android.os.Build; import android.os.Process; + import androidx.annotation.Nullable; import androidx.annotation.RequiresApi; -import java.lang.System; + +import org.webrtc.CalledByNative; +import org.webrtc.Logging; +import org.webrtc.ThreadUtils; +import org.webrtc.audio.JavaAudioDeviceModule.AudioRecordErrorCallback; +import org.webrtc.audio.JavaAudioDeviceModule.AudioRecordStartErrorCode; +import org.webrtc.audio.JavaAudioDeviceModule.AudioRecordStateCallback; +import org.webrtc.audio.JavaAudioDeviceModule.SamplesReadyCallback; + import java.nio.ByteBuffer; import java.util.Arrays; import java.util.Iterator; @@ -35,13 +44,6 @@ import java.util.concurrent.ThreadFactory; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicReference; -import org.webrtc.CalledByNative; -import org.webrtc.Logging; -import org.webrtc.ThreadUtils; -import org.webrtc.audio.JavaAudioDeviceModule.AudioRecordErrorCallback; -import org.webrtc.audio.JavaAudioDeviceModule.AudioRecordStartErrorCode; -import org.webrtc.audio.JavaAudioDeviceModule.AudioRecordStateCallback; -import org.webrtc.audio.JavaAudioDeviceModule.SamplesReadyCallback; class WebRtcAudioRecord { private static final String TAG = "WebRtcAudioRecordExternal"; diff --git a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/audio/WebRtcAudioTrack.java b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/audio/WebRtcAudioTrack.java index 885df55..c313f9c 100644 --- a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/audio/WebRtcAudioTrack.java +++ b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/audio/WebRtcAudioTrack.java @@ -18,15 +18,17 @@ import android.media.AudioManager; import android.media.AudioTrack; import android.os.Build; import android.os.Process; + import androidx.annotation.Nullable; -import java.nio.ByteBuffer; + import org.webrtc.CalledByNative; import org.webrtc.Logging; import org.webrtc.ThreadUtils; import org.webrtc.audio.JavaAudioDeviceModule.AudioTrackErrorCallback; import org.webrtc.audio.JavaAudioDeviceModule.AudioTrackStartErrorCode; import org.webrtc.audio.JavaAudioDeviceModule.AudioTrackStateCallback; -import org.webrtc.audio.LowLatencyAudioBufferManager; + +import java.nio.ByteBuffer; class WebRtcAudioTrack { private static final String TAG = "WebRtcAudioTrackExternal"; diff --git a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/audio/WebRtcAudioUtils.java b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/audio/WebRtcAudioUtils.java index 591fc9e..3e8827c 100644 --- a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/audio/WebRtcAudioUtils.java +++ b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/audio/WebRtcAudioUtils.java @@ -23,10 +23,11 @@ import android.media.AudioFormat; import android.media.AudioManager; import android.media.MediaRecorder.AudioSource; import android.os.Build; -import java.lang.Thread; -import java.util.Arrays; + import org.webrtc.Logging; +import java.util.Arrays; + final class WebRtcAudioUtils { private static final String TAG = "WebRtcAudioUtilsExternal"; diff --git a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/voiceengine/WebRtcAudioEffects.java b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/voiceengine/WebRtcAudioEffects.java index 11ed669..2728609 100644 --- a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/voiceengine/WebRtcAudioEffects.java +++ b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/voiceengine/WebRtcAudioEffects.java @@ -15,10 +15,13 @@ import android.media.audiofx.AudioEffect; import android.media.audiofx.AudioEffect.Descriptor; import android.media.audiofx.NoiseSuppressor; import android.os.Build; + import androidx.annotation.Nullable; + +import org.webrtc.Logging; + import java.util.List; import java.util.UUID; -import org.webrtc.Logging; // This class wraps control of three different platform effects. Supported // effects are: AcousticEchoCanceler (AEC) and NoiseSuppressor (NS). diff --git a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/voiceengine/WebRtcAudioManager.java b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/voiceengine/WebRtcAudioManager.java index b057c3a..52f9325 100644 --- a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/voiceengine/WebRtcAudioManager.java +++ b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/voiceengine/WebRtcAudioManager.java @@ -17,12 +17,15 @@ import android.media.AudioManager; import android.media.AudioRecord; import android.media.AudioTrack; import android.os.Build; + import androidx.annotation.Nullable; -import java.util.Timer; -import java.util.TimerTask; + import org.webrtc.ContextUtils; import org.webrtc.Logging; +import java.util.Timer; +import java.util.TimerTask; + // WebRtcAudioManager handles tasks that uses android.media.AudioManager. // At construction, storeAudioParameters() is called and it retrieves // fundamental audio parameters like native sample rate and number of channels. diff --git a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/voiceengine/WebRtcAudioRecord.java b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/voiceengine/WebRtcAudioRecord.java index 8eab01c..45cdbbb 100644 --- a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/voiceengine/WebRtcAudioRecord.java +++ b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/voiceengine/WebRtcAudioRecord.java @@ -15,13 +15,15 @@ import android.media.AudioRecord; import android.media.MediaRecorder.AudioSource; import android.os.Build; import android.os.Process; + import androidx.annotation.Nullable; -import java.lang.System; + +import org.webrtc.Logging; +import org.webrtc.ThreadUtils; + import java.nio.ByteBuffer; import java.util.Arrays; import java.util.concurrent.TimeUnit; -import org.webrtc.Logging; -import org.webrtc.ThreadUtils; public class WebRtcAudioRecord { private static final boolean DEBUG = false; diff --git a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/voiceengine/WebRtcAudioTrack.java b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/voiceengine/WebRtcAudioTrack.java index e3988e1..4bdf6eb 100644 --- a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/voiceengine/WebRtcAudioTrack.java +++ b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/voiceengine/WebRtcAudioTrack.java @@ -18,13 +18,15 @@ import android.media.AudioManager; import android.media.AudioTrack; import android.os.Build; import android.os.Process; + import androidx.annotation.Nullable; -import java.lang.Thread; -import java.nio.ByteBuffer; + import org.webrtc.ContextUtils; import org.webrtc.Logging; import org.webrtc.ThreadUtils; +import java.nio.ByteBuffer; + public class WebRtcAudioTrack { private static final boolean DEBUG = false; diff --git a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/voiceengine/WebRtcAudioUtils.java b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/voiceengine/WebRtcAudioUtils.java index 61cab58..07ddd83 100644 --- a/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/voiceengine/WebRtcAudioUtils.java +++ b/taoyao-client-android/taoyao/media/src/main/java/org/webrtc/voiceengine/WebRtcAudioUtils.java @@ -20,12 +20,13 @@ import android.content.pm.PackageManager; import android.media.AudioDeviceInfo; import android.media.AudioManager; import android.os.Build; -import java.lang.Thread; -import java.util.Arrays; -import java.util.List; + import org.webrtc.ContextUtils; import org.webrtc.Logging; +import java.util.Arrays; +import java.util.List; + public final class WebRtcAudioUtils { private static final String TAG = "WebRtcAudioUtils"; diff --git a/taoyao-client-media/src/Taoyao.js b/taoyao-client-media/src/Taoyao.js index 6e9f34f..86bed06 100644 --- a/taoyao-client-media/src/Taoyao.js +++ b/taoyao-client-media/src/Taoyao.js @@ -147,6 +147,9 @@ const signalChannel = { me.channel.on("close", async function () { console.warn("信令通道关闭:", me.address); me.taoyao.connect = false; + if(me.channel && me.channel.readyState !== WebSocket.OPEN) { + me.taoyao.closeAllRoom(); + } if (me.reconnection) { me.reconnect(); } @@ -155,6 +158,9 @@ const signalChannel = { me.channel.on("error", async function (e) { console.error("信令通道异常:", me.address, e); me.taoyao.connect = false; + if(me.channel && me.channel.readyState !== WebSocket.OPEN) { + me.taoyao.closeAllRoom(); + } if (me.reconnection) { me.reconnect(); } @@ -336,6 +342,7 @@ class Room { if (me.close) { return; } + console.info("关闭房间:", me.roomId); me.close = true; me.producers.forEach(v => v.close()); me.consumers.forEach(v => v.close()); @@ -350,7 +357,6 @@ class Room { /** * 桃夭 - TODO:断开连接关闭所有房间 */ class Taoyao { // 是否连接 @@ -543,6 +549,14 @@ class Taoyao { } return worker; } + + closeAllRoom() { + console.info("关闭所有房间"); + this.rooms.forEach((room, roomId) => { + room.closeAll(); + }); + this.rooms.clear(); + } /** * 重启终端信令 @@ -1481,7 +1495,6 @@ class Taoyao { console.warn("房间无效:", roomId); return; } - console.info("关闭房间:", roomId); room.closeAll(); } diff --git a/taoyao-client-web/src/App.vue b/taoyao-client-web/src/App.vue index 106e287..9c8461c 100644 --- a/taoyao-client-web/src/App.vue +++ b/taoyao-client-web/src/App.vue @@ -68,22 +68,22 @@ @@ -91,18 +91,18 @@ - + - +