libstreaming源碼分析二之MediaRecorder編碼

 上一篇介紹了libstreaming的RTSP連接,連接成功後,即可將編碼後的視頻流打包發送。本文主要研究libstreaming的MediaRecorder編碼。

 
一、RTSP連接成功後,開始編碼
在startStream()方法中,主要實現了兩個功能:rtsp連接;連接成功後開始調用MeidaStream.start(),開始編碼:



Session.java:syncStart(),開啓videostream





MediaStream.java:start()





二、至此,我們看到根據MediaStream.mMode,可選擇兩種編碼方法:MediaRecorder和MediaCodec。兩種方法都是硬編碼,MediaCodec是新API,需要Android API在18以上;MediaRecorder要與LocalSocket結合使用。
MeidaStream.java中定義了abstract 方法 encodeWithMediaRecorder(),在VideoStream.java中實現了該方法。



可以看到,mMediaRecorder.start()方法執行後,mReciever.getInputStream()方法輸出的流就是已經編碼的流。
而 mMediaRecorder.setVideoEncoder(mVideoEncoder)中,mVideEncoder在VideoStream.java的子類H264Stream.java和H263Stream.java中被初始化,由此設置H264編碼和H263編碼。

三、LocalSocet設置
MeidaStream.java中,設置了LocalSocket

注意:從github下載的libstreaming,在有的手機上可能會出現“Couldn't skip mp4 header”,可能是由於LocalSocket設置的連接超時引起的。
解決方法:在MediaStream.java中,找到方法 createSockets(),註釋掉 mReceiver.setSoTimeout(3000);

四、將mReceiver.getInputStream() 流傳入 mPacketizer,開始RTP打包。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章