簡體   English   中英

使用Videoview或Mediaplayer播放http實時流視頻是LAG

[英]Using Videoview or mediaplayer to play http live streaming video is LAG

首先,我用videoview構建了一個小應用程序,可以在三星galaxt S2上播放mp4格式的hls視頻。標清質量可以使視頻流暢;而高清質量可以使視頻滯后。 然后,我構建了一個更大的應用程序,以使用相同的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視頻?

HLS aka HTTP Live Streaming中的每個段通常為10秒。

播放器會測量獲取每個片段所花費的時間,如果花費的時間太長,它將嘗試選擇一個帶寬,以便在播放之前可以獲取一個片段或更多片段。 最常見的錯誤是緩沖延遲。 您應該在日志文件中查看播放器在播放內容時正在做什么。

如果以上方法沒有幫助, 可能會有所幫助。

我假設高清質量至少為720p,並且具有h.264 / avc編碼的比特流超過1.5 mbps。 我最好的猜測是S2硬件不支持它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM