`
zhangyf1987hb
  • 浏览: 80269 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Android SurfaceView播放视频有声音无图像问题

阅读更多

在用SurfaceView播放视频时,如果处理不当,会出现有声音无图像的问题,主要的原因是,在调用MediaPlayer开始播放视频时,SurfaceView却还未创建成功,解决办法是判断SurfaceView创建成功后再调用MediaPlayer的播放,通过surfaceHolder的addCallBack()方法来监听surfaceCreated。

 

以下是2段源码,第1段有声音无图像,第2段有声音有图像

 

源码1:有声音无图像

[html] view plaincopy
  1. import android.app.Activity;  
  2. import android.media.AudioManager;  
  3. import android.media.MediaPlayer;  
  4. import android.os.Bundle;  
  5. import android.view.SurfaceHolder;  
  6. import android.view.SurfaceView;  
  7.   
  8. public class MainActivity extends Activity  
  9. {     
  10.     private SurfaceView surfaceView = null ;  
  11.     private SurfaceHolder surfaceHolder = null ;  
  12.     private MediaPlayer mp = null ;  
  13.   
  14.     /** Called when the activity is first created. */  
  15.     @Override  
  16.     public void onCreate(Bundle savedInstanceState)    
  17.     {  
  18.         super.onCreate(savedInstanceState);  
  19.         surfaceView = new SurfaceView(this);  
  20.         surfaceHolder = surfaceView.getHolder();          
  21.         surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);  
  22.         setContentView(surfaceView);  
  23.           
  24.         mp = new MediaPlayer();          
  25.         mp.setAudioStreamType(AudioManager.STREAM_MUSIC);  
  26.         mp.setDisplay(surfaceHolder);  
  27.         try {  
  28.             mp.setDataSource("/sdcard/DownAndPlay/xyj.mp4");  
  29.         } catch (Exception e) {  
  30.             // TODO Auto-generated catch block  
  31.             e.printStackTrace();  
  32.         }  
  33.         try {  
  34.             mp.prepare();  
  35.         } catch (Exception e) {  
  36.             // TODO Auto-generated catch block  
  37.             e.printStackTrace();  
  38.         }  
  39.         mp.start();         
  40.   
  41.     }  
  42. }  


 

 

源码2:有声音有图像

[html] view plaincopy
  1. import android.app.Activity;  
  2. import android.media.AudioManager;  
  3. import android.media.MediaPlayer;  
  4. import android.os.Bundle;  
  5. import android.view.SurfaceHolder;  
  6. import android.view.SurfaceView;  
  7.   
  8. public class MainActivity extends Activity implements SurfaceHolder.Callback  
  9. {     
  10.     private SurfaceView surfaceView = null ;  
  11.     private SurfaceHolder surfaceHolder = null ;  
  12.     private MediaPlayer mp = null ;  
  13.   
  14.     /** Called when the activity is first created. */  
  15.     @Override  
  16.     public void onCreate(Bundle savedInstanceState)    
  17.     {  
  18.         super.onCreate(savedInstanceState);  
  19.         surfaceView = new SurfaceView(this);  
  20.         surfaceHolder = surfaceView.getHolder();          
  21.         surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);  
  22.         surfaceHolder.addCallback(this);  
  23.         setContentView(surfaceView);  
  24.           
  25.   
  26.     }  
  27.   
  28.     @Override  
  29.     public void surfaceChanged(SurfaceHolder holder, int format, int width,  
  30.             int height) {  
  31.         // TODO Auto-generated method stub  
  32.           
  33.     }  
  34.   
  35.     @Override  
  36.     public void surfaceCreated(SurfaceHolder holder) {  
  37.         // TODO Auto-generated method stub  
  38.         mp = new MediaPlayer();          
  39.         mp.setAudioStreamType(AudioManager.STREAM_MUSIC);  
  40.         mp.setDisplay(surfaceHolder);  
  41.         try {  
  42.             mp.setDataSource("/sdcard/DownAndPlay/xyj.mp4");  
  43.         } catch (Exception e) {  
  44.             // TODO Auto-generated catch block  
  45.             e.printStackTrace();  
  46.         }  
  47.         try {  
  48.             mp.prepare();  
  49.         } catch (Exception e) {  
  50.             // TODO Auto-generated catch block  
  51.             e.printStackTrace();  
  52.         }  
  53.         mp.start();  
  54.     }  
  55.   
  56.     @Override  
  57.     public void surfaceDestroyed(SurfaceHolder holder) {  
  58.         // TODO Auto-generated method stub  
  59.           
  60.     }  
  61.   
分享到:
评论

相关推荐

    Android移动开发-使用MediaPlayer和SurfaceView播放视频的实现

    使用VideoView播放视频简单、方便,但有些早期的开发者还是更喜欢使用MediaPlayer来播放视频,但由于MediaPlayer主要用于播放音频,因此它没有提供图像输出界面,此时就需要借助于SurfaceView来显示MediaPlayer播放...

    android开发揭秘PDF

    7.3 播放视频 7.4 录制歌曲 7.5 相机设置 7.6 闹钟设置 7.7 铃声设置 7.8 小结 第8章 网络与通信 8.1 网络通信基础 8.1.1 无线网络技术 8.1.2 Android网络基础 8.2 HTTP通信 8.2.1 HttpURLConnection接口 8.2.2 ...

    android开发资料大全

    android 播放gif图片 DEMO Android图片浏览之源码 图片浏览器android源码下载 Android瀑布流加载图片效果实例 Android中利用ViewPager实现视图切换 Android泡泡聊天界面的源码实现 android 实现EditText震动效果 ...

    《Android应用开发揭秘》附带光盘代码.

     7.3 播放视频  7.4 录制歌曲  7.5 相机设置  7.6 闹钟设置  7.7 铃声设置  7.8 小结  第8章 网络与通信  8.1 网络通信基础  8.1.1 无线网络技术  8.1.2 Android网络基础  8.2 HTTP通信  8.2.1 ...

    Android代码-Android相机预览拍照录像滤镜详解

    本系列会包括Android Camera预览,拍照,视频录制,播放,滤镜及渲染等,还会对相机系统原理做深入分析。 一、相机预览 序号 项目名称 内容简介 1 GLSurfacePreview GLSurfaceView OpenGL相机预览,直接绘制...

    《Android应用开发揭秘》源码

     7.3 播放视频  7.4 录制歌曲  7.5 相机设置  7.6 闹钟设置  7.7 铃声设置  7.8 小结  第8章 网络与通信  8.1 网络通信基础  8.1.1 无线网络技术  8.1.2 Android网络基础  8.2 HTTP通信  8.2.1 ...

    Android应用开发揭秘pdf高清版

    7.3 播放视频 7.4 录制歌曲 7.5 相机设置 7.6 闹钟设置 7.7 铃声设置 7.8 小结 第8章 网络与通信 8.1 网络通信基础 8.1.1 无线网络技术 8.1.2 Android网络基础 8.2 HTTP通信 8.2.1 HttpURLConnection接口 8.2.2 ...

    Android使用MediaPlayer和TextureView实现视频无缝切换

    比如广告播放,每个视频15秒,视频之间切换的时候,性能不太好的机器可能会黑屏一段时间,体验不太好,接下来我们就是要解决这个黑屏问题。 解决方案 使用两个surfaceView方式,经过测试不行 使用一个MediaPlayer,...

    疯狂Android讲义源码

     SurfaceView播放视频 436  11.2 使用MediaRecorder录制  音频 439  11.3 控制摄像头拍照 442  11.3.1 通过Camera进行拍照 442  11.3.2 录制视频短片 446  11.4 本章小结 450  第12章 OpenGL与3D应用开发 ...

    疯狂Android讲义.part2

    SurfaceView播放视频 436 11.2 使用MediaRecorder录制 音频 439 11.3 控制摄像头拍照 442 11.3.1 通过Camera进行拍照 442 11.3.2 录制视频短片 446 11.4 本章小结 450 第12章 OpenGL与3D应用开发 451 12.1 3D图像与...

    疯狂Android讲义.part1

    SurfaceView播放视频 436 11.2 使用MediaRecorder录制 音频 439 11.3 控制摄像头拍照 442 11.3.1 通过Camera进行拍照 442 11.3.2 录制视频短片 446 11.4 本章小结 450 第12章 OpenGL与3D应用开发 451 12.1 3D图像与...

    疯狂Android讲义(第2版)源代码 第6章~第9章

    11.1、音频和视频的播放:MediaPlayer; SoundPool; VideoView; 11.2、使用MediaRecorder录制音频: 11.3、控制摄像头拍照:Camera; 第12章、OpenGL与3D应用开发 12.2、OpenGL ES基础: 12.3、绘制2D图形: ...

    Android实例代码

    11.1、音频和视频的播放:MediaPlayer; SoundPool; VideoView; 11.2、使用MediaRecorder录制音频: 11.3、控制摄像头拍照:Camera; 第12章、OpenGL与3D应用开发 12.2、OpenGL ES基础: 12.3、绘制2D图形: ...

    CainCamera:CainCamera是一个Android项目,旨在学习美容相机,图像和短视频的开发

    短视频分段录制,回删等瘦脸大眼,亮眼,美牙等美型处理备注:由于彩妆功能缺乏各种素材,本人只写了一个大概的流程,彩妆主要是素材投射有无素材的区别而已,有兴趣的可以参考一下2,短视频编辑部分仿照抖音编辑...

Global site tag (gtag.js) - Google Analytics