SpyDroid源码分析系列15:SpyDroid上传AAC音频原理5

所有的初始化工作都做好了,现在开始启动运行!

session.start(0);

参数0表示启动音频,1表示启动视频

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Stream stream = id==0 ? mAudioStream : mVideoStream;

//指向音频流

~~~~~~~~~~~~

stream.setTimeToLive(mTimeToLive);

对于setTimeToLive方法来说,在public interface Stream里面有定义为接口。

那么具体实现呢?我得找一下,这也是我为啥最喜欢C的原因。

~~~~~~~~~~~~~~~~~~~~~~~~~~查找中ing.

在MediaStream中找到了定义。

public void setTimeToLive(int ttl) throws IOException 
{

mPacketizer.setTimeToLive(ttl);
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~最终终于启动了

stream.start();

这里我特意花了时间测一下,由于start方法在AACStream类和MediaStream两个类中都定义了,

所以这里先调用AACStream的方法

~~~~~~~~~~~~~~~~~~~~~~~~~~~~

~~~~~~~~~~~~~~~~~~~~~~~~~~~~


switch (mMode) 
{


case MODE_MEDIARECORDER_API: 
 encodeWithMediaRecorder(); 
break;


case MODE_MEDIACODEC_API: 
 encodeWithMediaCodec();
break;
};
?我本地的代码会选择第二种方式,所以会执行encodeWithMediaCodec函数。


~~~~~~~~~~~~~~~~~~~~~~~~~~这个函数位于AACStream类内。


下面开始分析encodeWithMediaCodec


~~~~~~~~~~~~~~~~~~~~~~~~~~~~


?int i=0;
for (;i<AUDIO_SAMPLING_RATES.length;i++) 
{
if (AUDIO_SAMPLING_RATES[i] == mQuality.samplingRate) 
{
break;
}

// If he did, we force a reasonable one: 24 kHz
if (i>12) mQuality.samplingRate = 24000;


这段主要是对参数的有效性进行验证,如果无效的话,强制采样率为24KHZ.


当然,作为一个良民,我这里的参数是:


采样率: 8000, bitrate:32000


~~~~~~~~~~~~~~~~~~~~~~~~~~~~


final int bufferSize = AudioRecord.getMinBufferSize(mQuality.samplingRate, AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT)*2;


计算出一个数字,赋值给bufferSize.


~~~~~~~~~


((AACLATMPacketizer)mPacketizer).setSamplingRate(mQuality.samplingRate);


代码如下:


this.samplingRate = samplingRate;


保存采样率。?


socket.setClockFrequency(samplingRate);?


setClockFrequency??的定义如下:






/** Sets the clock frquency of the stream in Hz. */
public void setClockFrequency(long clock) 
{
//自定义检查点: 1 2 3 
mClock = clock;
}
?保存采样率,单位为HZ.


~~~~~~~~~~


你可能感兴趣的:(RTP,rtcp,SpyDroid,SpyDroid)