通过WiFi实时streamvideo从一个Android手机到另一个
我已经search了互联网天如何实现从Android手机到另一个Android手机通过WiFi连接的videostreamfunction,但我似乎无法find任何有用的东西。 我看了Android开发人员的示例代码,stackoverflow,谷歌,安卓博客,但没有。 我所能find的只是某种电话到桌面或桌面到电话的stream媒体解决scheme,但在我的实施过程中没有任何东西可以借鉴。
我需要使用arduino ADK来控制一个机器人,所以我使用了两个手机,一个将安装在机器人上,另一个将接收来自机器人的videostream。 我提到这一点是因为我试图在广播时间和观看时间之间实现最小的延迟。
我正在写2个应用程序,一个主应用程序来控制机器人(从手持电话),这将控制从应用程序和接收stream,第二个从应用程序将运行在机器人手机上,控制电机/执行器/stream到主应用程序。 我不能使用第三方应用程序。 我需要将videostream代码整合到我的2个应用程序中。
有什么select来实现这一目标? 也是很难做,因为我从来没有videostreaming工作,艰难,我在Java和Android的发展很好。 我应该如何编码/解码stream,如何启动连接,我需要使用UDP而不是TCP / IP? 我真的不知道从哪里开始,没有任何示例代码。 我很确定这可以实现。 我找不到有用的东西让我开始正确的方向。
我偶然发现了spydroid,但它在桌面上使用VLC,所以对我来说并不合适。
如果您不需要应用程序中的录制和回放function,则使用现成的stream媒体应用和播放器是一个合理的select。
但是,如果您确实需要将它们放在应用程序中,则必须查看MediaRecorder API(用于服务器/相机应用程序)和MediaPlayer (用于客户端/播放器应用程序)。
服务器快速示例代码:
// this is your network socket ParcelFileDescriptor pfd = ParcelFileDescriptor.fromSocket(socket); mCamera = getCameraInstance(); mMediaRecorder = new MediaRecorder(); mCamera.unlock(); mMediaRecorder.setCamera(mCamera); mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER); mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA); // this is the unofficially supported MPEG2TS format, suitable for streaming (Android 3.0+) mMediaRecorder.setOutputFormat(8); mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT); mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.DEFAULT); mediaRecorder.setOutputFile(pfd.getFileDescriptor()); mMediaRecorder.setPreviewDisplay(mPreview.getHolder().getSurface()); mMediaRecorder.prepare(); mMediaRecorder.start();
在玩家方面有点棘手,你可以试试这个:
// this is your network socket, connected to the server ParcelFileDescriptor pfd = ParcelFileDescriptor.fromSocket(socket); mMediaPlayer = new MediaPlayer(); mMediaPlayer.setDataSource(pfd.getFileDescriptor()); mMediaPlayer.prepare(); mMediaPlayer.start();
不幸的是,mediaplayer往往不喜欢这个,所以你有两个select:(一)保存数据从套接字到文件和(在你有一点点的数据)与媒体播放器从文件播放,或(b)使一个微小的http代理,在本地运行,可以接受mediaplayer的GET请求,回复HTTP头,然后将数据从远程服务器复制到它。 对于(a)你将创build一个文件path或文件的urlmediaplayer,(b)给它一个http url指向你的代理。
也可以看看:
使用套接字stream将电话直播到手机
MediaPlayer在播放开始时口吃
我曾经做过这样的事情,但发送video并实时播放是一件非常复杂的事情。 我build议你只使用PNG。 在我的实现中,我所做的是使用主机相机捕获PNG,然后通过networking将它们发送给客户端,客户端将尽快显示图像,并从主机请求下一张图像。 由于您使用的是WiFi,因此通讯速度将足够快,可以每秒处理8-10张图片(只能近似处理蓝牙)。 所以这将看起来像一个连续的video,但更less的努力。 对于通信,你可以使用UDP套接字(更快,更简单)或DLNA(不知道这是如何工作的)。
您可以使用IP摄像头 ,也可以使用DLNA。 例如三星设备带有一个名为AllShare的应用程序,它可以共享和访问networking上启用DLNA的设备。 不过,我认为IP摄像头是你最好的select。 你应该能够打开它使用MXvideo播放器或类似的东西创build的stream。
你可以检查它可以stream的Android VLC和播放video,如果你想更多的信息,你可以检查他们的GIT来分析他们做什么。 祝你好运!