현재 TCP를 통해 하나의 테스트 mp3 파일을 제공하는 C# 서버를 설정했습니다. 스트림이하여 TcpClient 클래스에서 수신C# 서버에서 Android로 스트리밍 MP3
public void btngo_click(View v)
{
final TcpClient client = new TcpClient();
new Thread(new Runnable(){
@Override
public void run() {
final MediaPlayer mediaPlayer = new MediaPlayer();
client.GetStream();
runOnUiThread(new Runnable(){
public void run()
{
int length = client.GetLength();
if(length > 0)
{
byte[] result = client.GetResult();
try {
// create temp file that will hold byte array
File tempMp3 = File.createTempFile("test", "mp3", getCacheDir());
tempMp3.deleteOnExit();
FileOutputStream fos = new FileOutputStream(tempMp3);
fos.write(result);
fos.close();
mediaPlayer.reset();
FileInputStream fis = new FileInputStream(tempMp3);
mediaPlayer.setDataSource(fis.getFD());
mediaPlayer.prepare();
mediaPlayer.start();
} catch (IOException ex) {
String s = ex.toString();
ex.printStackTrace();
}
}
}
});
}
}).start();
}
: 나는 버튼 클릭에 서버를 호출을 만드는 중이라서 설정 내 테스트 안드로이드에서
public void RunStreamer()
{
log.MakeLog("Starting streamer");
Run = true;
//Need to look into how to thread this to not block the main window
TcpListener listen = new TcpListener(localAddr, _port);
listen.Start(); //startlistening to client requests
//blocks until a client request comes in
for (; ;)
{
Socket socket = listen.AcceptSocket();
if (socket.Connected)
{
SendFileToClient(socket);
socket.Disconnect(false);
}
}
}
void SendFileToClient(Socket socket)
{
log.MakeLog("Connection made");
NetworkStream netStream = new NetworkStream(socket);
StreamWriter writer = new StreamWriter(netStream);
//Todo - set specfified file - this file just for test
FileStream filestream = File.Open(@"C:\MusicTest\Test.mp3", FileMode.Open, FileAccess.Read, FileShare.Read);
filestream.CopyTo(netStream);
netStream.Flush();
netStream.Close();
}
을 다음과 같이 파일을 전송하는 코드는
는public class TcpClient {
public final static String SERVER_ADDRESS = "127.0.0.1";
public final static int SERVER_PORT = 65000;
public String TotalResult;
public int Length;
byte[] result = new byte[21000000];
public TcpClient()
{
}
public int GetLength()
{
return Length;
}
public byte[] GetResult()
{
return result;
}
public void GetStream()
{
try
{
final Socket socket = new Socket("192.0.0.5", 85000);
final InputStream input = new BufferedInputStream(socket.getInputStream());
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
int nread;
while((nread = input.read(result, 0, result.length)) != -1)
{
buffer.write(result, 0, nread);
}
buffer.flush();
//input.read(result);
Length = result.length;
input.close();
socket.close();
} catch (UnknownHostException e) {
String exc = e.getMessage();
e.printStackTrace();
} catch (IOException e) {
String exc2 = e.getMessage();
e.printStackTrace();
}
}
} 여기에 모든 코드에 대한 사과와
내 문제는 다음과 같이한다입니다 .
스트림을 수신합니다. 임시 MP3 파일이 생성되고 미디어 플레이어가 시작됩니다. 그런 다음 테스트 MP3 파일 (전체 노래)의 짧은 발췌 부분 만 가져옵니다. 그것은 또한 조금 뛰어 오른다. 길이가 같지 않고 연주되는 곡의 섹션이 매번 다릅니다.
어떻게 전체 파일을 순서대로 재생하여 노래를 완전히 재생할 수 있습니까?
나는 이것에 대해 주위를 둘러 보았고 클라이언트 컴퓨터에 어떤 파일 크기를 의심해야하는지 생각한 다음 모든 데이터가 수신 될 때까지 루프를 수행해야한다고 생각했습니다. 그것은 올바른 해결책입니다.
내가 잘못 가고있는 부분이나 해결할 수있는 부분에 대한 정보는 크게 감사하겠습니다 !!
Wi-Fi를 통한 것이라고 가정합니다. – MyCodeSucks
예 wi-fi 이상입니다. 동일한 결과를 바탕으로 데스크톱과 휴대 전화의 에뮬레이터에서 테스트를 마쳤습니다. – Luthervd