[*] 日常优化
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user