广播Android相机视频

时间:2012-05-23 04:20:38

标签: android video-streaming

我想要的是broadcast一个安卓摄像头视频到远程位置,任何人都可以在他们的手机或网站上观看该视频。 我已成功unicast到我电脑上的vlc播放器。 我尝试了red5服务器,Adobe media serverffmpeg服务器,但所有服务器都在维尔。 他们每个人只能从预先录制的文件中broadcast视频,但不能从任何直播视频中播放。 任何人都可以建议我做什么。

1 个答案:

答案 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。