2014-02-26 34 views
1

我正在使用ffmpeg在我的服務器上創建一個mp4文件。我也試圖用qt快速啓動,以便能夠將moov原子移動到前端,以便它能夠流動。我在互聯網上搜索過,沒有運氣。是否有可能將我的視頻/音頻放入mp4緩衝區類型文件中,然後能夠在ffmpeg仍將視頻和音頻數據轉儲到流中時播放它?重點是我想從照相機流和Android是可怕的...我知道ios和Android支持MP4,所以我試圖找到一種方式,我可以讓我的rtsp Mp4。qt faststart和ffmpeg生成一個live mp4文件

故事要點:我想不斷地給我的mp4容器提供我的相機提要,並且仍然能夠播放我的客戶可以觀看的文件。

任何幫助表示感謝。

+0

您在混合使用「快速啓動」(QuickTime術語,用於逐行下載)和RTSP(使客戶端命令流式服務器的協議)。 漸進式下載不會對您有所幫助,因爲moov原子只能在編碼完成時寫入。如果你想從相機流,你需要一個流媒體服務器 – Duvrai

+0

@Duvra我完全理解的差異。我需要知道的是,如果在完成寫入之前有一種方法可以讀取mp4,因爲FFmpeg仍在編碼rtsp流。 – Dnaso

+0

我的錯,我沒有很好地閱讀你的問題。也許你可以澄清一些問題並使用一些段落。據我現在瞭解,你有一個接收rtsp流的Linux機器。你想輸出它到1)一個快速啓動的文件和2)一個實時流,是否正確? – Duvrai

回答

1

您可以發佈實時流,並在流發佈時發佈漸進式下載。

在FFmpeg中,爲了實時流式傳輸並將該流的副本同時保存到文件中而不需要編碼兩次,可以使用Tee僞混頻器。事情是這樣的:

ffmpeg \ 
    -i <input-stream> \ 
    -f tee "[movflags=+faststart]output.mp4|http://<ffserver>/<feed_name>" 

更新:您可以嘗試直接stream a fragmented mp4

更新2:

  • 創建一個支離破碎的MP4:

    ffmpeg -i input -frag_duration 1000 stream.mp4 
    
  • 通常情況下,使用Web服務器提供服務的文件時會想知道文件的大小,所以在不知道它的大小的情況下提供文件,您需要將您的Web服務器配置爲Chunked Transfer Encoding

+0

我知道我可以做到這一點。我想要做的是想辦法實時做到這一點。例如AXIS相機和dlink相機可讓您通過mp4從cam(live)流式傳輸其流。如果他們能做到,那就必須有辦法做到這一點。 – Dnaso

+0

@Dnaso你是否嘗試過使用分塊傳輸編碼來分割mp4和http服務,正如我在更新2中提出的那樣? – Duvrai

+0

你能指點我一個鏈接嗎?我還沒有聽說過 – Dnaso