我想从点A(2.1手机)实时获取视频流到点B(我的服务器)。我会怎么做?下面详细描述我尝试(有点长,但简洁!)在录制时流式传输录制文件
的目标是让记录手机到服务器一小时长的视频,而无需暂停/停止流。延迟达几分钟不是问题。我已经尝试了三种方法
- 线程一个FileInputStream从视频 目的地
- 呼叫MediaRecoder.setOutputFile上 的 的FileDescriptor读取的“发件人”插座的FD。这个 套接字连接到一个 LocalSocketServer,其目的地 是'接收器'套接字。
- 打开套接字到我的服务器和 给setOutputFile其FD
不幸的是这两种尝试都失败了。
- 只注册24个字节每当我 调用FileInputStream.available(), 和字节的实际数量只有 后,我打电话Recorder.stop()
给了我这个没用的精美栈跟踪
错误/ AndroidRuntime(18532):引起:java.lang.RuntimeException:启动失败。 ERROR/AndroidRuntime(18532):在android.media.MediaRecorder.start(本机方法) ERROR/AndroidRuntime(18532):在com.example.demovideo.DemoVideo.initializeCamera(...)...
相同的错误2个
代码片段(部分省略)
1)
fileOut = new FileOutputStream(pathToFile);
...
recorder.setOutputFile(fileOut.getFD());
recorder.prepare()
recorder.start()
// in an Async Thread
fileIn = FileInputStream(fileOut.getFD);
while (recording) {
fos.flush();
Log.w("---", "bytesAvailable: " + fileIn.available()); //always returns 24
Thread.sleep(1000);
}
2)
// in a Thread
server = new LocalServerSocket(SOCKET_ADDRESS);
while (true){
receiver = server.accept();
if (receiver != null){
InputStream input = receiver.getInputStream();
... // processing would go here
} }
sender = new LocalSocket();
sender.connect(new LocalSocketAddress(SOCKET_ADDRESS));
recorder.setOutputFile(sender.getFileDescriptor());
...
recorder.prepare();
recorder.start(); // <- error
- 如果我使用 setOutputFile(pathToFile),而不是正确地节省了廉洁视频 到SD
- 作品。 插座也工作时,我跑
sender.getOutputStream().write(message.getBytes());
我想实现相同的功能。但我不明白你的方法。您设置recorder.setOutputFile两次:一次到一个文件,另一次到一个套接字。我认为无论何时更改,记录器都将使用新的fileID,而不是使用多个fileID。 – user1914692 2013-05-29 16:57:42
1)和2)是两个单独的例子 – ebaum 2013-05-29 17:57:58