2

まず、videoview を使用して、Samsung galaxt S2 で mp4 形式の hls ビデオを再生する小さなアプリを作成しました。次に、同じ videoview または mediaplayer android を使用して hls ビデオを再生するためのより大きなアプリを作成しました。ビデオを再生すると、SD と HD の品質でビデオが遅れました。

小さなアプリでは、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 を使用してすべての URL を表示します。ユーザーは 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();
            }
            });
}
   }

2 つの質問があります。

  1. videoview または mediaplayer play hls video が遅れるのはなぜですか?

  2. videoview または mediaplayer をカスタマイズして hls ビデオをスムーズに再生するにはどうすればよいですか?

4

2 に答える 2

0

HD 品質は少なくとも 720p で、h.264/avc エンコーディングで 1.5 mbps 以上のビット ストリームであると想定しています。私の最善の推測は、S2 ハードウェアがサポートしていないということです。

于 2015-09-21T11:04:04.113 に答える
0

HLS 別名HTTP ライブ ストリーミングの各セグメントは通常 10 秒です。

プレーヤーは、各セグメントを取得するのにかかる時間を測定します。時間がかかりすぎる場合は、再生する前にセグメントを取得できる帯域幅を選択しようとします。最も一般的なエラーは、バッファリングの遅延です。ログ ファイルを調べて、コンテンツの再生時にプレーヤーが何を行っているかを確認する必要があります。

上記が役に立たない場合は、これが役立つかもしれません。

于 2013-10-12T15:17:56.507 に答える