VideoView播放视频

本文介绍了一个基于Android平台的视频播放应用开发实例。通过使用VideoView组件,文章详细展示了如何设置视频源、添加媒体控制器及启动播放等功能。此示例为初学者提供了实践指导。


在我们的主页面中VideoViewActivity

布局中

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="alice.bw.com.day03surfaceview2.videoview_demo.VideoViewActivity">
    <VideoView
        android:id="@+id/video_view_id"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />


</RelativeLayout>


在主页面中



public class VideoViewActivity extends AppCompatActivity {
    private VideoView mVv;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_video_view);
         mVv = (VideoView) findViewById(R.id.video_view_id);
//设置播放的地址
                mVv.setVideoURI(Uri.parse(path));
                //添加媒体控制器 -------- 自带的进度条
                mVv.setMediaController(new MediaController(this));
                //开始播放视频
                mVv.start();
    
    }


 

### VideoView 播放视频时黑屏和加载失败的解决方案 #### 使用自定义视图替代默认背景 为了改善用户体验,在`VideoView`加载期间可以设置一个占位符图片来代替黑色屏幕。这可以通过创建一个带有ImageView作为占位符布局文件并将其应用到包含`VideoView`的容器上来实现。 ```xml <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/video_container" android:layout_width="match_parent" android:layout_height="wrap_content"> <!-- Placeholder image --> <ImageView android:id="@+id/place_holder_image" android:layout_width="match_parent" android:layout_height="match_parent" android:scaleType="centerCrop" android:src="@drawable/default_placeholder"/> <!-- The actual video view --> <VideoView android:id="@+id/videoview" android:layout_width="match_parent" android:layout_height="match_parent"/> </FrameLayout> ``` 当媒体准备完毕后隐藏该图像: ```java videoView.setOnPreparedListener(mp -> { placeHolderImage.setVisibility(View.GONE); }); ``` 这种方法不仅解决了初始黑屏问题,还提高了用户的视觉感受[^2]。 #### 设置缓冲监听器处理加载超时情况 对于可能出现的加载失败状况,建议添加对MediaPlayer.BufferingUpdate事件的支持,以便能够及时响应长时间未能成功获取数据的情况,并向用户提供反馈信息。 ```java videoView.setOnBufferingUpdateListener((mp, percent) -> { if (percent == 0 && !isFirstTime){ Toast.makeText(context,"Loading...",Toast.LENGTH_SHORT).show(); isFirstTime = true; } }); // Reset flag when playback starts or stops. videoView.setOnCompletionListener(mp->isFirstTime=false); videoView.setOnErrorListener((mp, what, extra)->{ isFirstTime=false; return false; // Let the default error handler handle it. }); ``` 通过这种方式可以在遇到网络不稳定或其他异常情况下给用户提示正在尝试重新连接或告知他们发生了错误[^4]。 #### 预加载机制提前下载部分资源 如果应用程序允许的话,考虑在网络条件较好的时候预先缓存一部分即将播放的内容。这样即使后续网络质量下降也能保证流畅观看而不至于完全卡住等待加载完成。 ```java Uri uri = Uri.parse(videoUrl); MediaMetadataRetriever retriever = new MediaMetadataRetriever(); retriever.setDataSource(getApplicationContext(),uri); byte[] frameAtTime = retriever.getEmbeddedPicture(); // Get thumbnail data from metadata. Bitmap bitmap = BitmapFactory.decodeByteArray(frameAtTime,0,frameAtTime.length); placeHolderImage.setImageBitmap(bitmap); // Use as placeholder until real content loads. ``` 此代码片段展示了如何利用`MediaMetadataRetriever`类提取视频缩略图用于预览目的,从而减少首次启动时的空白时间[^3]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值