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