2016-11-30 62 views
-1

我試圖從Ustream網站的替代版本下載視頻。本網站明顯用於DRM​​保護,實際上,如果您無法通過本網站的登錄信息訪問此視頻,則無法觀看此視頻。 視頻系統應該與ustream(相同鏈接)使用的相同,即每x秒調用不同的flv塊並將它們合併到流中(類似於rtmp服務,但不使用此協議)。從流網站合併.flv塊

我設法下載構成這個視頻的每個.flv塊,但是我在合併到一個文件時遇到了問題。首先這些文件有一些音頻/視頻滯後/問題,但由於沒有其他方式來下載這個視頻,我並不抱怨時滯​​。

真正的問題是每個flv文件的持續時間都有一個附加的增加,儘管它有一個正常的大小。視頻持續時間大約是6秒,所以第一個塊是6秒長,第二個塊是12秒長,儘管只有前6個可見(其餘6個是「損壞的」)。如果我嘗試合併(使用ffmpeg或任何視頻加入軟件)所有這些文件(大約600-700,總持續時間爲1小時15分鐘),只有前兩個部分可見,則我什麼也看不到。 (更清楚的是,如果我嘗試合併前兩個塊,文件長度爲18秒,我可以看到前12個;如果我嘗試合併前3個塊,文件長度爲36秒,並且我仍然只能看到前12秒)。

任何人有什麼想法?

+0

堆棧溢出僅用於編程問題,所以您應該顯示您的代碼。 – LordNeckbeard

+0

嗯,我不知道你是否看過這個問題,但沒有代碼可以顯示。我問的是一種合併flv塊在類似/相同的環境中的方法(其中每個塊都帶來前面的塊的持續時間)。合併命令是默認命令。我的問題是要獲得大塊的實際持續時間。我想過修整每個.flv文件,但有700個文件,我必須在最後一個小時減去一個小時減去6秒。 – Iztooi

+0

@Iztooi至少向我們展示了你的ffmpeg「merge」命令。也許它使用不正確,比如你如何合併2或3 flv?有一個鏈接到兩個連續的示例塊?需要檢查每個塊是否有單獨的自己的flv頭和這些時間戳的外觀。基本上,如果chunk-1以6秒的時間戳結束,則chunk-2不能有時間戳爲零的第一幀。在這種情況下,您必須刪除chunk-2的flv標題,並在每幀中編輯時間戳從6秒向上增加。你的編碼語言是否處理字節編輯?或者試試ffmpeg的'genpts'命令? –

回答

0

我檢查了FLV塊。時間戳是實際上很好

簡短版本:
塊-1具有不必要的FLV標頭。刪除它並在Chunk-0的末尾粘貼數據。通過一些十六進制編輯器工具來完成它,或者編寫一個基本實用程序來自動修復編碼語言中的每個文件(PHP?Java?C++?你沒有在你的問題中標記)。

爲避免出現代碼,請僅使用FFmpeg,嘗試提取每個FLV塊內包含的視頻和音頻部分。例如:

ffmpeg -i chunk1.flv -c:v copy chunk1.h264 //to get video 
ffmpeg -i chunk1.flv -c:a copy chunk1.aac //to get audio 
  • 合併單獨的視頻文件(H264)成一個大的H264視頻文件。
  • 將單獨的音頻文件(aac)合併爲一個大的AAC音頻文件。
  • 加入視頻文件&音頻文件作爲一個FLV或MP4容器內。

龍版本:

的問題是,既塊每個具有FLV報頭(在每個文件中前13個字節)。
只有Chunk-0需要一個標題,因爲Chunk-1只是視頻的後續部分,它會在接下來的6秒內提供FLV文件。

要想象你的問題,讓我們看看你的FLV的內部。如圖所示,在刪除多餘的字節之後,您可以在塊0結束時僅剩粘貼剩餘的塊1字節,然後重新保存爲working FLV文件。

所以只需使用你的編程語言編寫簡單的邏輯工具:

對於不是塊狀0每上升塊數,刪除其前13個 字節並粘貼其餘在Chunk-0.flv的結尾。

重複每個塊,直到您有一個全長的大塊Chunk-0 FLV文件。

作爲測試,您可以使用免費的十六進制編輯器軟件手動編輯塊。在Windows上,我使用HxD。上面的圖像從中抓取。

  • 開啓在十六進制編輯器
  • 在組塊-1二者的塊只是選擇(高亮)& 刪除第一13個字節FLV頭(範圍0〜12)。首標以插槽0處的46開頭,並以插槽12處的00結尾。
  • 接下來的字節以09(視頻幀)開頭。它看起來像09 00 25 FF 00 17 etc etc
  • 你想要的塊狀1開始與上述字節,而不是目前的46 4C 56 01 etc etc
  • 最後...只是(「全選」和)所有的組塊,1個字節,那些Chunk-0末尾的字節。 保存作爲新的FLV並嘗試播放。它會工作!

這就是結果working FLV

+1

感謝您的回答。我的問題是要找到什麼是flv文件的怪異行爲;這是頭的13個字節的「不必要」。所以:你的鏈接不起作用,但我能夠重現這個過程並獲得我認爲是同一個文件的內容。我可能不會使用音頻 - 視頻提取,因爲它可能(或者可能不,我不是專家)降低質量。因爲我記得我用concat命令合併了另一個站點/視頻中的不同flv文件,我認爲它有類似的地方,但由於你必須將所有字節複製到一個文件中,所以我可以按照你的說法 – Iztooi