Android(Java)中MediaRecorder的LocalSocket(Unix域)客户端服务器数据流问题
我没有得到的是Unix域套接字之间的数据流 我知道Unix域套接字数据流是Android(Java)中MediaRecorder的LocalSocket(Unix域)客户端服务器数据流问题,java,android,sockets,stream,unix-socket,Java,Android,Sockets,Stream,Unix Socket,我没有得到的是Unix域套接字之间的数据流 我知道Unix域套接字数据流是 LocalSocket客户端.connect()-->LocalServerSocket服务器.accept() 客户端将数据发送到服务器,这一点我可以理解 然而,对于Android MediaRecorder的流式视频/音频,经过大量研究,我看到了每一个使用LocalSocket而不是MediaRecorder文件的示例,原则上如下所示: 此代码看起来像: MediaRecorder-->LocalSocket发送器
LocalSocket客户端.connect()
-->LocalServerSocket服务器.accept()
客户端将数据发送到服务器,这一点我可以理解
然而,对于Android MediaRecorder的流式视频/音频,经过大量研究,我看到了每一个使用LocalSocket而不是MediaRecorder文件的示例,原则上如下所示:
此代码看起来像:
MediaRecorder
-->LocalSocket发送器
-->
localserversocketserver.accept()
-->LocalSocket receiver.connect()
发生了什么事
显然,套接字数据的流动方向相反,因此,我不明白为什么这段代码会像预期的那样工作
你能给我提个建议吗。谢谢。看来我的想法基本上是正确的。 我看到的例子,至少,发送方-接收方结构是错误的 下面是我制作的更简单的模型:
package com.example.app;
import android.app.Activity;
import android.media.MediaRecorder;
import android.net.LocalServerSocket;
import android.net.LocalSocket;
import android.net.LocalSocketAddress;
import android.os.Bundle;
import java.io.IOException;
public class MainActivity extends Activity
{
private final String SOCKET_ADDRESS = "socket1";
private MediaRecorder mRecorder = new MediaRecorder();
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
class IOThread extends Thread
{
@Override
public void run()
{
System.out.println("--------IO Thread------ ");
LocalSocket receiver;
LocalServerSocket server;
try
{
server = new LocalServerSocket(SOCKET_ADDRESS);
localServerCreated();
receiver = server.accept();
System.out.println("---------server.accept();------------- ");
int ret = 0;
while ((ret = receiver.getInputStream().read()) != -1)
{
System.out.println( "ret =" + ret);
}
System.out.println("ret =" + ret);
}
catch (IOException e)
{
}
}
}
IOThread io1 = new IOThread();
io1.start();
}
private void localServerCreated()
{
LocalSocket sender;
try
{
sender = new LocalSocket();
sender.connect(new LocalSocketAddress(SOCKET_ADDRESS));
mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mRecorder.setOutputFormat(MediaRecorder.OutputFormat.AAC_ADTS);
mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
mRecorder.setOutputFile(sender.getFileDescriptor());
}
catch (IOException e)
{
e.printStackTrace();
}
System.out.println("------mRecorder configured--------");
try
{
mRecorder.prepare();
mRecorder.start();
System.out.println("------mRecorder.start()--------");
}
catch (IllegalStateException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
这篇文章很有帮助。我也在用头撞砖墙,想弄明白这一点!
package com.example.app;
import android.app.Activity;
import android.media.MediaRecorder;
import android.net.LocalServerSocket;
import android.net.LocalSocket;
import android.net.LocalSocketAddress;
import android.os.Bundle;
import java.io.IOException;
public class MainActivity extends Activity
{
private final String SOCKET_ADDRESS = "socket1";
private MediaRecorder mRecorder = new MediaRecorder();
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
class IOThread extends Thread
{
@Override
public void run()
{
System.out.println("--------IO Thread------ ");
LocalSocket receiver;
LocalServerSocket server;
try
{
server = new LocalServerSocket(SOCKET_ADDRESS);
localServerCreated();
receiver = server.accept();
System.out.println("---------server.accept();------------- ");
int ret = 0;
while ((ret = receiver.getInputStream().read()) != -1)
{
System.out.println( "ret =" + ret);
}
System.out.println("ret =" + ret);
}
catch (IOException e)
{
}
}
}
IOThread io1 = new IOThread();
io1.start();
}
private void localServerCreated()
{
LocalSocket sender;
try
{
sender = new LocalSocket();
sender.connect(new LocalSocketAddress(SOCKET_ADDRESS));
mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mRecorder.setOutputFormat(MediaRecorder.OutputFormat.AAC_ADTS);
mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
mRecorder.setOutputFile(sender.getFileDescriptor());
}
catch (IOException e)
{
e.printStackTrace();
}
System.out.println("------mRecorder configured--------");
try
{
mRecorder.prepare();
mRecorder.start();
System.out.println("------mRecorder.start()--------");
}
catch (IllegalStateException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
}
}