天天看點

ffmpeg開發出現的問題(四) ftp/rstp/ts 流輸出

          之于使用ffmpeg完成流的輸入和流的輸出. 之前一直以為困難重重, 做好看協定的打算了.閱讀源碼方曉新版的ffmepg支援流的輸入和流的輸出.現在測試通過了. 實作的僅僅是最簡單的ftp流輸入/轉碼/ftp流輸出. 并且效果和本地的檔案一樣,速度亦不相上下.實在是值得記錄的大事之一.

       網上關于流的輸入或者輸出,都是怎麼實作協定和封裝般的長篇累牍. 資料更是寥若星辰, 針對不同的應用, 亦是五花八門. 讓初學者望而生畏. 所謂解決方法隻是表象, 源碼才是王道. 現将調試問題記錄之, 以飨來者

1. 流的輸入和輸出, 路徑, 端口, 使用者名, 密碼, 權限. 這些是開發之前最基本的問題. 針對ftp問題, 之前忘記了寫權限, 預設搭建的伺服器是隻讀的, 這個花費了很長時間

2. 用到的函數av_guess_format("ftp", NULL, NULL); 發現這個函數無用, 被包含在avio_open()函數中, 調用這個函數,傳回的是空,導緻後面操作段錯誤

3. AVFormatContext *cc=avformat_alloc_context();如果用這個函數來配置設定容器,對應裡面好多資料都是空的.應該用avformat_alloc_output_context(); 看這個函數的源碼發現,裡面更嚴謹,更可靠

4.開發步驟:

~ 先本地完成讀入檔案/轉碼/寫入檔案

   這一步在ffmpeg的/doc/example中有好多已經實作,不過每個程式對應的隻是裡面其中的一個步驟 , 要做的工作是, 根據需求, 把這些功能組合起來

~ 添加讀入檔案, 改成流的形勢, 這個隻要搭好環境就行了

~ 寫入檔案, 這步就得寫好各個配置了. 最主要的是avio_open函數, 看下源碼, 指派, 調試到這一步後, 看ftp伺服器有沒有檢測到連接配接. 否則是你這邊出問題了