[*] 日常优化

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

View File

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

View File

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