視頻的顯示尺寸與surfaceview 和 surface 的關係

在視屏播放中,一般我們都用mediaplayer 加surfaceview來做。有時候視頻的尺寸比較多,該如何顯示呢,其實在videoview中的measure方法已經給了答案 了,就是根據視頻源的尺寸來調整surfaceview 的尺寸從而達到按比例顯示視頻播放。這樣就能完全顯示在surfaceview上,只是有時候會有黑邊。如果surfaceview的尺寸和視頻的尺寸不成比例。那麼視頻會被拉昇變形或壓縮並全部顯示在surfaceview上。和surface的寬高沒有任何關係。並不會說surfaceview的寬高大於surface的寬高造成顯示的小或者surfaceview的寬高小於surface的寬高造成顯示不全。這是錯誤的理解。(surfaceview 和surface是兩個東西。不要混淆)
`SurfaceHolder.Callback mSHCallback = new SurfaceHolder.Callback()
{
public void surfaceChanged(SurfaceHolder holder, int format,
int w, int h)
{
mSurfaceWidth = w;
mSurfaceHeight = h;
boolean isValidState = (mTargetState == STATE_PLAYING);
boolean hasValidSize = (mVideoWidth == w && mVideoHeight == h);
if (mMediaPlayer != null && isValidState && hasValidSize) {
if (mSeekWhenPrepared != 0) {
seekTo(mSeekWhenPrepared);
}
start();
}
}

    public void surfaceCreated(SurfaceHolder holder)
    {
        mSurfaceHolder = holder;
        openVideo();
    }

    public void surfaceDestroyed(SurfaceHolder holder)
    {
        // after we return from this we can't use the surface any more
        mSurfaceHolder = null;
        if (mMediaController != null) mMediaController.hide();
        release(true);
    }
};`
上面 的回調都是與surface有關。surfaceChanged 中的寬高參數是surface的不是surfaceview的。
調用getHolder().setFixedSize(mVideoWidth, mVideoHeight);這個方法只是設置surface的寬高。並不會對顯示出來的視頻的大小有任何的影響。對顯示在surfaceview上也沒有任何影響。具體可見videoview的源碼。這裏只是做個記錄。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章