libstreaming源码分析二之MediaRecorder编码

来源:互联网 发布:北京网络营销软件价格 编辑:程序博客网 时间:2024/06/05 03:19
 上一篇介绍了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打包。


0 0
原创粉丝点击