我想要的是broadcast
一个安卓摄像头视频到远程位置,任何人都可以在他们的手机或网站上观看该视频。
我已成功unicast
到我电脑上的vlc播放器。
我尝试了red5
服务器,Adobe media server
,ffmpeg
服务器,但所有服务器都在维尔。
他们每个人只能从预先录制的文件中broadcast
视频,但不能从任何直播视频中播放。
任何人都可以建议我做什么。
答案 0 :(得分:8)
我读过(我认为甚至在stackoverflow上)你可以为MediaRecorder提供TCP-Connection的FileHandle。然后,您可以收听该连接,读取数据,将其打包并重新发送为RTSP / RTP-Stream。
如果我碰巧找到了原帖,我会在这里引用它。
修改强>
原帖是:Streaming Video From 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。