2016-05-30 91 views
2

我試圖開發一個Android應用程序,該應用程序讀取來自服務器或具有視頻的其他對等設備的視頻。對於這個用例,我必須將我的視頻分成更小的片段以優化傳輸時間,每個片段可以由中央服務器或其他對等方提供。如何在Exoplayer中連續播放視頻塊

我想知道exoplayer是否能夠不間斷地讀取一段視頻片段?
我可以在分割過程中自由地做任何我想要的事情,例如用linux命令split分割視頻。

回答

1

大多數自適應比特率流媒體格式的工作有點像你的描述 - 他們吐了影片分成多塊,視頻播放器請求他們一次一個。自適應速率流協議的例子是HLS,MPEG-DASH,SmoothStreaming。

它可以對視頻路由的下一個「塊」的URL可能將請求代理到其他「同行」,這是否會滿足您需求的「中央」服務器。

值得注意的是,許多視頻都是通過CDN傳遞的,這可能會干擾您所期望的方法(或者實際上可能會匹配您想要的內容,具體取決於您的基本要求),因此您可能還需要檢查。

更新

假設你意味着一些塊將來自於服務器和網絡上的對等設備的一些塊,那麼上面的服務器代理方法是行不通的。

你可以做到這一點的一種方法是將所有塊傳送到設備,無論哪個源最適合每個塊,然後將它們按照設備上的要求放在一起,然後從「localhost」流式傳輸結果你的設備給玩家。

這聽起來像一個巨大的開銷數額和東西永遠不會成功,但我認爲它實際上是在一些應用程序用來從一個流格式轉換爲另一種技術(不能提供的例子 - 對不起...) 。這可能是有用的Android設備上的「localhost」服務器的

一個例子來看看爲:

的選擇,如果你是在使用HTML5網頁內該設備可以使用Media Source Extension機制在將它們傳遞給播放器之前從不同來源加載視頻塊。這需要Chrome,而不是標準的Android瀏覽器,因爲後者在撰寫本文時不支持MSE擴展。

在所有這些方法中,您顯然需要確保提前加載以保持視頻管道和緩衝區已滿,以避免暫停。

+0

我知道你在回答中描述了流技術。但是,我從服務器到客戶端應用程序都控制着一切,因此我不會使用任何CDN。 我只是想知道,如果ExoPlayer能讓我們手動設置一個接一個地讀取視頻塊的數組,就像它是一個視頻一樣。對於我來說,視頻被分割成多個部分(或者分成原始文件或者分成更小的視頻)是非常重要的,因爲我想選擇哪個部分由我的服務器交付,哪些部分必須交換爲對等。 –

+0

好的 - 我認爲你的意思是對等設備而不是對等服務器?我已經根據這個更新了答案。 – Mick

+0

我剛剛閱讀您的更新。非常感謝,但實際上設備到設備部分將由另一個人處理,他告訴我他已經能夠從服務器或對等設備恢復文件的各個部分。我唯一的工作就是對已恢復的數據塊進行重新排序,並將它們提供給我選擇的媒體播放器,以便一個接一個地連續閱讀。 換句話說,我不負責數據傳輸,但只是爲了他們的利用。如果我很難理解,我又對不起,因爲我不是母語爲英語的人。 –