Stream live video from phone to phone using socket fd

醉酒当歌 提交于 2019-11-27 17:24:37

I found an open source project for implementing what I was trying. It processes the video with metadata through an IP camera. Although it does not send video directly to a phone, it does broadcast video for various devices to watch. The source code can be found at the following project page http://code.google.com/p/ipcamera-for-android/.

With Android 4.4 there is another way to play a live MJPEG stream. The stream you are playing should be broadcast by the other device on a port over UDP. Let's say we have a stream being broadcast on 192.168.0.101:8080. We can play the stream by adding a WebView to our layout. Then in our activity we do the following:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.mjpeg_activity);
    // Grab instance of WebView
    WebView webView = (WebView)findViewById(R.id.webViewStream);
    // Set page content for webview
    webView.loadData("<html><head><meta name='viewport' content='target-densitydpi=device-dpi,initial-scale=1,minimum-scale=1,user-scalable=yes'/></head><body><center><img src=\"http://192.168.0.101:8080/\" alt=\"Stream\" align=\"middle\"></center></body></html>", "text/html", null);
    webView.getSettings().setBuiltInZoomControls(true);
}

In the content we tell the webpage to use the device's dpi. To support the user to pinch zoom on the webpage I have added the following initial-scale=1,minimum-scale=1,user-scalable=yes. Initially the image is it's original size and cannot get smaller. The user can now scale to zoom into the image and out to it's original size. Removing the minimum scale will give the user complete control over zoom, but can result in making the image so small you can't find it.

You have to set the recorder output format 8(MPEG-2TS, only available from android version 3.0+). In this case record the video in this format and sent stream to other phone and save it in a file. And play it after writing some data in the file, then you can see live stream.

Note- You can't directly play through socket file descriptor, because socket fd is not seekable. If you use socket fd you will get "offset error". Recording is possible, but play is restricted.

Steve Pomeroy

Take a look at Streaming to the Android MediaPlayer , which may have some helpful tips on how to do the streaming. I suspect the issue is that Android's trying to seek in the file, but being a network socket - it can't. Maybe some sort of disk/memory buffer that supports seeking could help?

Download source code from: http://code.google.com/p/ipcamera-for-android/ (https://github.com/Teaonly/android-eye)

Build the jni first (use ndk-build with cygwin)

I could build this project successfully

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!