iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Android音视频开发中VideoView怎么使用
  • 792
分享到

Android音视频开发中VideoView怎么使用

2023-06-30 00:06:08 792人浏览 八月长安
摘要

这篇文章主要介绍“Android音视频开发中VideoView怎么使用”,在日常操作中,相信很多人在Android音视频开发中VideoView怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Andro

这篇文章主要介绍“Android音视频开发中VideoView怎么使用”,在日常操作中,相信很多人在Android音视频开发中VideoView怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Android音视频开发中VideoView怎么使用”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

VideoView介绍

之前介绍过使用MediaPlayer+SurfaceView实现播放视频功能。无意间发现官方封装了VideoView组件来实现简单视频播放功能,内部同样是使用MediaPlayer+SurfaceView的形式控制MediaPlayer对视频文件进行播放。使用场景比较简单,适用于只是播放视频的场景,其提供能力有限不太适合使用在调节视频亮度等其他功能。

MediaController

除了播放组件VideoView外还有MediaController组件为视频播放提供播放操作栏功能,可支持视频播放、暂停、快进、快退等功能。另外还提供进度条功能可以拖拽到指定位置进行播放视频。

使用

VideoView封装了MediaPlayer同样也提供了类似于MediaPlayerapi。例如start方法同样是播放视频功能,但调用该方法前最好也是通过设置setOnpreparedListener回调结果来执行,当调用setVideoPath后会主动执行prepareAsync方法。在VideoView内部帮助开发者封装实现了很多功能,其实也能借鉴其内部源码来实现功能更全面功能更完备的自制播放器。

常用Api说明
setVideoPath设置视频资源
start播放
pause暂停
resume重播
seekTo指定位置播放
isPlaying视频是否播放
getCurrentPosition获取当前播放位置
setMediaController设置MediaController
setOnpreparedListener监听视频装载完成事件
// 实例化videoView     videoView = new VideoView(this);Uri uri = Uri.fromFile(new File("sdcard/DCIM","新世纪福音战士24.mp4"));//加载视频资源videoView.setVideoURI(uri);LinearLayout linearLayout = new LinearLayout(this);linearLayout.addView(videoView);setContentView(linearLayout);//设置监听videoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {    @Override    public void onPrepared(MediaPlayer mp) {        //回调成功并播放视频        videoView.start();    }});//创建操作栏MediaController mediaController = new MediaController(this);videoView.setMediaController(mediaController);mediaController.setMediaPlayer(videoView);

Android音视频开发中VideoView怎么使用

源码分析

既然封装了VideoViewMediaController两者组件,在使用过程中也发现了许多之前尝试实现的一些功能看看他们又是如何实现的。

进度显示

MediaController显示时调用show方法内部可以看到一个post(mShowProgress);方法

