天天看點

阿裡雲移動端播放器進階功能---截圖和音頻波形

基本介紹

如果使用者對視訊播放中的某一幀畫面特别感興趣,可以使用截圖功能将這一幀視訊儲存起來。另外有一種場景想知道是否有聲音,或者想感覺聲音的大小震動頻率等,可以通過顯示一個聲音的波形來形象的表示。如下圖所示:

阿裡雲移動端播放器進階功能---截圖和音頻波形

那麼播放器提供了類似的方法可以讓使用者有辦法去實作音頻波形這個功能。那麼這種通常在音樂播放器中比較常見,或者在直播場景中來辨別對方講話是否有聲音等,有一定的應用場景。

https://www.atatech.org/articles/131375#1 視訊截圖

https://www.atatech.org/articles/131375#2 實作接口

iOS接口如下:

/**
 * 功能:截取目前正在播放圖像
 *
 */
-(UIImage*) snapshot;
           

Android接口如下:

public Bitmap snapShot();
           

https://www.atatech.org/articles/131375#3 需要注意

https://www.atatech.org/articles/131375#4 視訊内容截取

需要知道的是視訊截圖截取的是視訊的真實内容,而不是渲染視窗大小的圖像。比如播放的是1920x1080的圖像,視窗渲染大小是800*600,那麼截取出來的圖像是原始的1080p的圖像,而不是視窗渲染大小的圖像。這樣截取出來的内容不會有失真的情況。

https://www.atatech.org/articles/131375#5 保持鏡像和旋轉

如果此時使用者設定了鏡像或者旋轉模式,那麼截取出來的視訊内容也是有旋轉和鏡像的圖像。SDK内部已經對這種情況進行了處理。

https://www.atatech.org/articles/131375#6 音頻波形

https://www.atatech.org/articles/131375#7

使用者要實作音柱功能,播放器SDK必須要将實時的播放音頻資料回調出來,具體見一下方法:

iOS接口:通過一個block回調出PCM音頻資料

/**
 * 功能:
 * 參數:block:音頻資料回調
 *
 */
-(void) getAudioData:(void (^)(NSData *data))block;
           

Android接口:通過一個監聽來擷取音頻資料

public interface OnPcmDataListener {
    public void onPcmData(byte[] data, int size);
}

public void setOnPcmDataListener(OnPcmDataListener onPcmDataListener);
           

https://www.atatech.org/articles/131375#8 實作音頻波形

拿到了PCM資料之後,如何去繪制音頻波形,就是應用層的事情了,iOS和Java層都有很多繪制音頻波形的方法。

要繪制成什麼樣的形狀都可以安裝自己的需求來做。這些在網上都有很多相關的資料,在這裡就不進行描述。

類似如下比較炫的效果都可以實作。

阿裡雲移動端播放器進階功能---截圖和音頻波形
阿裡雲移動端播放器進階功能---截圖和音頻波形

繼續閱讀