启动recvData逻辑线程

场景介绍

预先启动接收的逻辑线程,并注册音频和录音的回调对象。

前提条件

指令流引擎对象已创建。

开发流程

  1. 封装好逻辑线程对象UpstreamReceiveDispatcher,循环调用指令流引擎的recvData接口。
  2. 注册音频数据回调和录音回调函数。
  3. 启动逻辑线程。

编码实例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
public class Activity implements BaseActivity {
   protected void onCreate(Bundle savedInstanceState) {
        upstreamReceiveDispatcher = UpstreamReceiveDispatcher.getInstance();
        upstreamReceiveDispatcher.setInstructionEngine(engine);
        // 音频数据回调
        audioPlayerCallback = new AudioPlayerCallback();
        // 注册音频回调
        upstreamReceiveDispatcher.addNewPacketCallback((byte) InstructionWrapper.AUDIO, audioPlayerCallback);
        // 启动逻辑线程接收音频数据
        upstreamReceiveDispatcher.start();
    }
}
public class UpstreamReceiveDispatcher extends Thread {
    @Override
    public void run() {
        byte[] recvBuf = new byte[MAX_BUF_LEN];
        while (!stopFlag) {
            // 循环调用recvData接收数据
            int packetLen = engine.recvData(mtype, recvBuf, recvBuf.length);
            if (packetLen > 0) {
                byte[] copyData = new byte[packetLen];
                System.arraycopy(recvBuf, 0, copyData, 0, packetLen);
                // 将数据回调给钩子函数
                callback.onNewPacket(copyData);
                continue;
            }
        }
    }
}