2013-07-17 2 views
0

기본 아이디어는 하나의 장치에서 오디오를 녹음하고이를 사용하여 Wlan을 통해 소켓을 사용하는 다른 장치로 보낼 수있는 응용 프로그램을 만드는 것입니다. 한마디로 Lan 음성 채팅 프로그램.Android : 오디오 트랙과 소켓을 사용하여 오디오를 손쉽게 스트리밍

AudioRecord 개체를 사용하여 마이크에서 라이브 오디오를 레코딩 한 다음 녹음 된 데이터를 바이트 배열로 읽은 다음 바이트 배열을 TCP 소켓에 씁니다. 수신 장치는 그 바이트 배열을 소켓에서 읽어 AudioTrack 객체의 버퍼에 씁니다.

그 추천

오디오 레코드 -> 바이트 배열 -> 소켓 ---> LAN ---> 소켓 -> 바이트 배열 - 프로세스가 사용 동안 반복> AudioTrack

루프.

오디오가 재생되고 있지만 프레임간에 지연이 있습니다. 내가 헬로 (Hello)라고 말할 때, 수신기는 He-ll-O을 듣는다. 오디오는 완전하지만 버퍼 블록 사이에 지연이 있습니다.

지금까지 내가 지연이 란 전송

에 지연 예정이다 알고 어떻게 그것을 개선합니까? skype 및 gtalk와 같은 상용 온라인 채팅 응용 프로그램과 같이 어떤 접근 방식을 사용해야합니까?

답변

0

lan을 통한 오디오 전송의 분산을 처리하려면 어딘가에 더 긴 버퍼가 필요합니다. 이를 처리하기 위해 소켓 바이트 배열과 오디오 트랙 사이에 중간 버퍼를 만들 수 있습니다. 버퍼의 크기는 AudioTrack 객체에 사용 된 버퍼의 x 배가 될 수 있습니다. 이 같은 뭔가 :

소켓 바이트 -> 오디오 버퍼 -> 버퍼는 오디오 트랙에 공급하세요 -> 오디오 트랙

오디오는 완전히 이상 채워 때까지 다시 아무것도 연주하지 않는, 녹음이 시작되면 완충기. 그 후에는 오디오 트랙 버퍼 크기의 블록을 오디오 트랙 개체에 공급할 수 있습니다.

+0

그러나 도착한 것보다 더 빠른 속도로 오디오가 공급되기 때문에 버퍼가 줄어들지 않습니다. – Allahjane

+0

버퍼가 늦게 표시되면 버퍼가 줄어 듭니다. 그러나 늦게 도착한 사람들이 마침내 도착하면 다시 채워야합니다. 고려해야 할 한 가지는 버퍼 제출 시간을 네트워크에 맞추고 녹음 된 오디오의 샘플 속도를 조정하는 것입니다. 고려해야 할 또 다른 사항은 버퍼를 순서에 맞출 수 없다는 것입니다. 따라서 오디오를 수신기로 재생하기 전에 지연 시간을 충분히 고려해야합니다. – Ehz

관련 문제