public void show(int timeout) {    if (!mShowing && mAnchor != null) {        setProgress();        if (mPauseButton != null) {            mPauseButton.requestFocus();        }        disableUnsupportedButtons();        updateFloatingWindowLayout();        mWindowManager.addView(mDecor, mDecorLayoutParams);        mShowing = true;    }    updatePausePlay();    // cause the progress bar to be updated even if mShowing    // was already true.  This happens, for example, if we're    // paused with the progress bar showing the user hits play.    post(mShowProgress);    if (timeout != 0 && !MaccessibilityManager.isTouchExplorationEnabled()) {        removeCallbacks(mFadeOut);        postDelayed(mFadeOut, timeout);    }}

可以看到mShowProgress是一个Runnable,内部会延迟不停调用自己来更新setProgress()setProgress()方法就是读取MediaPlayer播放进度从而更新播放信息。

private final Runnable mShowProgress = new Runnable() {    @Override    public void run() {        int pos = setProgress();        if (!mDragging && mShowing && mPlayer.isPlaying()) {            postDelayed(mShowProgress, 1000 - (pos % 1000));        }    }};

播放尺寸适配

之前自定义实现播放尺寸适配,在VideoView内部直接帮助开发者实现视频播放适配,详细代码可以直接看onMeasure重写。代码大致算法就是通过比较VideoView布局宽高和视频的宽高进行比例比较来重写计算VideoView的宽高。

protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {    //Log.i("@@@@", "onMeasure(" + MeasureSpec.toString(widthMeasureSpec) + ", "    //        + MeasureSpec.toString(heightMeasureSpec) + ")");    int width = getDefaultSize(mVideoWidth, widthMeasureSpec);    int height = getDefaultSize(mVideoHeight, heightMeasureSpec);    if (mVideoWidth > 0 && mVideoHeight > 0) {        int widthSpecMode = MeasureSpec.getMode(widthMeasureSpec);        int widthSpecSize = MeasureSpec.getSize(widthMeasureSpec);        int heightSpecMode = MeasureSpec.getMode(heightMeasureSpec);        int heightSpecSize = MeasureSpec.getSize(heightMeasureSpec);        if (widthSpecMode == MeasureSpec.EXACTLY && heightSpecMode == MeasureSpec.EXACTLY) {            // the size is fixed            width = widthSpecSize;            height = heightSpecSize;            // for compatibility, we adjust size based on aspect ratio            if ( mVideoWidth * height  < width * mVideoHeight ) {                //Log.i("@@@", "image too wide, correcting");                width = height * mVideoWidth / mVideoHeight;            } else if ( mVideoWidth * height  > width * mVideoHeight ) {                //Log.i("@@@", "image too tall, correcting");                height = width * mVideoHeight / mVideoWidth;            }        } else if (widthSpecMode == MeasureSpec.EXACTLY) {            // only the width is fixed, adjust the height to match aspect ratio if possible            width = widthSpecSize;            height = width * mVideoHeight / mVideoWidth;            if (heightSpecMode == MeasureSpec.AT_MOST && height > heightSpecSize) {                // couldn't match aspect ratio within the constraints                height = heightSpecSize;            }        } else if (heightSpecMode == MeasureSpec.EXACTLY) {            // only the height is fixed, adjust the width to match aspect ratio if possible            height = heightSpecSize;            width = height * mVideoWidth / mVideoHeight;            if (widthSpecMode == MeasureSpec.AT_MOST && width > widthSpecSize) {                // couldn't match aspect ratio within the constraints                width = widthSpecSize;            }        } else {            // neither the width nor the height are fixed, try to use actual video size            width = mVideoWidth;            height = mVideoHeight;            if (heightSpecMode == MeasureSpec.AT_MOST && height > heightSpecSize) {                // too tall, decrease both width and height                height = heightSpecSize;                width = height * mVideoWidth / mVideoHeight;            }            if (widthSpecMode == MeasureSpec.AT_MOST && width > widthSpecSize) {                // too wide, decrease both width and height                width = widthSpecSize;                height = width * mVideoHeight / mVideoWidth;            }        }    } else {        // no size yet, just adopt the given spec sizes    }    setMeasuredDimension(width, height);}

到此,关于“Android音视频开发中VideoView怎么使用”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

--结束END--

本文标题: Android音视频开发中VideoView怎么使用

本文链接: https://www.lsjlt.com/news/326869.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Android音视频开发中VideoView怎么使用
    这篇文章主要介绍“Android音视频开发中VideoView怎么使用”,在日常操作中,相信很多人在Android音视频开发中VideoView怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Andro...
    99+
    2023-06-30
  • Android音视频开发之VideoView使用指南
    目录VideoView介绍MediaController使用源码分析进度显示播放尺寸适配VideoView介绍 之前介绍过使用MediaPlayer+SurfaceView实现播放视...
    99+
    2022-11-13
  • Android音视频开发之MediaExtactor怎么使用
    本文小编为大家详细介绍“Android音视频开发之MediaExtactor怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“Android音视频开发之MediaExtactor怎么使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢...
    99+
    2023-06-30
  • Android音视频开发之MediaPlayer使用教程
    目录MediaPlayer简单使用缺陷AndroidMediaPlayer播放器封装状态机编写内部类初始化函数方法和回调小结MediaPlayer Android多媒体框架支持播放提...
    99+
    2022-11-13
  • Android音视频开发之MediaExtactor使用教程
    目录前言MediaExtactor使用MediaExtactor加载音视频文件代码获取轨道代码提取轨道数据信息一些源码细节分析前言 在之前学习如何使用MediaPlayer后,了解到...
    99+
    2022-11-13
  • Android开发中利用VideoView实现一个多媒体视频播放器
    本篇文章给大家分享的是有关Android开发中利用VideoView实现一个多媒体视频播放器,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。1)、SurfaceView在布局文件...
    99+
    2023-05-31
    android videoview roi
  • Android音视频开发之MediaCodec的使用教程
    目录前言MediaCodec编解码流程生命周期接口简介前言 获取到音视频轨道(编解码格式),知道设备支持哪些编解码器,下一步就是创建编解码器去实现数据流的编解码过程了。在Androi...
    99+
    2022-11-13
  • Android中怎么利用MediaPlay播放音频和视频
    Android中怎么利用MediaPlay播放音频和视频,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。实现MediaPlay的基本步骤是创建MediaPlay对象调用setDa...
    99+
    2023-06-04
  • 详解Android App中使用VideoView来实现视频播放的方法
    通过VideoView播放视频的步骤: 1、在界面布局文件中定义VideoView组件,或在程序中创建VideoView组件 2、调用VideoView的如下两个方法来加载指定...
    99+
    2022-06-06
    方法 videoview app Android
  • Qt音视频开发之怎么实现ffmpeg视频旋转显示
    这篇文章主要介绍了Qt音视频开发之怎么实现ffmpeg视频旋转显示的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Qt音视频开发之怎么实现ffmpeg视频旋转显示文章都会有所收获,下面我们一起来看看吧。一、前言用...
    99+
    2023-07-05
  • 使用QT调用FFMPEG库部署到Android设备、完成视频音频应用开发
    系统环境: ubuntu18.04 FFMPEG版本: 4.2.2 测试的Android 平板系统:  Android8.1 第一步: 编译Android设备能使用的FFMPE...
    99+
    2022-06-06
    应用开发 音频应用 ffmpeg Android
  • Android音频开发之SurfaceView的使用详解
    目录SurfaceView不同点双缓冲机制SurfaceHolder使用SurfaceView SurfaceView从源码上看继承自View,但在内部实现上SurfaceView和...
    99+
    2022-11-13
  • Android中怎么使用SoundPool播放音频
    这期内容当中小编将会给大家带来有关Android中怎么使用SoundPool播放音频,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。使用SoundPool播放音效SoundPool类可用于管理和播放应用中的...
    99+
    2023-06-04
  • 使用java怎么将视频转换成音频
    使用java怎么将视频转换成音频?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。spring boot项目pom文件中添加以下依赖<!-- htt...
    99+
    2023-06-14
  • 怎么使用HTML5捕捉音频与视频信息
    本篇内容介绍了“怎么使用HTML5捕捉音频与视频信息”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔...
    99+
    2022-10-19
  • Android开发中怎么自定义一个视频录制功能
    本篇文章为大家展示了Android开发中怎么自定义一个视频录制功能,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Android录制视频MediaRecorder+SurfaceView的使用方法&l...
    99+
    2023-05-31
    android roi
  • Android怎么开发MediaCodec和lamemp3多段音频截取拼接
    这篇文章主要介绍了Android怎么开发MediaCodec和lamemp3多段音频截取拼接的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Android怎么开发MediaCodec和lamemp3多段音频截取拼...
    99+
    2023-06-30
  • 怎么使用Python爬取抖音APP视频
    这篇文章主要讲解了“怎么使用Python爬取抖音APP视频”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么使用Python爬取抖音APP视频”吧!记录一下如何用python爬取app数据,...
    99+
    2023-06-15
  • Qt音视频开发之怎么用ffmpeg实现解码本地摄像头
    这篇文章主要介绍了Qt音视频开发之怎么用ffmpeg实现解码本地摄像头的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Qt音视频开发之怎么用ffmpeg实现解码本地摄像头文章都会有所收获,下面我们一起来看看吧。相...
    99+
    2023-07-05
  • 怎么在Android中使用GSYVideoPlayer播放视频器
    怎么在Android中使用GSYVideoPlayer播放视频器?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。GSYVideoPlayerGSYVideoPla...
    99+
    2023-06-14
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作