Showing posts with label ffmpeg. Show all posts
Showing posts with label ffmpeg. Show all posts

Monday, October 21, 2019

WebAssembly ffmpeg.js 透過 stdio async 讀入檔案 (驗證?

在與來自烏克蘭github大大來信後,他推薦我用WebRTC方式,最後進行串流討論後得出以下結論

我覺得WebRTC預設編碼的x264,本身好像也是p2p??,雖然延遲性和安全性提高了但是在應付大規模場景下應該不適合,
别迷信 WebRtc,WebRtc只适合小范围(8人以内)音视频会议,不适合做直播:
1. 视频部分:vpx的编码器太弱,专利原因不能用264,做的好的都要自己改264/265代码才行。
2. 音频部分:音频只适合人声编码,对音乐和其他非人声的效果很糟糕。
3. 网络部分:对国内各种奇葩网络适应性太低,网络糟糕点或者人多点就卡。
4. 信号处理:同时用过 GIPS和 WebRTC 进行对比,可以肯定目前开源的代码是GIPS阉割过的。
5. 使用规模:10人以内使用,超过10人就挂了,WebEx方案支持的人数都比 RTC 强。
作者:韦易笑
链接:https://www.zhihu.com/question/25497090/answer/72397450
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
在我詢問他是否可以通過我在上回的方向去實作他說是可行的(基於商業客戶向他買解決方案)不能透漏,在分支
提到這個部分大概就可以解決我所說的問題,再來就是猜猜看怎麼處理了

在ffmpeg 轉成 ffmpeg.js 他在把 ffmpeg 裡面的 file 和 tcp 的函數裡面的意外中斷的片段程式碼
都給 remark掉 這樣在 運行 async stdio就不會意外中止 ( 或許就可以 向他說的 透過 getUserMedia 去 讀取資料這樣我們只要把 那些blob 轉成 file 跟原先一樣不用動,在結合上一個文章就可以 達到 用網路傳遞數據給後端 推送給 其他串流伺服器了前端編碼就完成囉!
再來就是 要再編譯的參數 EMTERPRETIFY_ASYNC=1 給打開
他fork出來額外新增的內容應該就是這些
提到他說可以從這方向找尋到我要的解答所以確定可以用getUesrMedia去實作還有以下要問題要解決
第一個就是blob跟輸出檔案問題一樣超過70mb可能會出現 記憶體崩潰或者溢位導致瀏覽器crash
可能要查閱 wasm fs 虛擬檔案映射那邊
第二個則是檔案的讀入方式
他提問我為什麼要用自定義ffmpeg 去做 影音上的串流,目前不是有 WebRTC可以達成目標了嗎
我當初想做是因為可以實現任意編碼的問題和可以隨意推送去任意 RTMP串流伺服器,再者就是 目前大部分主流是RTMP 又有豐富的 CDN 當然 WebRTC也可以實作CDN ,國外網友好像不怎麼贊成 好像不太怎麼穩定)
上述內容可能需要 重新compliter 整個 ffmpeg.js才能實證了,又是一個17小時?,有空再來玩 (話說 是不是該刷leetcode了

Friday, January 18, 2019

打造一個多人串流系統 c#xffmpeg part5

打造一個 c# 多執行緒 server


,接續上篇標體寫得上古語言  沒錯  hls m3u8格式失敗了,原因呢,
flex 已經停止更新一段時間了,又這麼剛好我要傳輸的音頻 沒有解碼器,flex 又沒有寫好的aac encode,adobe media server 的 音頻無法 壓成 aac 規格 導致m3u8 影音格式無法解析,後來
在想了 要交叉編譯後果斷放棄,真的沒辦法了嗎,在公司積極的轉型真的沒辦法了嗎,沒錯土法煉鋼的時間又到了,大致上的做法就是,在client對server端口發送rtmp訊號,這個時候就開啟多執行緒去呼叫,沒想到 ffmpeg 竟然可以當作串流轉接器, 解決方案就是,先上傳至
rtmp再進行 encode 在配合 c# 編寫的 server 再轉推送去其他流 這樣就大功告成囉,效能的話恩恩,很明顯可以看到處理都是在伺服器做處理,至於..hls 實在不是適合用於 即時傳輸影像,過幾天再來研究一下http flv格式到底是怎麼一回事  ,或許應該嘗試其他media server囉?

Sunday, January 13, 2019

打造一個多人串流系統 html5 publish to adobe media server ? part4


推送到了html5  瀏覽器又怎樣呢,我們的客戶端,假設也必須要,傳輸自己的畫面自server 怎麼辦呢?  找了一下子發現又有 solution 可以用了
https://github.com/chenxiaoqino/getusermedia-to-rtmp

Install ffmpeg


加入系統變數

c:\ffmpeg\bin

Cmd  >>>ffmpeg version

Install successful!

Node.js install 



一直下一步~
Cmd  >>> node -v


Clone github download getusermedia-to-rtmp


我們的主角


必須切去該路徑 然後 cmd 輸入 npm install





ffmpeg param setting



Path:

C:\Users\x2132\Desktop\nodejs\getusermedia-to-rtmp-master\server.js

run nodejs server!


node server.js

Html5 Rtmp server location


rtmp://127.0.0.1:1935/live/test
注意後面跟 flex 版本一樣必須要指定
確實收到數據了!
檢查 flex 端是否可以撥放 


成功! ,終於可以交貨了