问题描述
我不明白的是Unix域套接字之间的数据流。
What I don't get is data flow among the Unix Domain Sockets .
据我了解Unix域套接字数据流量
I understand Unix Domain Socket data flow is
LocalSocket客户.connect()
- > LocalServerSocket服务器。接受()
客户端发送数据到服务器,不够直,我明白了。
The client sends data to the server, straight enough that I understand.
然而,对于视频流/于Android的MediaRecorder音频,大量的调查研究后,我已经看到了每一个例子来使用,而不是为MediaRecorder一个文件LocalSocket在原则如下:
However, for Streaming video/audio from MediaRecorder of Android, after a lot of research, I've seen every example to use a LocalSocket instead of a file for MediaRecorder is in principle as below:
的
LocalServerSocket server = new LocalServerSocket("some name");
receiver = new LocalSocket();
receiver.connect(server.getLocalSocketAddress());
LocalSocket sender = server.accept();//LocalSocket not LocalServerSocket as in Source link
// ...
// Give the MediaRecorder our fake file
recorder.setOutputFile(sender.getFileDescriptor());
这code如下:
MediaRecorder
- > LocalSocket发件人
- >
MediaRecorder
--> LocalSocket sender
-->
LocalServerSocket服务器。接受()
- > LocalSocket接收.connect()
这是怎么回事?
Appearently,插座数据相反的方向流动,因此,我不明白为什么这code正常工作。
Appearently, the sockets data flows in the opposite direction, therefore, I don't get why this code works as expected.
你能请告知。谢谢你。
推荐答案
看来基本上,我的想法是正确的。
这些例子我见过,至少,发件人,接收机结构是有些不妥。
It appears that basically, my thought is correct.The examples I've seen, at least, sender-receiver structure is something wrong.
下面是我变得更简单的模型:
Here's more straightforward model I made:
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();
}
}
}
这篇关于一个LocalSocket(Unix域)的客户端 - 服务器的数据流问题的MediaRecorder Android中(JAVA)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!