簡體   English   中英

具有我自己的音頻PCM軌道的多路視頻

[英]Mux video with my own audio PCM track

使用Android MediaMuxer ,將自己的PCM軌道添加為最終電影中的音頻軌道的一種不錯的方法是什么?

在電影中,在特定時間,我正在放慢速度,停下來,然后加速並重新啟動視頻。 對於視頻部分,直接影響演示時間很容易,但是對於音頻,有一個逐塊的過程,這使得處理音軌的慢速,停止和開始變得不那么直觀。

當前,當遍歷從源頭收到的緩沖區時,為了減慢整個過程,我要做的是:

// Multiply by 3 the presentation time.

audioEncoderOutputBufferInfo.PresentationTimeUs = 
              audioEncoderOutputBufferInfo.PresentationTimeUs * ratio);

// I expand the sample by 3. Damn, just realized I haven't
// respected the sample alignment but anyway, the problem is not about white noise...

encoderOutputBuffer = Slowdown(encoderOutputBuffer, 3); 

// I then write it in the muxer 
muxer.WriteSampleData(outputAudioTrack, encoderOutputBuffer, audioEncoderOutputBufferInfo);

但是,這只是不起作用。 當然,如果將源中的MediaFormat復制到目標,則其持續時間將比實際音頻數據短3倍。

我可以從輸入中獲取整個PCM ,編輯byte []數組,並將其作為軌道添加到MediaMuxer嗎?

如果要放慢音頻樣本的速度,則需要在對它們進行編碼之前進行此操作,因此請先將音頻編解碼器的輸入緩沖區排隊。 根據我的經驗,在那里的大多數播放器都忽略了音頻演示時間戳(我在VLC和ffplay中嘗試過)。 如果要確保音頻和視頻保持同步,則必須確保實際上有足夠的音頻樣本來填補pt之間的空白,否則播放器將開始播放以下樣本,無論它們的pt如何。 此外,您不能僅使用MediaMuxer多路復用PCM樣本,您需要先對其進行編碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM