为什么Spydroid-ipcamera在使用RTPsocket之前需要两个套接字?

时间:2013-04-02 17:32:14

标签: android sockets android-mediarecorder

Spydroid-ipcamera是一款开源Android代码,可将手机的摄像头和麦克风流式传输到浏览器或VLC。 它的网站在这里:http://code.google.com/p/spydroid-ipcamera/

当有人要求流式传输Android手机的相机时,这是stackoverflow中的典型示例。

查看其代码:

(1)它构建了两个套接字:mSender,mReceiver

private LocalServerSocket mLss = null;
mLss = new LocalServerSocket("net.majorkernelpanic.librtp-"+sId);

mReceiver = new LocalSocket();
mReceiver.connect( new LocalSocketAddress("net.majorkernelpanic.librtp-" + mSocketId ) );
mReceiver.setReceiveBufferSize(500000);
mSender = mLss.accept();
mSender.setSendBufferSize(500000); 

(2)摄像机的输出写入mSender: 在streaming / MediaStream.java中

// We write the ouput of the camera in a local socket instead of a file !   
setOutputFile(mSender.getFileDescriptor());

(3)它构建另一个对象mPacketizer,它包含一个RtpSocket成员。 对象mPacketizer从mReceiver接收摄像头inputStream,将摄像头流封装到RTP数据包,然后通过网络发送数据包。

// the packetizer encapsulates this stream in an RTP stream and send it over the network
mPacketizer.setInputStream(mReceiver.getInputStream());

从这个意义上讲,整个相机流的流程是:

相机流 - > mSender - > mReceiver - > mPacketizer,RtpSocket - >发送到网络。

我的问题是: 为什么需要两个插槽,mSender和mReceiver? 一个插座是否足以调解摄像机流和RtpSocket?

1 个答案:

答案 0 :(得分:1)

MediaRecorder允许您将摄像机流写入文件或套接字。现在,当您需要用于广播的实时馈送时,您将其发送到LocalSocket(自己)并在接收器插座处接收以进行进一步处理。