2

首先,我使用videoview构建了一个小应用程序,在三星galaxt S2上播放mp4格式的hls视频。SD质量,视频流畅。但高清质量,视频滞后。然后,我构建了一个更大的应用程序来使用相同的 videoview 或 mediaplayer android 播放 hls 视频。当我播放视频时,视频质量落后于标清和高清质量。

在小型应用程序中,我有一个字符串数组来存储 URL。我的应用程序允许用户选择一个 URL 并按下按钮来使用 videoview 来播放视频:在小应用程序中使用 videoview 的代码:

        VideoView vd = (VideoView)findViewById(R.id.videoView1);
        MediaController mc = new MediaController(this);
        mc.setAnchorView(vd);
        Uri uri = Uri.parse(URL_link);
        vd.setMediaController(mc);
        vd.setVideoURI(uri);
        vd.start();

在较大的应用程序中,我使用 listfragment 来显示所有 URls。用户选择一个 URL,然后使用 videoview 抛出一个活动来播放视频。活动中的代码:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_channel_detail);
    TextView tv = (TextView) findViewById(R.id.tvVideoPlayer);
    Bundle extras = getIntent().getExtras();
    if (extras != null) {
        channel_id = extras.getInt(ChannelDetailActivity.CHANNEL_ID);
    }
    tv.setText("Video is playing...");
}
@Override
protected void onStart() {
    super.onStart();
    getChannelInfo();
}
private void getChannelInfo( ) {
    TimeTVApiCaller.getInstance().getChannel(channel_id, this,
            new AjaxCallback<ChannelInfo>() {
                @Override
                public void callback(String url, ChannelInfo object,
                        AjaxStatus status) {
                    if (object != null) {
                        Urlvideo = object.getChannelUrls().get(0).getPath();
                        getURLfull(Urlvideo);
                    }
                }
            });
}
    //get a full URL
protected void getURLfull(String url)
{
    TimeTVApiCaller.getInstance().getChannelStream(url, this, new AjaxCallback<String>()
            {
               @Override
            public void callback(String url, String object,
                    AjaxStatus status) {
            String Urlfull = object.replace("\"", "");
            Urltoken = Urlfull;
           //Using the same videoview
            VideoView vd = (VideoView) findViewById(R.id.videoView1);
            MediaController mc = new MediaController(ChannelDetailActivity.this);
            mc.setAnchorView(vd);
            Uri uri = Uri.parse(Urltoken);
            vd.setMediaController(mc);
            vd.setVideoURI(uri);
            vd.start();
            //vd.requestFocus();
            }
            });
}
   }

我有两个问题:

  1. 为什么 videoview 或 mediaplayer 播放 hls 视频滞后?

  2. 如何自定义 videoview 或 mediaplayer 以流畅播放 hls 视频?

4

2 回答 2

0

HLS aka HTTP Live Streaming中的每个片段通常为 10 秒。

播放器测量获得每个片段所需的时间,如果花费的时间太长,它将尝试选择一个带宽,它可以在播放之前获得一个片段或更多片段。最常见的错误是缓冲延迟。您应该查看日志文件以了解播放器在播放内容时正在做什么。

如果以上没有帮助,可能会有所帮助。

于 2013-10-12T15:17:56.507 回答
0

我假设高清质量至少为 720p,并且采用 h.264/avc 编码的比特流超过 1.5 mbps。我最好的猜测是 S2 硬件不支持它。

于 2015-09-21T11:04:04.113 回答