[*] 每日优化

This commit is contained in:
acgist
2023-05-25 07:51:42 +08:00
parent 45f3c24a61
commit c3dc6788b0
4 changed files with 52 additions and 26 deletions

View File

@@ -280,6 +280,7 @@ public class MediaService extends Service {
final AudioManager audioManager = this.getApplicationContext().getSystemService(AudioManager.class);
Log.d(MediaService.class.getSimpleName(), "当前音频模式:" + audioManager.getMode());
Log.d(MediaService.class.getSimpleName(), "当前音频音量:" + audioManager.getStreamVolume(audioManager.getMode()));
Log.d(MediaService.class.getSimpleName(), "当前最大音频音量:" + audioManager.getStreamMaxVolume(audioManager.getMode()));
// Log.d(MediaService.class.getSimpleName(), "当前蓝牙是否打开:" + audioManager.isBluetoothScoOn());
// Log.d(MediaService.class.getSimpleName(), "当前耳机是否打开:" + audioManager.isWiredHeadsetOn());
// Log.d(MediaService.class.getSimpleName(), "当前电话扬声器是否打开:" + audioManager.isSpeakerphoneOn());

View File

@@ -1224,7 +1224,7 @@ public final class Taoyao implements ITaoyao {
return;
}
final String type = MapUtils.get(body, "type");
sessionClient.pause(type);
sessionClient.pauseLocal(type);
}
/**
@@ -1241,7 +1241,7 @@ public final class Taoyao implements ITaoyao {
return;
}
final String type = MapUtils.get(body, "type");
sessionClient.resume(type);
sessionClient.resumeLocal(type);
}
/**

View File

@@ -15,6 +15,7 @@ import java.util.concurrent.ConcurrentHashMap;
/**
* 房间远程终端
*
* 注意这里媒体MediaStreamTrack使用Mediasoup方法释放不要直接调用MediaStreamTrack.dispose()释放
*
* @author acgist
@@ -24,12 +25,25 @@ public class RemoteClient extends RoomClient {
/**
* 媒体流Track
* 消费者ID = 媒体流Track
*
* 注意track由mediasoup的consumer释放
*/
protected final Map<String, MediaStreamTrack> tracks;
/**
* 音频消费者指针
*/
protected long audioConsumerPointer;
/**
* 视频消费指针
*/
protected long videoConsumerPointer;
/**
* @param name 终端名称
* @param clientId 终端ID
* @param taoyao 信令
* @param mainHandler MainHandler
*/
public RemoteClient(String name, String clientId, ITaoyao taoyao, Handler mainHandler) {
super(name, clientId, taoyao, mainHandler);
this.tracks = new ConcurrentHashMap<>();
@@ -120,12 +134,14 @@ public class RemoteClient extends RoomClient {
* 关闭消费者
*
* @param consumerId 消费者ID
*
* @return MediaStreamTrack
*/
public void close(String consumerId) {
public MediaStreamTrack close(String consumerId) {
Log.i(RemoteClient.class.getSimpleName(), "关闭远程终端消费者:" + this.clientId + " - " + consumerId);
synchronized (this.tracks) {
// 注意使用nativeMediaConsumerClose释放资源
this.tracks.remove(consumerId);
return this.tracks.remove(consumerId);
}
}

View File

@@ -19,6 +19,7 @@ import org.webrtc.PeerConnection;
import org.webrtc.PeerConnectionFactory;
import org.webrtc.SdpObserver;
import org.webrtc.SessionDescription;
import org.webrtc.SurfaceViewRenderer;
import java.util.HashMap;
import java.util.List;
@@ -54,6 +55,7 @@ public class SessionClient extends Client {
private final boolean videoProduce;
private final MediaProperties mediaProperties;
private final WebrtcProperties webrtcProperties;
private SurfaceViewRenderer localSurfaceViewRenderer;
/**
* 本地媒体
*/
@@ -136,7 +138,7 @@ public class SessionClient extends Client {
this.peerConnection = this.peerConnectionFactory.createPeerConnection(configuration, this.observer);
this.peerConnection.addStream(this.mediaStream);
if(this.preview) {
// 实现预览
this.previewLocal();
}
// 设置streamId同步
// final List<String> streamIds = new ArrayList<>();
@@ -243,7 +245,6 @@ public class SessionClient extends Client {
return;
}
this.remoteMediaStream.audioTracks.forEach(audioTrack -> {
audioTrack.setVolume(0);
audioTrack.setEnabled(false);
});
}
@@ -255,7 +256,6 @@ public class SessionClient extends Client {
return;
}
this.remoteMediaStream.audioTracks.forEach(audioTrack -> {
audioTrack.setVolume(Config.DEFAULT_VOLUME);
audioTrack.setEnabled(true);
});
}
@@ -280,10 +280,6 @@ public class SessionClient extends Client {
if(this.remoteMediaStream == null) {
return;
}
if(this.surfaceViewRenderer != null) {
// TODO测试
this.surfaceViewRenderer.pauseVideo();
}
this.remoteMediaStream.videoTracks.forEach(videoTrack -> {
videoTrack.setEnabled(false);
});
@@ -295,19 +291,14 @@ public class SessionClient extends Client {
if(this.remoteMediaStream == null) {
return;
}
if(this.surfaceViewRenderer != null) {
// TODO测试
this.surfaceViewRenderer.disableFpsReduction();
}
this.remoteMediaStream.videoTracks.forEach(videoTrack -> {
videoTrack.setEnabled(true);
});
}
public void pause(String type) {
public void pauseLocal(String type) {
if(MediaStreamTrack.AUDIO_TRACK_KIND.equals(type)) {
this.mediaStream.audioTracks.forEach(audioTrack -> {
audioTrack.setVolume(0);
audioTrack.setEnabled(false);
});
} else if(MediaStreamTrack.VIDEO_TRACK_KIND.equals(type)) {
@@ -318,10 +309,9 @@ public class SessionClient extends Client {
}
}
public void resume(String type) {
public void resumeLocal(String type) {
if(MediaStreamTrack.AUDIO_TRACK_KIND.equals(type)) {
this.mediaStream.audioTracks.forEach(audioTrack -> {
audioTrack.setVolume(Config.DEFAULT_VOLUME);
audioTrack.setEnabled(true);
});
} else if(MediaStreamTrack.VIDEO_TRACK_KIND.equals(type)) {
@@ -332,6 +322,30 @@ public class SessionClient extends Client {
}
}
private void previewLocal() {
if(this.mediaStream == null) {
return;
}
this.mediaStream.videoTracks.forEach(videoTrack -> {
videoTrack.setEnabled(true);
if(this.localSurfaceViewRenderer == null) {
this.localSurfaceViewRenderer = this.mediaManager.buildSurfaceViewRenderer(Config.WHAT_NEW_LOCAL_VIDEO, videoTrack);
}
});
}
private void releaseLocal() {
// 释放本地视频资源
if(this.localSurfaceViewRenderer != null) {
// 释放资源
this.localSurfaceViewRenderer.release();
// 移除资源:注意先释放再移除避免报错
this.mainHandler.obtainMessage(Config.WHAT_REMOVE_VIDEO, this.localSurfaceViewRenderer).sendToTarget();
// 设置为空
this.localSurfaceViewRenderer = null;
}
}
@Override
public void close() {
synchronized (this) {
@@ -339,14 +353,9 @@ public class SessionClient extends Client {
return;
}
super.close();
this.releaseLocal();
try {
// PeerConnection自动释放
// if(this.mediaStream != null) {
// this.mediaStream.dispose();
// }
// if(this.remoteMediaStream != null) {
// this.remoteMediaStream.dispose();
// }
// PeerConnection自动释放mediaStream、remoteMediaStream
if(this.peerConnection != null) {
this.peerConnection.dispose();
}