首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使用mediaplayer播放视频时,SurfaceView为空白

在这个问答内容中,我们讨论了使用MediaPlayer播放视频时,SurfaceView为空白的问题。

首先,我们需要了解一下MediaPlayer和SurfaceView。

MediaPlayer是一个Android系统中的多媒体播放器,可以用于播放音频和视频文件。它提供了一系列的方法和事件,可以方便地控制播放、暂停、停止、调整音量等操作。

SurfaceView是Android系统中的一个视图组件,可以用于显示图形和视频内容。它提供了一个Surface,可以将视频内容直接绘制到Surface上,从而实现高效的视频播放。

当使用MediaPlayer播放视频时,如果SurfaceView为空白,可能是由于以下原因:

  1. MediaPlayer没有正确设置视频播放源。需要检查MediaPlayer的setDataSource()方法是否正确设置了视频文件路径或网络地址。
  2. SurfaceView没有正确设置。需要检查SurfaceView的宽度和高度是否正确设置,以及是否正确添加到了视图树中。
  3. MediaPlayer的播放状态没有正确设置。需要检查MediaPlayer的prepare()或prepareAsync()方法是否正确调用,以及是否正确设置了OnPreparedListener事件。
  4. 视频文件本身可能存在问题,需要检查视频文件的编码格式、分辨率等是否符合要求。

为了解决这个问题,我们可以采取以下措施:

  1. 确保MediaPlayer的setDataSource()方法正确设置了视频文件路径或网络地址。
  2. 确保SurfaceView的宽度和高度正确设置,并且已经添加到视图树中。
  3. 确保MediaPlayer的prepare()或prepareAsync()方法正确调用,并且已经正确设置了OnPreparedListener事件。
  4. 检查视频文件本身是否存在问题,可以使用其他播放器进行测试。

总之,当使用MediaPlayer播放视频时,如果SurfaceView为空白,可能是由于多种原因导致的。我们需要仔细检查代码和视频文件,找到问题所在并进行修复。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

安卓基础干货(十):安卓多媒体编程的学习

图片、音乐、视频。 计算机表示图形的方式 1、bmp 以高质量保存所有类型的图片,用于计算机。 计算机使用像素点表示图形,每个像素点都是一个颜色,24位深度(24bit)。...RGB ARGB 32 应用程序在启动时系统为它创建一个进程,系统为每个进程创建dalvik虚拟机(模拟器设置的VM Heap),当图片的大小大于虚拟机的堆内存空间时,就内存溢出(内存泄露);...surfaceview(重点) surfaceview表面视图 双缓冲区:使用两个线程协调工作; surfaceview 重量级空间,当画面可见时,双缓冲器被创建,占用较高的cpu和内存资源。...,等待数据资源准备完成后才开始播放,用于播放本地的音视频文件 //mediaPlay.prepare(); //使用异步式准备方法...,使用子线程等待数据资源准备完成后才开始播放,用于播放网络上的音视频文件 mediaPlay.prepareAsync();

