SipDroid不正是你需要的。
它涉及到一种破解需要文件描述符的MediaRecorder
类的限制。它将MediaRecorder视频流的结果保存到本地套接字(用作一种管道),然后重新读取(在同一个应用程序中,但另一个线程),从另一端的此套接字创建RTP数据包从收到的数据中取出,最后将RTP数据包广播到网络(您可以在此处使用广播或单播模式)。
基本上它归结为以下的(简化的代码):
// Create a MediaRecorder
MediaRecorder mr = new MediaRecorder();
// (Initialize mr as usual)
// Create a LocalServerSocket
LocalServerSocket lss = new LocalServerSocket("foobar");
// Connect both end of this socket
LocalSocket sender = lss.accept();
LocalSocket receiver = new LocalSocket();
receiver.connect(new LocalSocketAddress("foobar"));
// Set the output of the MediaRecorder to the sender socket file descriptor
mr.setOutputFile(sender.getFileDescriptor());
// Start the video recording:
mr.start();
// Launch a background thread that will loop,
// reading from the receiver socket,
// and creating a RTP packet out of read data.
RtpSocket rtpSocket = new RtpSocket();
InputStream in = receiver.getInputStream();
while(true) {
fis.read(buffer, ...);
// Here some data manipulation on the received buffer ...
RtpPacket rtp = new RtpPacket(buffer, ...);
rtpSocket.send(rtpPacket);
}
的RtpPacket
和RtpSocket
类(相当简单的),并且其操作所述视频流内容的确切的代码的执行可以在找到SipDroid项目(尤其是VideoCamera.java
)。
我有类似的问题,我试过使用WebRTC,但没有在智能电视工作(我的问题是Android和智能电视之间的传输),智能电视没有镀铬:( – vrbsm