我正在使用peers来实施SIP UserAgent。由于peer-demo源代码和项目文档,大部分工作已经完成。
但是,我在实现以下功能时遇到一些问题:在源(预先录制的)音频文件播放完毕后终止呼叫。
默认情况下,此功能不可用,因此我正在编辑peers-lib项目以实现它。特别是,我目前正在研究RTPSender source code,我不明白在从PipedInputStream encodedData读取所有数据后,run方法似乎停止/等待。
在拳头上,我只是在主循环时间:
while(!isStopped){
numBytesRead = 0;
[...]
}
,在run方法中,当从上面提到的PipedInputStream中读取所有数据时结束,但这似乎不是这样,因为我在循环结束后立即放置了System.out.println()istruction,它永远不会执行。
然而,while循环以某种方式暂停/结束,因为我在循环中放置了另一个System.out.println()指令,该指令在从PipedInputStream读取最后一个字节后停止执行。
所以我认为它必须与运行代码的线程有关,但是我找不到对sleep()/ join()调用的任何引用,而只是对CaptureRtpSender类中的start()调用:< / p>
[...]
public void start() throws IOException{
[...]
rtpSender.setStopped(false);`
[...]
Thread rtpSenderThread = new Thread(rtpSender, RtpSender.class.getSimpleName());
[...]
rtpSenderThread.start();
}
[...]
我认为理解线程在读取所有数据时如何停止,可能是解决我的问题的关键,因为我可以复制该方法来指示主类终止调用。
提前感谢您的帮助!