android多媒體(視頻播放器)

來源:互聯網
上載者:User

標籤:android   多媒體   視頻播放器   null   public   

##視頻處理

一丶VideoView控制項

點擊建立一個播放器並播放視頻

/**
     * 播放視頻
     * @param view
     */
    public void play(View view){
        
        vv.setVideoPath(path);
        vv.start();
        vv.seekTo(currentPositon);//從停的位置開始播放
    }
    /**
     * 暫停播放
     * @param view
     */
    public void pause(View view){
        if(vv != null){
            //記錄當前播放的位置
            currentPositon = vv.getCurrentPosition();
            vv.pause();
            //重新播放vv.resume();
        }
    }
    /**
     * 停止播放
     * @param view
     */
    public void stop(View view){
        if(vv != null){
            vv.stopPlayback();
        }
    }

註://保持不要屏保
        vv.setKeepScreenOn(true);
        //支援畫中畫的效果
        vv.setZOrderMediaOverlay(true);

二丶SurfaceView 表面視圖
可以在別的線程修改更新UI
雙緩衝概念:兩個線程共同作用
適合視頻播放,適合遊戲介面的渲染
SurfaceView重量級控制項, 記憶體開銷比較大,cpu開銷比較大,
雙緩衝切換器建立好了
只有SurfaceView介面使用者可見了。才可以執行邏輯。
如果SurfaceView介面使用者不可見。資源就會被回收。

例:

public class MainActivity extends Activity {
    private SurfaceView sfv;
    private MediaPlayer mp;
    private String path = "視頻的地址";
    private SurfaceHolder sh;
    
    private int currentposition ;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        sfv = (SurfaceView) findViewById(R.id.sfv);
        //surfaceholder控制器,作用:1.維護雙緩衝機制,另一個是控制視頻播放
        sh = sfv.getHolder();
        
        //設定一個回掉函數
        sh.addCallback(new SurfaceHolder.Callback() {
            // 當播放停止的時候調用(點擊最小化及退出按鈕時)
            @Override
            public void surfaceDestroyed(SurfaceHolder holder) {
                if(mp != null && mp.isPlaying()){
                    mp.stop();
                }
            }
            //當視頻架構建立時調用
            @Override
            public void surfaceCreated(SurfaceHolder holder) {
                try {
                    System.out.println("視頻播放器準備好了!");
                    //執行個體化
                    mp = new MediaPlayer();
                    //設定播放路徑
                    mp.setDataSource(path);
                    //設定播放器的控制器
                    mp.setDisplay(sh);
                    //準備播放
                    mp.prepareAsync();
                } catch (Exception e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            
            @Override
            public void surfaceChanged(SurfaceHolder holder, int format, int width,
                    int height) {
                // TODO Auto-generated method stub
                
            }
        });
        //不要黑屏
        sfv.setKeepScreenOn(true);
        //支援畫中畫
        sfv.setZOrderMediaOverlay(true);
    }
    /**
     * 開始播放
     * @param view
     */
    public void play(View view){
        if(mp == null){
            mp = new MediaPlayer();
            try {
                //將mp設定為初始狀態
                mp.reset();
                //設定播放路徑
                mp.setDataSource("http://192.168.1.21:8080/video/tianlongbabu.mp4");
                //設定播放器
                mp.setDisplay(sh);
                //準備播放(非同步準備)
                mp.prepareAsync();
                
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            mp.start();
            mp.seekTo(currentposition);
        }
    }
    /**
     * 暫停
     * @param view
     */
    public void pause(View view){
        if(mp != null && mp.isPlaying()){
            currentposition = mp.getCurrentPosition();
            mp.pause();
        }
    }
    /**
     * 停止播放
     * @param view
     */
    public void stop(View view){
        if(mp != null && mp.isPlaying()){
            currentposition = mp.getCurrentPosition();
            mp.stop();
            mp.release();
            mp = null;
        }
    }
}

本文出自 “android筆記” 部落格,請務必保留此出處http://2585211.blog.51cto.com/10044233/1672671

android多媒體(視頻播放器)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.