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?
答案 0 :(得分:1)
MediaRecorder允许您将摄像机流写入文件或套接字。现在,当您需要用于广播的实时馈送时,您将其发送到LocalSocket(自己)并在接收器插座处接收以进行进一步处理。