文档章节

android开发笔记之多媒体—MediaPlayer + SurfaceView播放视频

Mr_Nice
 Mr_Nice
发布于 2016/05/22 20:02
字数 442
阅读 14
收藏 0
点赞 2
评论 0

前面我们讲了用VideoView来播放视频,这里再介绍一种方式:

MediaPlayer + SurfaceView 来播放视频,我们都知道:

MediaPlayer 是用来播放音频的

SurfaceView 是用来绘制界面的

所以这里介绍它们结合起来就能播放视频了,话不多说

使用步骤:

  1)在界面的布局文件中定义SurfaceView组件。和播放按钮

  2)创建MediaPlayer对象,加载指定的视频文件

  3)setDisplay()用来指定MediaPlay播放的视频图像显示位置
 player.setDisplay(surfaceView.getHolder());

  4)调用MediaPlayer的start,stop,pause方法控制视频的播放

最后如果是从SD卡获取视频的话,还需要添加权限:

    <uses-permission android:name="android.permission.MEDIA_CONTENT_CONTROL"/>
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

效果图:

这里写图片描述

核心代码:

public class MainActivity extends Activity {

    private SurfaceView surfaceView;
    private MediaPlayer player;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        surfaceView = (SurfaceView) findViewById(R.id.surfaceView);
        //创建MediaPlayer对象
        player = new MediaPlayer();
        try {
            //加载视频文件
            player.setDataSource("/sdcard/areyouok.3gp");
            //因为要让视频暂停之后再播放的话,从Paused状态回到Started状态,可以直接通过Start()方法回去
            //不需要经过prepare()方法,所以把它放在onCreate方法中,MediaPlayer的状态图忘了的话再去
            //看一下将MediaPlayer这篇文章
            player.prepare();
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        } catch (SecurityException e) {
            e.printStackTrace();
        } catch (IllegalStateException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

    public void start(View view){
        try {
            player.start();
            //指定MediaPlay播放的视频图像显示位置
            player.setDisplay(surfaceView.getHolder());
        } catch (IllegalStateException e) {
            e.printStackTrace();
        }
    }
    public void pause(View view) {
        player.pause();
    }
}

布局文件:

<LinearLayout 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:orientation="vertical" tools:context="com.example.mediaplayerwatch.MainActivity" >

