EasyPlayer實現視頻的局部縮放、平移功能(類似快手視頻)

EasyPlayer實現視頻的局部縮放、平移功能(類似快手視頻)

在預覽圖片的時候,利用手勢控制圖片的縮放、平移,已經是智能手機時代最基本的操作。而對於視頻,很少有播放器支持這樣的操作。實際上,在觀看視頻的時候,我們可能會想觀看某個區域的局部細節,需要把該區域放大來觀看,EasyPlayer播放器基於這樣的需求,提供了局部放大的功能。

感謝github上開源庫PhotoView,它在ImageView上實現了縮放和平移。EasyPlayer的視頻手勢控制正是基於這個庫來實現的。PhotoView,具體來說,先設置ImageView的ScaleType爲MATRIX,然後根據觸摸手勢的位置座標,計算出圖片轉換時相應的Matrix, 再調用ImageView的setImageMatrix方法,實現圖片的縮放和平移。需要注意的是,這裏手勢控制的並不是ImageView本身,而是控制其顯示內容。PhotoView的核心算法正是根據手勢計算transformation matrix,這裏並不打算具體介紹,大家有興趣的可以直接閱讀作者的源代碼即可。

EasyPlayer的視頻的渲染是通過TextureView來實現的,對我們安卓流媒體音視頻的開發者來言,這個View——可在非UI線程進行渲染,也可以提供surface以供MediaCodec硬解碼API在底層渲染——應該是很熟悉的了。恰好這個TextuewView也提供了一個setTransform方法,該方法接收一個matrix參數,使用該參數對當前的渲染內容進行轉換,下面是官網對該方法的介紹。

Sets the transform to associate with this texture view. The specified transform applies to the underlying surface texture and does not affect the size or position of the view itself, only of its content.

可看出,這裏的轉換也是針對渲染的內容的轉換,而非針對view本身。這樣就也避免整個view tree頻繁layout,效率非常高。有了這個方法,再加上PhotoView的matrix算法,再對視頻進行縮放平移就十分簡單了。僅需要在PhotoView裏面將ImageView更換爲TextureView,把setImageMatrix方法替換爲setTransform即可!

效果如下圖:

EasyPlayer的視頻縮放與平移

EasyPlayer介紹

EasyPlayer RTSP是由EasyDarwin開源團隊開發 者開發和維護的一個RTSP播放器項目,目前 支持Windows/Android/iOS,視頻支持 H.264/H.265/MPEG4/MJPEG,音頻支持 G711A/G711U/G726/AAC,支持RTSP over TCP/UDP切換,支持硬解碼,是一套極佳的 RTSP播放組件!項目地址: https://github.com/EasyDarwin/EasyPlayer

您也可以升級到我們的EasyPlayer Pro全功能版 本,支持HTTP/RTSP/RTMP/HLS等多種流媒體協議!地址:
https://fir.im/EasyPlayerPro

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章