美文网首页
Android VideoView

Android VideoView

作者: 小相柳 | 来源:发表于2017-06-08 15:04 被阅读499次

    VideoView,用于播放一段视频媒体,它继承了SurfaceView,位于"android.widget.VideoView",是一个视频控件。

    既然是播放一段视频,那么不可避免的要涉及到一些开始、暂停、停止等操作,VideoView也为开发人员提供了对应的方法,这里简单介绍一些常用的:

    int getCurrentPosition():获取当前播放的位置。
    int getDuration():获取当前播放视频的总长度。
    isPlaying():当前VideoView是否在播放视频。
    void pause():暂停
    void seekTo(int msec):从第几毫秒开始播放。
    void resume():重新播放。
    void setVideoPath(String path):以文件路径的方式设置VideoView播放的视频源。
    void setVideoURI(Uri uri):以Uri的方式设置VideoView播放的视频源,可以是网络Uri或本地Uri。
    void start():开始播放。
    void stopPlayback():停止播放。
    setMediaController(MediaController controller):设置MediaController控制器。
    setOnCompletionListener(MediaPlayer.onCompletionListener l):监听播放完成的事件。
    setOnErrorListener(MediaPlayer.OnErrorListener l):监听播放发生错误时候的事件。
    setOnPreparedListener(MediaPlayer.OnPreparedListener l)::监听视频装载完成的事件。
      上面的一些方法通过方法名就可以了解用途。和MediaPlayer配合SurfaceView播放视频不同,VideoView播放之前无需编码装载视频,它会在start()开始播放的时候自动装载视频。并且VideoView在使用完之后,无需编码回收资源。

    有播放视频时需要获取视频的某一帧的图片进行操作,这时MediaMetadataRetriever类就派上了用场:
    MediaMetadataRetriever mediaMetadataRetriever = new MediaMetadataRetriever();
    mediaMetadataRetriever.setDataSource(dataPath);
    获取一帧的关键代码为:
    Bitmap bitmap = mediaMetadataRetriever.getFrameAtTime(timeMs * 1000, MediaMetadataRetriever.OPTION_CLOSEST);

    public Bitmap getFrameAtTime(long timeUs, int option)
    第一个参数是传入时间,只能是us(微秒)
    第二个参数:
    OPTION_CLOSEST 在给定的时间,检索最近一个帧,这个帧不一定是关键帧。
    OPTION_CLOSEST_SYNC 在给定的时间,检索最近一个同步与数据源相关联的的帧(关键帧)。
    OPTION_NEXT_SYNC 在给定时间之后检索一个同步与数据源相关联的关键帧。
    OPTION_PREVIOUS_SYNC 顾名思义,同上
    这里为了提取我们想要的帧,不使用关键帧,所以用 OPTION_CLOSEST .

    最终的测试结果并不理想,连续取20帧画面,其中真正有效的只有7张,其余都是重复的,原因为即使是使用参数OPTION_CLOSEST,程序仍然会去取指定时间临近的关键帧,如10s-15s总是取同一帧,因此这种方法不可用。
    提高视频的质量或许有效,未尝试。

    补充MediaMetadataRetriever的其他知识
    // 取得视频的总长度(单位为毫秒)
    String time = mediaMetadataRetriever. extractMetadata( MediaMetadataRetriever. METADATA_KEY_DURATION);
    MediaMetadataRetriever主要用来取缩略图。

    相关文章

      网友评论

          本文标题:Android VideoView

          本文链接:https://www.haomeiwen.com/subject/qdzeottx.html