簡體   English   中英

使用ffmpeg從服務器流式傳輸視頻幀

[英]Streaming video frames from server with ffmpeg

我在RMTP流上將JPEG圖像形式的視頻幀發送到我的服務器。 在服務器端,我想將流(ip +端口)連接到ffmpeg,以便它可以從流中獲取圖像並從中創建視頻流。

實際上我的服務器正在偵聽傳入幀的IP和端口。 這部分完成了。 我遇到的問題是如何使用ffmpeg將這些幀轉換為視頻流。 任何人都可以告訴我如何實現這一目標? 我知道image2pipe是我應該使用的,但我還沒有在Google上找到它的語法和文檔。

在服務器端 ,您可以調用cmd-line行應用程序ffmpeg為您執行繁重的工作並流式傳輸數據

在客戶端 ,我想討論兩種方法:

方法1 :使用iPhone上的ffplay連接服務器並顯示視頻流。

優點 :這是最簡單,最快速的解決方案!

有些人很久以前就把FFmpeg移植到了iPhone上 ,所以你可以從iPhone調用ffplay ,告訴它連接到服務器並完成工作! 檢查流式傳輸來自FFmpeg的簡單RTP音頻流,以獲得快速示例。

缺點 :似乎在這個 問題上 涉及 法律問題 ,因此有些人不建議使用FFmpeg分發您的應用程序。

方法2 :為iPhone編寫類似於ffplay的應用程序。

優點 :您可以使用自定義編碼/解碼程序來保護正在廣播的數據,並讓世界上的其他人使用您的播放器來觀看流。

如果您要傳輸真正的JPEG(帶有標題和所有標題,就像普通的JPEG文件一樣),您首先需要使用網絡庫來允許您的應用程序連接到服務器並檢索數據。

我建議,對於服務器接收的每個新連接,它會發送一個自定義標頭(幾個字節),通知客戶端正在發送的每個幀的大小(因此客戶端知道每個幀的大小)。

之后,應用程序將需要使用另一個庫將傳入的數據解釋為JPEG幀/文件。 我現在可以想到OpenCV,但我相信你可以找到更小的庫。 也許iOS為此提供了一個框架,但我真的不知道。

一旦您的應用程序訪問了每個框架攜帶的所有有用信息(即圖像尺寸和像素),您的應用程序將為從網絡到達的每個幀創建一個包含此信息UIImage ,以便能夠在屏幕上顯示它們

缺點 :您必須從頭開始創建應用程序,並且可能會在途中學習一些新的API。

實際上有兩種方法:

ffmpeg -i "rtmp://localhost/etc" out.flv

要么

rtmpdump -v -r rtmp://localhost/etc | ffmpeg -i - out.flv

暫無
暫無

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

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