SpyDroid源码分析系列17:SpyDroid上传AAC音频原理7

本节主要解答如何发送数据的。当然了,通过RTCP和RTP协议。

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

final MediaCodecInputStream inputStream = new MediaCodecInputStream(mMediaCodec);

我们知道一个音频数据通过以下流程:

从麦克获得原始数据-》编码-》网络发送-》接收方解码-》播放

这里我们从编码后的数据源获得了一个输入流,如果读这个数据,就可以得到AAC的编码音频,非原始数据。

~~~~~~~~~下面执行

mPacketizer.setDestination(mDestination, mRtpPort, mRtcpPort);

执行socket.setDestination(dest, rtpPort);的过程如下:

/** Sets the destination address and to which the packets will be sent. */
public void setDestination(InetAddress dest, int dport) 
{
//自定义检查点: 1 2 3

mPort = dport;
//自定义检查点: 1 2 3

for (int i=0;i<mBufferCount;i++) 
{
//对于每个成员来说
mPackets[i].setPort(dport);
//设置目的端口
//自定义检查点: 1 2 3

mPackets[i].setAddress(dest);
//设置目标地址
//自定义检查点: 1 2 3
}
//自定义检查点: 1 2 3
//自定义检查点: 1 2 3
//自定义检查点: 1 2 3
}

~~~~~~~~~~~~~接下来执行

report.setDestination(dest, rtcpPort);

执行过程如下:

public void setDestination(InetAddress dest, int dport) 
{
//自定义检查点: 1 2 3

port = dport;
//自定义检查点: 1 2 3

upack.setPort(dport);
//自定义检查点: 1 2 3

upack.setAddress(dest);
//设置目标IP
//自定义检查点: 1 2 3
//自定义检查点: 1 2 3
//自定义检查点: 1 2 3
}
~~~~~~~~~~~~~~~~~~~~~

接下来执行mPacketizer.setInputStream(inputStream);

这个很重要,获取输入数据以便发出。

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

下面开始执行mPacketizer.start();

public void start() 
{
//自定义检查点: 1 2 3
 //自定义检查点: 1 2 3

if (t==null) 
{
t = new Thread(this);
t.start();
}
}

根据JAVA线程的原理,自然要去执行run方法

为了描述更为清楚,这里打算在下一节中来讲述RTP,RTCP发送细节。




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