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 接收摄像头输入流,将摄像头流封装成 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?