免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
MediaPlayer 用法(一) - 一切皆有可能 - JavaEye技術(shù)網(wǎng)站

使用SurfaceView播放視頻,其實(shí)很簡(jiǎn)單,但是經(jīng)常會(huì)碰見有聲音沒圖像的問題.

其實(shí)使用SurfaceView播放視頻只需要主要下面幾個(gè)地方就可以了

 

1. surfaceChanged也就是Suface是否創(chuàng)建成功

2. onPrepared 也就是MideoPlayer是否加載并準(zhǔn)備完成

3. surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);

類型必須是SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS


Java代碼
  1. package VideoTest.Test;  
  2.   
  3. import java.io.FileDescriptor;  
  4.   
  5. import android.app.Activity;  
  6. import android.content.res.AssetFileDescriptor;  
  7. import android.media.AudioManager;  
  8. import android.media.MediaPlayer;  
  9. import android.media.MediaPlayer.OnBufferingUpdateListener;  
  10. import android.media.MediaPlayer.OnCompletionListener;  
  11. import android.media.MediaPlayer.OnPreparedListener;  
  12. import android.os.Bundle;  
  13. import android.view.SurfaceHolder;  
  14. import android.view.SurfaceView;  
  15.   
  16.   
  17. public class VideoTest extends Activity implements SurfaceHolder.Callback,   
  18.     OnBufferingUpdateListener, OnCompletionListener, OnPreparedListener{  
  19.       
  20.     private SurfaceView surfaceView;  
  21.     private SurfaceHolder surfaceHolder;  
  22.     private MediaPlayer mediaPlayer;  
  23.       
  24.     @Override  
  25.     public void onCreate(Bundle savedInstanceState) {  
  26.         super.onCreate(savedInstanceState);  
  27.           
  28.         this.surfaceView = new SurfaceView(this);  
  29.         this.surfaceHolder = this.surfaceView.getHolder();  
  30.         this.surfaceHolder.addCallback(this);  
  31.           
  32.         //類型必須設(shè)置成SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS  
  33.         this.surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);      
  34.         setContentView(this.surfaceView);  
  35.     }  
  36.       
  37.     @Override  
  38.     public void onDestroy() {  
  39.         super.onDestroy();  
  40.         if (this.mediaPlayer != null) {  
  41.             this.mediaPlayer.release();  
  42.             this.mediaPlayer = null;  
  43.         }  
  44.     }  
  45.       
  46.     public void PlayVideo(){  
  47.           
  48.         try {  
  49.             //視頻文件放在 assert中  
  50.             AssetFileDescriptor aFD = this.getAssets().openFd("welcome.3gp");  
  51.             FileDescriptor fileDescriptor = aFD.getFileDescriptor();  
  52.             this.mediaPlayer = new MediaPlayer();  
  53.             this.mediaPlayer.setDataSource(fileDescriptor, aFD.getStartOffset(), aFD.getLength());  
  54.             aFD.close();      
  55.               
  56.             //視頻放在SDCard中  
  57.             //File sdFile = Environment.getExternalStorageDirectory();  
  58.             //this.mediaPlayer = new MediaPlayer();  
  59.             //this.mediaPlayer.setDataSource(sdFile.getAbsoluteFile() + File.separator + "welcome.3gp");  
  60.               
  61.             //視頻放在res中  
  62.             //this.mediaPlayer = MediaPlayer.create(this, R.raw.welcome);  
  63.               
  64.             //網(wǎng)上的視頻,沒有測(cè)試  
  65.             //this.mediaPlayer  
  66.             //  .setDataSource("http://xy2.163.com/download/down/wukong.mp3");  
  67.               
  68.             this.mediaPlayer.setDisplay(this.surfaceHolder);  
  69.             this.mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);  
  70.             //準(zhǔn)備完成后才可以播放,另外如果文件特別大或者從網(wǎng)上獲得的資源  
  71.             //會(huì)在這里等待時(shí)間過長(zhǎng),造成堵塞,這樣的話就得用  
  72.             //this.mediaPlayer.prepareAsync(),然后監(jiān)聽是否準(zhǔn)備完畢在開始  
  73.               
  74.             this.mediaPlayer.prepare();           
  75.             this.mediaPlayer.start();                 
  76.                   
  77.         } catch (Exception e) {  
  78.             // TODO: handle exception  
  79.         }  
  80.     }  
  81.       
  82.     @Override  
  83.     public void surfaceChanged(SurfaceHolder holder, int format, int width,  
  84.             int height) {  
  85.           
  86.     }  
  87.   
  88.     @Override  
  89.     public void surfaceCreated(SurfaceHolder holder) {  
  90.         //SurfaceCreated 創(chuàng)建成功才可以播放視頻  
  91.         PlayVideo();  
  92.     }  
  93.   
  94.     @Override  
  95.     public void surfaceDestroyed(SurfaceHolder holder) {  
  96.           
  97.     }  
  98.       
  99.     //@Override  
  100.     public void onBufferingUpdate(MediaPlayer mp, int percent) {  
  101.         // TODO Auto-generated method stub  
  102.   
  103.     }  
  104.   
  105.     //@Override  
  106.     public void onCompletion(MediaPlayer mp) {  
  107.         // TODO Auto-generated method stub  
  108.   
  109.     }  
  110.   
  111.     //@Override  
  112.     public void onPrepared(MediaPlayer mp) {  
  113.         //MediaPlayer加載準(zhǔn)備完畢才能開始播放  
  114.         //mp.start();  
  115.     }  
  116.       
  117. }  
 

 

但是,對(duì)于一些人可能會(huì)產(chǎn)生另一個(gè)問題就是

surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);

在設(shè)置成SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS類型后,無法畫圖了

SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS的意思是創(chuàng)建一個(gè)"PUSH"surface,這個(gè)surface沒有自己的緩沖區(qū),沒有自己的緩沖Buffer.

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Android多媒體學(xué)習(xí)十二:Android中Video的三種播放方式的實(shí)現(xiàn)
用SurfaceView和MediaPlayer做一個(gè)Android視頻播放器
Android中Camera使用
Android SurfaceView 繪圖覆蓋刷新及臟矩形刷新方法
Android開發(fā)之初識(shí)Camera圖像采集
實(shí)現(xiàn)自己的Camera
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服