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?
一个 socket 足以调解摄像机流和RtpSocket吗?
最佳答案
MediaRecorder允许您将摄像机流写入文件或套接字。现在,当您需要直播时可以将其发送到LocalSocket(自己),并在接收器套接字处进行接收以进行进一步处理。