【问题标题】:Android VideoView stop streaming after specific timeAndroid VideoView 在特定时间后停止流式传输
【发布时间】:2016-08-08 07:00:19
【问题描述】:

我正在android中播放来自this URL的直播

到目前为止,我已经设法在 videoView 中播放视频,问题是视频恰好在 23 秒后停止,所以我使用了 videoview 方法 setOnCompletionListener(...) 来重新开始视频,但是,这给观看者带来了不好的体验,因为它每 23 秒停止并重新开始,也会错过几帧。

所以我的问题是“如何在播放当前缓冲视频时让 videoView 缓冲视频的下一部分。

这是我的代码

    public class TvActivity extends Activity {

    // Declare variables
    ProgressDialog pDialog;
    VideoView videoview;


    // Insert your Video URL
    String VideoURL = "";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // Get the layout from video_main.xml
        setContentView(R.layout.videoview_main);
        // Find your VideoView in your video_main.xml layout
        videoview = (VideoView) findViewById(R.id.VideoView);
        // Execute StreamVideo AsyncTask
        VideoURL = "http://ns3622101.ip-149-202-201.eu:8000/live/fr443500/75019pa/286.ts";

        // Create a progressbar
        pDialog = new ProgressDialog(TvActivity.this);
        // Set progressbar title
        pDialog.setTitle("Video Streaming ");
        // Set progressbar message
        pDialog.setMessage("buffering ...");
        pDialog.setIndeterminate(true);
        pDialog.setCancelable(true);
        // Show progressbar
        pDialog.show();

        try {
            // Start the MediaController
            final MediaController mediacontroller = new MediaController(
                    TvActivity.this);
            mediacontroller.setAnchorView(videoview);

            // Get the URL from String VideoURL
            final Uri video = Uri.parse(VideoURL);
            videoview.setMediaController(mediacontroller);
            videoview.setVideoURI(video);
            videoview.requestFocus();
            videoview.setOnPreparedListener(new OnPreparedListener() {

                // Close the progress bar and play the video
                public void onPrepared(MediaPlayer mp) {
                    pDialog.dismiss();
                    videoview.start();
                }
            });

            videoview.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
                @Override
                public void onCompletion(MediaPlayer mp) {
                    videoview.stopPlayback();
                    videoview.setVideoURI(video);
                    videoview.requestFocus();
                    videoview.start();
                }
            });

        } catch (Exception e) {
            Log.e("Error", e.getMessage());
            e.printStackTrace();
        }


    }



}

【问题讨论】:

    标签: java android video-streaming android-videoview


    【解决方案1】:

    当您从 Live Stream URL 播放视频时,我建议您通过使用第三方 Player 流式传输视频来流式传输视频并缓冲视频的下一部分,我建议您使用 Android GirrafePlayer 它是好的玩家从here获取它

    还有as you are Streaming .ts file 我认为android videoview 不会流式传输此视频文件,因此请尝试使用.ts 文件流式传输此视频文件支持的播放器。

    【讨论】:

    • 感谢您的建议,我已经测试过 GirrafePlayer ,它确实是一款不错的播放器,但即使在 GirrafePlayer 中问题仍然存在。我认为是 VideoView 的问题,我们需要一些方法在当前部分播放时缓冲下一个视频部分。
    • 实际上您正在播放 .ts 文件,据我所知 .ts 文件不会直接流式传输。它与播放列表 M3U8 文件一起播放...对此进行研发我不知道更多。
    【解决方案2】:

    对于实时流媒体以及离线音频或视频播放,我建议使用ExoPlayer

    这是一个非常好的播放谷歌开发的音频和视频的库。 简介如下:

    “ExoPlayer 是适用于 Android 的应用程序级媒体播放器。它提供了 Android 的 MediaPlayer API 的替代方案,用于在本地和互联网上播放音频和视频。ExoPlayer 支持 Android 的 MediaPlayer API 目前不支持的功能,包括 DASH 和 SmoothStreaming 自适应播放。与 MediaPlayer API 不同,ExoPlayer 易于自定义和扩展,并且可以通过 Play 商店应用程序更新进行更新。”

    更多信息请在Github搜索ExoPlayer。

    【讨论】:

    • 感谢您的回答,我会检查并提供结果。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-15
    • 2012-07-27
    • 2016-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多