android 視訊通話相關

ysh06201418發表於2014-06-18

1.用camera還是mediarecorder來獲得視訊流啊?
都可以,
使用camera的話其實就是繼承AbstractCamera類把獲取的每一幀yuv420sp資料使用ffmpeg中的1ibx264或者直接使用x264編碼 軟編碼 得到h264視訊流,然後把資料傳送出去。
使用mediaRecorder其實就是把硬編碼得到的h264流自己進行處理,得到其手機的sps,pps,然後rtp打包傳送出去。
2.用mediarecorder,怎麼獲得每一幀的資料進行rtp打包實時傳送呢?
參考spydroid原始碼,裡面有具體實現。
3.用mediarecorder錄製視訊的時候設定編碼方式H.264,是不是說錄製出的視訊已經是h.264編碼了
舉個簡單例子,mediarecorder設定編碼格式為h264,容器為3gp或者mp4,那麼如果設定儲存路徑就是採用h264格式的 3gp或者mp4檔案。如果是得到實時流,因為視訊header是在後面回寫得到的,那麼你需要把把得到的流進行處理,比如0001 sps 0001 pps 0001 h264data的形式。
4.伺服器採用什麼比較好,有沒有人可以幫忙推薦一下。red測試通過了,但是要關閉防火牆,視訊也有延遲,主要是android往伺服器燒資料感覺沒經過壓縮,這樣肯定是不行的吧。live555??
red5 的話,請採用rtmp協議,請搜尋網上的一個資源iVideoChat視訊錄製釋出到red5伺服器,這個是我以前網上找的,http://download.csdn.net/detail/xiaoliouc/4933594。其實這個demo沒涉及到h264編碼,只是簡單的把從camera得到的每一幀資料yuv420sp轉換成rgb的形式。
live555的話,請研究rtsp協議,c++語言我不太熟,請參考部落格系列文章 http://blog.csdn.net/column/details/streaming-media.html




5.rtp打包,用的是NALDecoder翻譯過來的打包方式,沒法控制啊,看資料有人說使用jrtplib,下載編譯了c++,測試程式也執行過了,一知半解的。有沒有其他的rtp打包工具呢,或者有什麼資料可以提供給學習下
rtp打包參考spydroid的實現方式
6.還看到很多說ffmpeg移植編解碼的,感覺要學的好多
ffmpeg很強大,採集、編碼、切片、解碼,功能很好很輕大。學習步驟應該是ffmpeg的安裝、移植ffmpeg到android上,jni呼叫等。
<-------------------------------------------------------------------------------------------------------------------------------------------------------------->


視訊通話參考sipdroid實現,可以下載sipdroid原始碼,搭建mini sip server測試參考部落格http://blog.csdn.net/banketree/article/details/7979327


<-------------------------------------------------------------------------------------------------------------------------------------------------------------->

編碼方面:
可以使用mediaRecorder或者Camera來進行錄影,這樣錄影,呼叫的編碼介面是安卓的,使用很簡單,而且效率最高,至於是軟編碼還是硬編碼,這個完全取決於底層的實現,反正你不用管。比用X264等編碼庫效果好的多。

傳輸方面:
一是把編碼後的資料,進行RTSP轉換,就是在編碼的這臺手機上面,搭建一個RTSP伺服器。
二是直接把mediaRecorder的資料通過socket傳,就是在OUTPUTFILE那裡輸出為localSocket方式傳,但是這個傳出去的資料,缺少了一個視訊回寫的動作。所以傳的資料,與儲存為檔案方式的資料,頭部資訊略有一點點差異,你只需要在接收端的那臺手機上,新增一點點資訊就可以了。

解碼方面:
一是直接RTSP播放,可以調安卓介面來播。
二是SOCKET收到的資料,因為缺少視訊回寫,所以頭部資訊不全,你把它補全,然後使用第三方的JLIBRTP之類的RTP庫打包即可。

相關文章