首先,我使用videoview构建了一个小应用程序,在三星galaxt S2上播放mp4格式的hls视频。凭借标清质量,视频很流畅。但是在高清质量下,视频滞后。然后,我构建了一个更大的应用程序来使用相同的视频视图或媒体播放器 android 播放 hls 视频。当我播放视频时,视频在标清和高清质量方面滞后。
在小应用程序中,我有一个字符串数组来存储 URL。我的应用程序允许用户选择一个 URL 并按下按钮以抛出活动以使用 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();
在更大的应用程序中,我使用列表片段来显示所有URls。用户选择一个 URL,然后抛出一个活动来使用视频视图播放视频。活动中的代码:
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();
}
});
}
}
我有两个问题:
为什么视频视图或媒体播放器播放 hls 视频滞后?
如何自定义视频视图或媒体播放器以流畅播放hls视频?
HLS (又名 HTTP 实时流)中的每个段通常为 10 秒。
玩家测量获取每个片段所需的时间,如果花费的时间太长,它将尝试选择一个带宽,以便在播放之前获得一个或更多段。最常见的错误是缓冲延迟。您应该查看日志文件,了解播放器在播放内容时正在执行的操作。
如果上述内容没有帮助,这可能会有所帮助。
我假设高清质量至少为 720p,并且使用 h.264/avc 编码的比特流超过 1.5 mbps。我最好的猜测是S2硬件不支持它。