android电视播放器字幕,android播放视频显示字幕

我们看到市场上视频播放应用在播放视频时,可以在视频上面显示滚动字幕信息,或者其它提示图片信息等.那么它们是如何实现的呢,首先播放视频一般是用SurfaceView,VideoView等,那么我们如何在SurfaceView上显示字幕呢,根据我前面一篇文章所述SurfaceView的工作原理,SurfaceView的生命周期虽然受到它的宿主窗口限制,但是它是工作于不同的窗口,且位于宿主窗口之下.我们直接看个例子.

对应activity_main.xml布局如下:

FrameLayout>

源代码实现如下,下面测试例子实现的功能是播放一个基于rtsp协议的局域网摄像头视频:

public classMainActivity extendsActivity {

/** Called when the activity is first created. */private static finalString TAG= "zxq";

privateButton playButton;

privateVideoView videoView;

privateEditText rtspUrl;

privateTextView mTextInfo;

privateHandler mHandler= newHandler();

privateWindowManager mWindowManager;

intindex= 0;

String [] urlArray= newString[] {"rtsp://10.0.149.217:554/stream1"};

@Overridepublic voidonCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

mTextInfo= (TextView)this.findViewById(R.id.toast_info);

mTextInfo.setTextColor(Color.RED);

//mTextInfo.setBackgroundColor(Color.TRANSPARENT);videoView= (VideoView)this.findViewById(R.id.surface_view);

videoView.setOnErrorListener(newOnErrorListener() {

public booleanonError(MediaPlayer mp, intwhat, intextra) {

return false;

}

});

videoView.setOnInfoListener(newOnInfoListener() {

public booleanonInfo(MediaPlayer mp, intwhat, intextra) {

return true;

}

});

videoView.setOnPreparedListener(newOnPreparedListener() {

public voidonPrepared(MediaPlayer mp) {

Log.i(TAG, "onPrepared......");

mHandler.postDelayed(newRunnable() {

@Overridepublic voidrun() {

mTextInfo.setText("显示字幕中...");

mTextInfo.setVisibility(View.VISIBLE);

}

}, 5000); //播放器准备5S后开始显示字幕

mHandler.postDelayed(newRunnable() {

@Overridepublic voidrun() {

mTextInfo.setVisibility(View.GONE);

}

}, 60000); //1分钟后隐藏字幕显示

}

});

}

protected voidonResume() {

super.onResume();

PlayRtspStream(urlArray[0]);

}

private voidPlayRtspStream(String rtspUrl){

videoView.setVideoURI(Uri.parse(rtspUrl));

videoView.requestFocus();

videoView.start();

}

}

显示效果如下图所示:

9fea0910936e7ce8dd95c1d72519afa7.png

另外,有一定要注意布局的选择:

上面的布局如果改成如下

<

VideoView

android

:id=

"@+id/surface_view"

android:layout_width="wrap_content"

android:layout_height="wrap_content"/>

FrameLayout>

那么是显示不出字幕信息的,由于FrameLayout布局的特点是将其子视图从屏幕左上角一个个叠加上去的,此处就是VideoView会覆盖在TextView上面,如果TextView在VideoView下面,那么VideoView是无法"挖洞"来显示其下面的视图内容的.当然也可以用其它布局例如RelativeLayout来设计.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值