很長時間沒有寫博客了,一直在探討自己的人生問題。最后也沒有一個結果,應該是心里上給自己放了很長的一段假,現在決定調整心態重新回到工作中。 在今后的一年工作中,我將從事流媒體技術方面的研究。 具體是想實現一個手機直播的平台。 前期進行了相關的調研。目前可以采用的技術大致如下
1. darwin作為流媒體服務器, 播放器采用rtsp播放器,例如vlc。 android和iphone采集端需要實現音視頻的硬編碼和rtsp協議與流媒體服務器的交互
2. nginx+rtmp 作為流媒體服務器, 播放器采用flowplayer, andriod和iphone采集端需要實現音視頻的應編碼和rtmp協議與流媒體服務器的交互。
3. nginx+hls 作為流媒體服務器, 采用分片的方式。 播放器需要實現對m3u8的解析, 蘋果的瀏覽器本身可以。 android和iphone采集需要實現音視頻的硬編碼, 與流媒體服務器交互方式待定。 服務器端需要對流進行分片。
4. webrtc架構方式,本人c++基礎淺薄,這部分工作一直沒有開始調研。
關於雙向語音通話或者視頻會議的場景,調研過幾款開源軟件,
1. openmeeting 基於red5的視頻會議,在幾台pc機之間測試效果良好, 能否移植到android和iphone上未知。
2. mumble 目前mumble提供了桌面,android和iphone版, 測試效果 發現 android和pc之間語音交流有回音的出現.
3. linphone, linphone有android,pc和iphone版,視頻通話效果很好。 架構清晰,不過linphone代碼超過10萬行, 不知道采用linphone架構開發難度是否可控
4. 其他實現方式諸如gtalk,采用xmpp和sip技術。
目前在技術選型上遇到一些問題, darwin結構,很難做擴展, 瓶頸卡在視頻優化和雙向語音交流上, 目前pc端通過瀏覽器觀看直播,並實現語音交流, pc端采集語音沒有特別好的辦法。 回聲消除很難, 目前調研得到的開源的回聲消除模塊只有speex庫實現的比較好。
nginx+rtmp方式, 可以實現android留的推送,但是iphone對flash的支持不好, 如何開發基於flash的iphone應用比較困難,而且rtmp協議本身的閉源導致很多的地方沒辦法參考
nginx+hls 目前所做的工作比較少,還不能提出明確的方案
webrtc google大牛推的下一代流媒體標准, 目前應用很好, 貌似和ie的兼容很差?
最近這段時間會一直跟進這個方面,打算出一個專題系列,主要自己技術比較弱, 算是對自己的督促。 如果有相關認識能給予一些方向性的知道, 本人感激不盡。