내 논문을 위해 VoIP 응용 프로그램을 만들고 있습니다. 누군가이 시나리오에서 나를 도울 수 있는지 알고 싶습니다. AudioThread와 AudioSendThread 두 개의 스레드가 있습니다. 첫 번째 수신기는 DatagramSocket을 통해 오디오 패킷을 수신하여 전화로 재생합니다. 두 번째는 20 밀리 초의 사운드를 잡고 다른 장치로 보내는 레코더입니다. 나는 java에서 구현했지만 정말 느리다. 그래서 나는 OpenSL을 시도하기로 결정했다. 그러나 나는 이런 식으로 어떤 문서를 찾지 못했다. OpenSL을 이용한 안드로이드 음성 통화
이
은 AudioSendThreadpublic class AudioSendThread implements Runnable {
private final static String TAG = "AudioSndThread";
private boolean createdAudioP = false;
private DatagramSocket audioSndSocket;
private String ipAddr;
private byte[] buffer;
public AudioSendThread(Object o){
this.ipAddr = //getting IpAddress
audioSndSocket = (DatagramSocket)o;
}
@Override
public void run() {
if(!createdAudioP)
createdAudioP = createAudioRecorder();
if(createdAudioP)
startRecording();
DatagramPacket packet = null;
while(true){
byte[] buffer = readAudio(20); //read 20 milliseconds of audio, this is the one i would like to implement in OpenSL
try {
packet = new DatagramPacket(buffer, buffer.length, InetAddress.getByName(this.ipAddr), PORT.AUDIO);
audioSndSocket.send(packet);
} catch (IOException e) {
Log.e(TAG, e.getMessage());
return;
}
}
}
public static native void startRecording();
public static native boolean createAudioRecorder();
public static native byte[] readAudio(int millis);
static {
System.loadLibrary("SoundUtils");
}}
되고 AudioThread
public class AudioThread implements Runnable{
private DatagramSocket audioServSock;
@Override
public void run() {
createBufferQueueAudioPlayer();
DatagramPacket packet = null;
Thread audioSndThread = null;
try {
this.audioServSock = new DatagramSocket(PORT.AUDIO);
} catch (SocketException e1) {
e1.printStackTrace();
}
if(true){
audioSndThread = new Thread(new AudioSendThread(this.audioServSock));
audioSndThread.start();
}
byte[] buffer = new buffer[1500]; //random size
packet = new DatagramPacket(buffer, 1500);
while(true){
try {
audioServSock.receive(packet);
playAudio(buffer, packet.getLength()); //other method i would like to implement in OpenSL
} catch (IOException e) {
Log.e(TAG, Log.getStackTraceString(e));
return;
}
}
at.stop();
at.release();
}
public static native void createBufferQueueAudioPlayer();
public static native void playAudio(byte[] buffer, int length);
/** Load jni .so on initialization */
static {
System.loadLibrary("native-audio-jni");
}
}
다른 네이티브 메소드는 NDK
감사의 NativeAudio 샘플로 촬영을 thisone 모든 어떤 제안이라도!
Android NDK에는 OpenSL ES를 사용하여 녹음 및 재생하는 방법을 보여주는 'native-audio'라는 샘플 애플리케이션이 포함되어 있습니다. – Michael
나는 그것을 알고, 나는이 샘플을 사용하려했지만 재생은 작동하지 않는다. 오직 mp3만으로 재생산되었다. – Oxenarf
다음은 Android에서의 낮은 대기 시간 스트리밍에 대한 궁극적 인 기사입니다. http://createdigitalmusic.com/2013/05/why-mobile-low-latency-is-hard-explained-by-google-galaxy-nexus-still-android -of-choice/ –