    <Button  android:id="@+id/btn_start" android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="start" android:text="开始" />
    <Button  android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="pause" android:text="暂停" />
    <SurfaceView  android:id="@+id/surfaceView" android:layout_width="match_parent" android:layout_height="match_parent" />

</LinearLayout>

© 著作权归作者所有

共有 人打赏支持
Mr_Nice
粉丝 0
博文 47
码字总数 39947
作品 0
广州
openGL+GLSurfaceView和MediaPlayer+GLSurfaceView与视频

Android MediaPlayer+SurfaceView播放视频(附Demo)- http://blog.csdn.net/junzia/article/details/52704129 在播放网络上的视频流时,Android原生的MediaPlayer支持两种协议,HTTP和RTSP,...

shareus ⋅ 2017/09/23 ⋅ 0

android 之MediaPlayer播放音频与SoundPool的区别

区别 说到音频,在android中有两种方法可是实现:SoundPool以及MediaPlaer。通过这两个类都可以实现在android设备上播放音频。 那这两个类有什么区别呢? SoundPool SoundPool适合一些短促、...

蛋蛋松 ⋅ 2017/11/03 ⋅ 0

直播,音视频编码器和解码器(EasyDarwin)-Android

使用摄像头采集视频数据,并通过MediaCodec进行H264编码,之后打包成RTSP格式并上传的。 TextuewView也提供了一个setTransform方法,该方法接收一个matrix参数,使用该参数对当前的渲染内容进...

shareus ⋅ 05/18 ⋅ 0

通过流媒体地址实现流媒体视频播放

@梅公子 你好,想跟你请教个问题:我现在只有流媒体地址,android在ecplise中怎么开发实现播放 ?videoview,mediaplayer+surfaceview播放本地视频都是可以的,直接播放的给他视频地址。现在...

SunnyAngel ⋅ 2014/11/21 ⋅ 2

Android多人视频聊天应用的开发(三)多人聊天

在上一篇《Android多人视频聊天应用的开发(二)一对一聊天》中我们学习了如何使用声网Agora SDK进行一对一的聊天,本篇主要讨论如何使用Agora SDK进行多人聊天。主要需要实现以下功能: 1、...

东风玖哥 ⋅ 04/17 ⋅ 0

通过FFmpeg解码和OpenGL的YUV转RGB实现Android视频播放

前言 在我的博文 https://blog.csdn.net/ericbar/article/details/80506390 中,我们在Android平台上,实现了通过FFmpeg在native(C/C++)层进行视频解码,并通过OpenGL实现了硬件渲染工作,...

ericbar ⋅ 05/30 ⋅ 0

仿:Android - 微信 - 朋友圈 - 小视频播放,多4句废话算我输

作者:林冠宏 / 指尖下的幽灵 掘金:juejin.im/user/587f0d… 博客:www.cnblogs.com/linguanh/ GitHub : github.com/af913337456… 为了您的直观体验,请务必看完下面 gif 图,源码 gitHub...

林冠宏 ⋅ 2017/04/26 ⋅ 0

Android各种视频播放器使用

视频播放器在App是很常见的,有哪些视频播放器呢?具体情况该用哪款呢?这里我总结了常用的视屏播放Videoview、mediaplayer+surfaceview、vitamio、jcplayer的使用方法并写了各自的播放示例。...

翻滚吧李博 ⋅ 2017/12/04 ⋅ 0

说说 Android 中如何操作音频与视频文件

1 音频 在 Android 中播放音频文件用的是 MediaPlayer 类,它提供了一些较为常用的控制方法。 工作流程如下: 创建 MediaPlayer 对象。 设置音频文件路径。 进入准备状态。 开始播放音频。 ...

deniro ⋅ 06/03 ⋅ 0

android开发中音频的使用

当进行android开发或游戏开发时,常常会涉及背景音乐的播放,以及短音效的使用 1.当涉及到背景音乐等长音乐播放时通常使用MediaPlayer类进行播放操作 MediaPlayer类常用方法: 1.public sta...

qq_38555940 ⋅ 05/28 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

vue-cli是什么?

vue-cli是什么? vue-cli 是vue.js的脚手架,用于自动生成vue.js+webpack的项目模板,分为vue init webpack-simple 项目名 和vue init webpack 项目名 两种。 当然首先你的安装vue,webpack...

韦姣敏 ⋅ 17分钟前 ⋅ 0

12c rman中输入sql命令

12c之前版本,要在rman中执行sql语句,必须使用sql "alter system switch logfile"; 而在12c版本中,可以支持大量的sql语句了: 比如: C:\Users\zhengquan>rman target / 恢复管理器: Release 1...

tututu_jiang ⋅ 23分钟前 ⋅ 0

java 线程池

概述 减少了创建和销毁线程的次数,每个工作线程都可以被重复利用,可执行多个任务 可以根据系统的承受能力,调整线程池中工作线线程的数目,防止因为因为消耗过多的内存,而把服务器累趴下(...

轨迹_ ⋅ 28分钟前 ⋅ 0

Nginx的https配置记录以及http强制跳转到https的方法梳理

Nginx的https配置记录以及http强制跳转到https的方法梳理 一、Nginx安装(略) 安装的时候需要注意加上 --with-httpsslmodule,因为httpsslmodule不属于Nginx的基本模块。 Nginx安装方法: ...

Yomut ⋅ 40分钟前 ⋅ 0

SpringCloud Feign 传递复杂参数对象需要注意的地方

1.传递复杂参数对象需要用Post,另外需要注意,Feign不支持使用GetMapping 和PostMapping @RequestMapping(value="user/save",method=RequestMethod.POST) 2.在传递的过程中,复杂对象使用...

@林文龙 ⋅ 41分钟前 ⋅ 0

如何显示 word 左侧目录大纲

打开word说明文档,如下图,我们发现左侧根本就没有目录,给我们带来很大的阅读障碍 2 在word文档的头部菜单栏中,切换到”视图“选项卡 3 然后勾选“导航窗格”选项 4 我们会惊奇的发现左侧...

二营长意大利炮 ⋅ 45分钟前 ⋅ 0

智能合约编程语言Solidity之线上开发工具

工具地址:https://ethereum.github.io/browser-solidity/ 实例实验: 1.创建hello.sol文件 2.调试输出结果

硅谷课堂 ⋅ 45分钟前 ⋅ 0

ffmpeg 视频格式转换

转 Mp4 格式 #> ffmpeg -i input.avi -c:v libx264 output.mp4#> ffmpeg -i input.avi -c:v libx264 -strict -2 output.mp4#> ffmpeg -i input.avi -c:v libx264 -strict -2 -s 1......

Contac ⋅ 57分钟前 ⋅ 0

VCS仿真生成vpd文件(verilog)

VCS仿真生成vpd文件(verilog): https://www.cnblogs.com/OneFri/p/5987673.html SYNOPSYS VCS常用命令使用详解 https://blog.csdn.net/hemmingway/article/details/49382551 DVE是synopsys公......

whoisliang ⋅ 今天 ⋅ 0

Spring Boot启动配置原理

几个重要的事件回调机制 配置在META-INF/spring.factories ApplicationContextInitializer SpringApplicationRunListener 只需要放在ioc容器中 ApplicationRunner CommandLineRunner 启动流程......

小致dad ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部