我想要的是broadcast
一个远程位置的安卓相机视频,任何人都可以在他们的手机或网站上观看该视频。我已经成功地unicast
在我的电脑上安装了 vlc 播放器。我尝试了red5
server, Adobe media server
, ffmpeg
server 但都无效。他们每个人都只能broadcast
从预先录制的文件中录制视频,但不能从任何直播流中录制视频。任何人都可以建议我做什么。
1 回答
我读到(我认为它甚至在 stackoverflow 上)你可以为 MediaRecorder 提供一个 TCP-Connection 的 FileHandle。然后您可以监听该连接,读取数据,将其打包并作为 RTSP/RTP-Stream 重新发送。
如果我碰巧找到原始帖子,我会在这里引用它。
编辑:
最初的帖子是:从 Android 流式传输视频
关于 Filedescriptor 的部分来自: http: //www.mattakis.com/blog/kisg/20090708/broadcasting-video-with-android-without-writing-to-the-file-system
以防万一,我引用了博客中的相应示例:
String hostname = "your.host.name";
int port = 1234;
Socket socket = new Socket(InetAddress.getByName(hostname), port);
ParcelFileDescriptor pfd = ParcelFileDescriptor.fromSocket(socket);
MediaRecorder recorder = new MediaRecorder(); // Additional MediaRecorder setup (output format ... etc.) omitted
recorder.setOutputFile(pfd.getFileDescriptor());
recorder.prepare();
recorder.start();
但是,这仅通过线路发送视频文件数据。您可以保存它然后播放。但如前所述,它还不是流。
更新: 第一步您甚至不必使用 TCP 套接字。我刚刚被“LocalSocket”(1) 绊倒了,这也为您提供了一个 FileHandle 来提供 MediaRecorder。这些本地套接字是“AF_LOCAL/UNIX 域流套接字”。见http://developer.android.com/reference/android/net/LocalSocket.html
到目前为止,我自己还没有尝试过以上所有方法,但很快就会尝试。所以也许我可以在不久的将来提供更多帮助:)
(1)出于安全原因, LocalSocket在较新的 Android 版本上不可用!请参阅 2015 年 11 月 25 日的更新。
更新 2: 刚刚在 Android Sources 中看到了“OUTPUT_FORMAT_RTP_AVP”。但它是隐藏的 :( 所以我想它将在未来的 Android API 版本中可用 。https ://github.com/android/platform_frameworks_base/blob/master/media/java/android/media/MediaRecorder.java第 219 行:
public static final int OUTPUT_FORMAT_RTP_AVP = 7;
我没有尝试通过提供硬编码来欺骗隐藏7
......如果有人这样做,请在此处发表评论!
更新 2015-11-25
我刚刚遇到了 libstreaming:https ://github.com/fyhertz/libstreaming 我没有深入研究它,但似乎有很多关于从这个项目的 Android 流式传输(如果不仅使用它) . 我在那里读到LocalSocket 解决方案对于较新的 Android 版本无效 :( 但他们提供了一个替代方案:ParcelFileDescriptor。