首页 > 解决方案 > 如何从 URL 流式传输实时视频?

问题描述

我想将此链接嵌入到我的 android 应用程序中。我试过这样做,但视频无法加载。我也收到错误 java.io.FileNotFoundException: No content provider:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View view = inflater.inflate(R.layout.fragment_cctv, container, false);

    try {
        String cctv = "http://121.58.202.110:8080/jpeg?cam=4";
        VideoView videoView = getView().findViewById(R.id.cctvfragment);
        MediaController mediaController = new MediaController(getActivity());
        mediaController.setAnchorView(videoView);
        Uri video = Uri.parse(cctv);
        videoView.setMediaController(null);
        videoView.setVideoURI(video);
        videoView.start();
        videoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
            @Override
            public void onPrepared(MediaPlayer mp) {

            }
        });
    } catch (Exception e) {
        // TODO: handle exception
        Log.d("CctvDebug", "ERROR LOADING VIDEO");
    }
    return view;
}

标签: androidandroid-fragmentsvideo-streaminglive-streaming

解决方案


在这个问题上,原生视频视图对于较新且(*我认为)不再更新的 url 非常有限。尝试改用Vitamio视频播放器。它对于各种流媒体功能非常有用。

<io.vov.vitamio.widget.VideoView
   android:layout_height="fill_parent"
   android:layout_width="fill_parent"
   android:id="@+id/VideoView"/>        

另外,不要立即调用start()方法。仅在您的OnPreparedListener()回调中调用它。

Vitamio.isInitialized(getApplicationContext());

mVideoView.setVideoPath(path);
mVideoView.setMediaController(new MediaController(this));
mVideoView.requestFocus();

mVideoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
    @Override
    public void onPrepared(MediaPlayer mediaPlayer) {
        // optional need Vitamio 4.0
        mediaPlayer.setPlaybackSpeed(1.0f);
    }
});

或者您也可以使用KickFlip。设置非常简单,

Kickflip.initWithApiKey(API_KEY, API_SECRET);
Kickflip.startBroadcastActivity(this, mBroadcastListener);

编辑:

所以我从昨天开始尝试在流上工作。我无法在 vitamio 上解决这个问题(不幸的是)。尽管尝试使用您提供的网址并通过 vlc 应用程序进行流式传输。虽然我没有尝试过,但您也许可以使用LibVLC。我最终使用了带有一些设置的 webview,因此它看起来不像使用 webview。

webView = findViewById(R.id.wvWebview);

webView.loadUrl("http://121.58.202.110:8080/jpeg?cam=4");
webView.getSettings().setLoadWithOverviewMode(true);
webView.getSettings().setUseWideViewPort(true);

样品流


推荐阅读