[*] 日常优化

This commit is contained in:
acgist
2023-06-18 08:12:25 +08:00
parent 304b267a40
commit 7bea6075bf
3 changed files with 57 additions and 26 deletions

View File

@@ -319,22 +319,30 @@ public class JavaAudioDeviceModule implements AudioDeviceModule {
public static interface SamplesReadyCallback {
/**
* 本地录像
*
* @Taoyao
*/
void startNative();
/**
* 远程录像
*
* @Taoyao
*/
void startWebRTC();
/**
* 远程音频
*
* @param samples 音频采样
*
* @Taoyao
*/
void onWebRtcAudioTrackSamplesReady(AudioSamples samples);
/**
* 本地音频
*
* @param samples 音频采样
*
* @Taoyao
*/
void onWebRtcAudioRecordSamplesReady(AudioSamples samples);
}
@@ -413,6 +421,8 @@ public class JavaAudioDeviceModule implements AudioDeviceModule {
/**
* 删除录音工具
*
* @Taoyao
*/
public void removeMixerProcesser() {
this.audioInput.setMixerProcesser(null);

View File

@@ -117,17 +117,16 @@ class WebRtcAudioRecord {
* @Taoyao
*/
public void setMixerProcesser(SamplesReadyCallback samplesReadyCallback) {
// 不用处理这个逻辑设置为空表示关闭录像
// if(this.audioSamplesReadyCallback != null && samplesReadyCallback == null) {
// this.audioSamplesReadyCallback.startNative();
// }
this.audioSamplesReadyCallback = samplesReadyCallback;
// 下面逻辑最好加锁防止关闭录像导致异常
if(this.audioSamplesReadyCallback != null) {
if(this.audioThread == null) {
this.audioSamplesReadyCallback.startNative();
synchronized (this) {
this.audioSamplesReadyCallback = samplesReadyCallback;
if(this.audioSamplesReadyCallback != null) {
if(this.audioThread == null) {
this.audioSamplesReadyCallback.startNative();
} else {
this.audioSamplesReadyCallback.startWebRTC();
}
} else {
this.audioSamplesReadyCallback.startWebRTC();
// 为空表示关闭录像
}
}
}
@@ -167,14 +166,21 @@ class WebRtcAudioRecord {
if (keepAlive) {
nativeDataIsRecorded(nativeAudioRecord, bytesRead);
}
if (audioSamplesReadyCallback != null) {
// Copy the entire byte buffer array. The start of the byteBuffer is not necessarily
// at index 0.
// 注意不能定义其他地方否则不能回收
final SamplesReadyCallback nullable = audioSamplesReadyCallback;
// Taoyao
if (WebRtcAudioRecord.this.audioSamplesReadyCallback != null) {
final SamplesReadyCallback nullable = WebRtcAudioRecord.this.audioSamplesReadyCallback;
if(nullable != null) {
final byte[] data = Arrays.copyOfRange(byteBuffer.array(), byteBuffer.arrayOffset(), byteBuffer.capacity() + byteBuffer.arrayOffset());
nullable.onWebRtcAudioRecordSamplesReady(new JavaAudioDeviceModule.AudioSamples(audioRecord.getAudioFormat(), audioRecord.getChannelCount(), audioRecord.getSampleRate(), data));
final byte[] data = Arrays.copyOfRange(
WebRtcAudioRecord.this.byteBuffer.array(),
WebRtcAudioRecord.this.byteBuffer.arrayOffset(),
WebRtcAudioRecord.this.byteBuffer.arrayOffset() + WebRtcAudioRecord.this.byteBuffer.capacity()
);
nullable.onWebRtcAudioRecordSamplesReady(new JavaAudioDeviceModule.AudioSamples(
WebRtcAudioRecord.this.audioRecord.getAudioFormat(),
WebRtcAudioRecord.this.audioRecord.getChannelCount(),
WebRtcAudioRecord.this.audioRecord.getSampleRate(),
data
));
}
}
} else {
@@ -195,8 +201,11 @@ class WebRtcAudioRecord {
} catch (IllegalStateException e) {
Logging.e(TAG, "AudioRecord.stop failed: " + e.getMessage());
}
if(audioSamplesReadyCallback != null) {
audioSamplesReadyCallback.startNative();
// Taoyao
synchronized (this) {
if(WebRtcAudioRecord.this.audioSamplesReadyCallback != null) {
WebRtcAudioRecord.this.audioSamplesReadyCallback.startNative();
}
}
}
@@ -392,8 +401,11 @@ class WebRtcAudioRecord {
Logging.d(TAG, "startRecording");
assertTrue(audioRecord != null);
assertTrue(audioThread == null);
if(audioSamplesReadyCallback != null) {
audioSamplesReadyCallback.startWebRTC();
// Taoyao
synchronized (this) {
if(WebRtcAudioRecord.this.audioSamplesReadyCallback != null) {
WebRtcAudioRecord.this.audioSamplesReadyCallback.startWebRTC();
}
}
try {
audioRecord.startRecording();

View File

@@ -145,12 +145,21 @@ class WebRtcAudioTrack {
byteBuffer.position(0);
}
int bytesWritten = writeBytes(audioTrack, byteBuffer, sizeInBytes);
if (audioSamplesReadyCallback != null) {
// 注意不能定义其他地方否则不能回收
final SamplesReadyCallback nullable = audioSamplesReadyCallback;
// Taoyao
if (WebRtcAudioTrack.this.audioSamplesReadyCallback != null) {
final SamplesReadyCallback nullable = WebRtcAudioTrack.this.audioSamplesReadyCallback;
if(nullable != null) {
final byte[] data = Arrays.copyOfRange(byteBuffer.array(), byteBuffer.arrayOffset(), byteBuffer.capacity() + byteBuffer.arrayOffset());
nullable.onWebRtcAudioTrackSamplesReady(new JavaAudioDeviceModule.AudioSamples(audioTrack.getAudioFormat(), audioTrack.getChannelCount(), audioTrack.getSampleRate(), data));
final byte[] data = Arrays.copyOfRange(
WebRtcAudioTrack.this.byteBuffer.array(),
WebRtcAudioTrack.this.byteBuffer.arrayOffset(),
WebRtcAudioTrack.this.byteBuffer.arrayOffset() + WebRtcAudioTrack.this.byteBuffer.capacity()
);
nullable.onWebRtcAudioTrackSamplesReady(new JavaAudioDeviceModule.AudioSamples(
WebRtcAudioTrack.this.audioTrack.getAudioFormat(),
WebRtcAudioTrack.this.audioTrack.getChannelCount(),
WebRtcAudioTrack.this.audioTrack.getSampleRate(),
data
));
}
}
if (bytesWritten != sizeInBytes) {