1.4K10
  • 【Android 多媒体开发】 MediaPlayer 网络视频播放器

    声明周期对应 : SurfaceView 可见的时候 Surface 被创建, SurfaceView 不可见时 Surface 销毁, Surface 创建销毁时机回调方法 SurfaceCreated...SurfaceView 使用流程 (1) 在布局文件中使用 SurfaceView 组件  布局文件 : 在布局文件中使用 SurfaceView /> 组件; -- 示例 :  SurfaceView...获取 SurfaceView : 使用 findViewById() 方法从布局文件中获取 SurfaceView 组件对象; surface_view = (SurfaceView) findViewById...为 MediaPlayer 设置错误监听器, 缓冲进度监听器, 播放完毕监听器, 准备完毕监听器 * c. 未 MediaPlayer 设置数据源 * d....(); /* 打印播放视频的时长 */ System.out.println("视频播放长度 : " + mediaPlayer.getDuration());

    2.9K20

    android视频系列:视频解码篇--android上视频播放的实现

    我们来看看,Android为我们提供了哪些对象,可以让我们做视频的播放。 Android播放视频 下面我们介绍3种在Android上播放视频的方法。 1. 使用VideoView播放视频 ?...看看它的内部实现,我们发现,解码使用了MediaPlayer,显示使用了SurfaceView。 那么,自己直接用SurfaceView和MediaPlayer,要怎么做? 2....使用MediaPlayer和SurfaceView播放视频 ? Android系统,已经在底层我们打通了一条MediaPlayer到SurfaceView的数据通路,那就是Surface。...使用MediaPlayer和GLSurfaceView播放视频 GLSurfaceView继承自SurfaceView,它实现了把opengl的渲染结果,绘制到给定的Surface里,进而可以显示在屏幕上...如果对播放有更多的控制需求,可以使用MediaPlayer和SurfaceView。如果要对每一帧图像做处理,可以使用MediaPlayer和GLSurfaceView。

    4.1K131

    Android实现视频播放的3种实现方式

    Android提供了常见的视频的编码、解码机制。使用Android自带的MediaPlayer、MediaController等类可以很方便的实现视频播放的功能。支持的视频格式有MP4和3GP等。...: 加载指定的视频文件 建立VideoView和MediaController之间的关联,这样就不需要自己去控制视频的播放、暂停等。...调用MediaPlayer对象的setDisplay(SurfaceHolder sh)将所播放的视频图像输出到指定的SurfaceView组件。...调用MediaPlayer对象的prepareAsync()或prepare()方法装载流媒体文件 调用MediaPlayer对象的start()、stop()和pause()方法来控制视频的播放。...实现效果如下所示: 3、MediaPlayer+SurfaceView+MediaController 第二种实现方式使用的是自定义控件,MediaPlayer+SurfaceView也可以使用系统自带的

    4.8K30

    surfaceView+MediaPlayer的问题

    在没有准备好之前,可以设置他在不停的加载把 5.播放失败,或者直接闪屏的原因之一:就是从一个视频activity或者view到另外一个视频view的播放,如果时间比较紧凑,可能会立即失败,或者闪退,这里面的原因就是...mediaPlayer还没有来得及释放,也有可能是surfaceView还没有完成销毁,总之存在两个对象,肯定就失败了,有人说这个原始Android设备的问题,如果这个设备使用的操作系统把第三方厂商给修改了...,可能会出现这个元,如果是原生态的可能就不会,解决方法就是 第二个视频延迟播放,或者跳转的时候稍微延迟,或者在播放视频的时候弹出正在加载,让那个进度条延迟一秒的旋转时间,再播放,应该可以解决这个问题【http...播放时间, 7.mediaPlayer如果多次销毁,又多次创建,可能也会每次都去分配一定的空间,代价也是蛮大的,但是安全,不会出现为null的情况 8.这个时候如果是播放同一个视频,这里也会造成卡顿的原因...surfaceView的相关概念: MediaPlayer主要用于播放音频,它是没有提供输出图像的输出界面,这时我们就用到了SurfaceView控件,将它与MediaPlayer结合起来,就能达到了视频的输出了

    2.1K20

    使用Android MediaPlayer播放媒体文件

    这个方法有多个重载版本,适应于不同的情况,既可以对使用文件路径作为参数,也可以使用描述文件位置的Uri作为参数 prepare() 在开始播放之前调用这个方法完成媒体文件的准备工作 start() 开始播放媒体文件文件...pause() 暂停播放 reset() 将MediaPlayer对象重置为刚刚被创建的状态 seekTo(int msec) 从指定的位置开始播放视频,参数单位:秒 stop() 停止播放音频,调用之后...getDuration() 获得载入的媒体文件的时长 接下来仍然以一个小例子来看一下使用MediaPlayer对象播放媒体文件,新建一个Android工程: activity_main.xm:...,最后是一个SurfaceView组件用于作为视频文件的输出控件,后面会介绍。...最后,其实播放视频也可以使用VideoView控件,这个控件将MediaPlayer类封装在内部,是一个视频专用播放控件,有兴趣的小伙伴可以自己尝试一下。

    2.7K10

    多媒体开发

    学习内容 Ø 使用MediaPlayer播放音乐 Ø 使用SoundPool播放音效 Ø 使用VideoView播放视频 Ø 使用MediaRecorder录制音频 Ø 使用Camera拍照 能力目标...Ø 掌握如何使用MediaPlayer播放音乐 Ø 掌握如何使用SoundPool播放音效 Ø 掌握如何使用VideoView播放视频 Ø 掌握如何使用MediaRecorder录制音频 Ø 了解如何使用...其中在btnStart1的事件处理方法中,我们使用到了onCompletion事件,这个事件会在音乐播放完时被触发,此处我们在音乐播放完后释放了音频资源,以便其它应用程序可以使用这个资源。...然后运行程序,当我们单击播放音乐的按钮时,音乐就会播放起来,当我们单击停止和暂停按钮时也会实现相应的功能。...2:自定义视频播放器 ​训练技能点​ Ø 使用VideoView播放视频 ​需求说明​ 模拟UC影音自己编写一个视频播放器软件,要求: (1) 实现本地视频播放的功能。

    7810

    Android-VideoView中的一些问题

    会导致Surface绘制不及时,会有残留 多个VideoView同时播放的时候,在SurfaceFlinger支持不好的手机上,会出现下一个SurfaceView的某一帧会显示在上一个SurfaceView...上 解决办法 使用TextureView替换SurfaceView实现VideoView,因为TextureView是直接继承View的,并且在ListView中滑动的时候,也不会在滑动的时候,有残留(...而我们在ListView的每个卡片中,都有可能出现视频,而且需要自动播放,由于没有时间做视频先下载,再播放,所以选择的是Android自带的流播放。会一段一段的将视频先读到缓冲区,再播放。...而且当视频卡片在滑出屏幕之后,需要把视频暂停,在不可见的时候不进行播放。节省系统资源,并且节省用户流量。...GrafficBuffer分配Surface失败,从而MediaPlayer会回调onError中,显示视频不能播放。

    2.8K30

    视频无缝续播的一些解决方案

    对于音视频的无缝续播主要是两个方面: 一个是界面切换时的无缝续播,另外一个切换视频播放源时的无缝续播。...界面切换无缝续播 对于界面切换时的无缝续播,业界大致有两种解决方案: 其中一种解决方案是替换播放器渲染的surfaceView的方式,另外一种解决方案是使用移动播放器View的方式,也就是将播放器的渲染...对于使用切换surfaceView的原理是解码器动态关联不同的渲染视图(RenderView),比如使用MediaPlayer动态关联SurfaceView,就如同一个电脑主机不断连接不同的显示器。...比如有这样的一个需求,一个RecyclerView的视频播放列表,点击跳转到了详情页的时候就把播放器的surfaceView切换到了详情页的surfaceView,那么当详情页播放完毕之后,当用户点击返回按钮时...至于使用移动View的方式进行界面无缝续播的方案,可能会导致View缺失的问题,导致播放界面可能会出现空白,特别是列表播放的需求情景。

    2.4K10

    surfaceview的生命周期

    界面布局和上一节的mp3基本一样,播放视频需要一个控件SurfaceView SurfaceView控件在内部维护了一个双缓冲的技术,使用两个线程进行解析帧和显示到界面上 在Activity的onCreate...SurfaceHolder的方式播放,参数:SurfaceHolder对象,调用SurfaceView对象的getHolder()方法来得到 调用MediaPlayer对象的prepareAsync()...对象,调用SurfaceView对象的getHolder()方法 调用SurfaceHolder对象的addCallback()方法,添加回调,参数:Callback的接口类型,使用匿名内部类来实现接口...,重写以下方法 surfaceDestroyed(),销毁的时候 判断MediaPlayer不为空并且MediaPlayer.isPlaying()为真 把进度保存在Activity的成员变量currentPosition...里面,调用MediaPlayer对象的getPosition() 停止掉播放 surfaceCreated(),创建的时候 调用播放代码,通过传参把currentPosition传递过去,在准备完成的回调中

    1.3K30

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

    ,可以显示封面缩略图 播放时,如果还没有本地缓存,那么先进行下载 下载过程中,显示圆型区域进度效果 下载后,播放完毕后可以循环播放 播放已经播放过的,是具备本地缓存的,也就是既能播放网络,也能播放本地...2,隐藏的 低耗电量 低内存占用 无延迟图与视频切换 低耦合,高内聚,几行代码接入,一共3个类 解析 直观的功能点,几乎就是和新版微信的一样,从朋友圈点击一个视频,然后进入到一个 Activity 页面进行加载以及播放...因为采用的是 SurfaceView 而不是 TextureView,图与视频切换的切换延迟也是这个原因。 在你的 Activity 中这样使用 ?...这样就会以 id 为 activity_main 的 Relativelayout 为父容器装载。 因为要避免内存泄露,所以你还需要做完下面的一些步骤,不会超过6行代码。 ?...: surfaceView + mediaPlayer surfaceView 用作显示,mediaPlayer 用来解码 两者关系: mediaPlayer 绑定 surfaceView。

    1.1K50

    Android多媒体之视频播放器(基于MediaPlayer)

    零、前言 对于视频的播放,Android有内置的VideoView,用起来非常简单 本篇从自定义VideoView来封装MediaPlayer开始说起 <VideoView android...和MediaPlayer来播放视频 [2].使用媒体库的ContentProvider查询手机中视频,并列表显示 [3].更改视频的宽高以及适应横竖屏切换 [4].自定义控制界面以及倍速播放 [5].视频封面图...(视频帧)的获取 [6].播放网络视频及seekBar的第二进度和缓存进度监听 ---- 一、简易版:MediaPlayer + SurfaceView + MediaController 角色: MediaPlayer...> * 时间:2019/3/8/008:12:43 * 邮箱:1981462002@qq.com * 说明:视频播放:MediaPlayer + SurfaceView + MediaController...* 当使用SurfaceView时,必须从运行SurfaceView窗口的同一线程调用它。

    5.5K52

    Android中如何使用OpenGL播放视频

    其中播放网络视频才需要解协议,直接播放本地视频是不需要这一步的 解协议:将流媒体协议的数据解析为相应标准的封装格式数据。...,同步解码出来的视频和音频数据,并发送到系统的显卡和声卡中进行播放 MediaPlayer生命周期 Android系统中,播放视频可以使用MediaPlayer来完成上面的播放流程,常用的VideoView...MediaPlayer的使用必须遵循节点之间的状态转换,不然很容易出现IllegalStateException异常 MediaPlayer的使用 MediaPlayer的构造分为两种: 第一种是直接new...使用MediaPlayer的时候,需要一个surface来消费数据,我们可以使用SurfaceView或TextureView 使用SurfaceView的时候,绑定到SurfaceHolder即可...播放视频 当我们需要利用OpenGL播放视频的时候,可以使用MediaPlayer+GLSurfaceView的组合,因为GLSurfaceView已经创建好了EGL环境,方便快速引入 整个流程的核心在于

    2.3K20

    实习杂记(21):LocalBroadcastManager的使用、优点在哪里?

    也可以解决这个问题,他可以让类对象自己发自己收,其他的实例对象复本也可以收到,然后让他做自己的操作即可, 下面举个例子就是:需要在  ListView中放视频,每个item都是一个视频,但是只能有一个同时在播放...,并且用户点击了一个播放没有关闭的情况下,继续点击另外的播放,需要自动把上面的暂停了,并且保存相关状态(记录位置,暂停进度条,显示暂停图标等等), 在这样的背景下,使用LocalBroadCastManager...是可以解决问题的, 下面是item那个view自身需要做的处理类的相关代码,这份代码只是demo,而且我没有处理相关状态,只是以释放和播放来解决问题,请不要直接使用。...其实使用这种方式比  单利模式,static变量,同步方法要好些,因为资源最后还是  两份直接轮换,一个current和一个next,双层机制, 音乐播放的时候是使用当前的mediaPlayer和预加载的...mediaPlayer, 大视频的无缝播放也是采用两个mediaPlayer来实现的, 而且这种方式附带的在处理相关属性的过程中将会更加的独立,自己处理自己的事多好,如果使用static,判断条件实在太多

    1.2K30
    领券