如何在Android上将视频录制成流?

13

Android MediaRecorder 允许将视频保存到文件(文件或套接字):

setOutputFile(FileDescriptor fd);
setOutputFile(String path)

如何将视频数据保存到OutputStream中?它将用于流式视频录制。

2个回答

14
您可以使用ParcelFileDescriptor.fromSocket()来完成此操作:
String hostname = "example.com";
int port = 1234;

Socket socket = new Socket(InetAddress.getByName(hostname), port);

ParcelFileDescriptor pfd = ParcelFileDescriptor.fromSocket(socket);

MediaRecorder recorder = new MediaRecorder();
recorder.setOutputFile(pfd.getFileDescriptor());
recorder.prepare();
recorder.start();

如果您喜欢使用UDP,请使用ParcelFileDescriptor.fromDatagramSocket()

Credit应归功于。


1
我知道他们肯定会包括一种指定接收字节的方式,而非仅限于文件的方式,在 setoutputFile() 中。 - WIllJBD
这将导致 java.net.ConnectException: failed to connect to /127.0.0.1 (port 8090): connect failed: ECONNREFUSED (Connection refused)。 - 4ntoine
你为什么想要连接到本地主机?你的手机/模拟器上是否有正在监听该端口的应用程序在运行? - Franci Penov
2
我已经设置了一个TCP服务器,但每当我这样做时,TCP服务器都没有接收到任何数据。我已经检查了套接字,它可以正常发送数据,路径也正常工作。当我查看日志时,我看到“/ MediaRecorder:start failed:-38”。 - Kamran

7

使用 Android 特定的 LocalServerSocket 似乎是获取视频数据流的唯一可能方式。简而言之,您需要执行以下操作:

  1. 创建 LocalServerSocket 实例
  2. 使用文件描述符将其设置为 MediaRecorder 实例的输出文件(mediaRecorder.setOutputFile(FileDescriptor fd);)
  3. 接受连接
  4. 在单独的线程循环中从它(作为 InputStream)读取字节

有其他想法吗?


2
提示:这在新的Android版本中不可能实现(我猜从5.x开始)。 - Denis Lukenich
@DenisLukenich 为什么不呢? - Ilya Gazman
相当长的一段时间以前了。我认为它被阻止是因为更严格的安全措施。 - Denis Lukenich

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接