我一直在尝试通过单个流进行实时RTSP视频和音频流传输。
我所做的与他们的例子非常相似(创建ServerMediaSession并为其添加两个SubSession,一个用于视频,一个用于音频),我所做的唯一改变是我创建了一个新的字节流源TcpSource,它与ByteStreamFileSource非常相似,只是代替“fread()”,我在doReadFromFile方法中调用recv()(视频和音频有不同的套接字,当然)。
结果是,如果我分别进行每个次级,它可以正常工作。但是,当我尝试通过TCP流式传输视频和音频时,它会导致主要数据包丢失,或者只有一个流正常工作而另一个流停留在中间(例如视频冻结而音频保持正常播放)。
你能告诉我吗?它与发送\接收超时有关吗? 提前谢谢。答案 0 :(得分:1)
live555事件循环是单线程的,对任何阻塞或繁重处理都很敏感。
要检查的第一件事是您没有使用blocking I/O
。如果你是,那么你正在干扰live555框架所处理的所有事情,例如:任何计时器,RTCP报告,套接字读写等
第二件事是你需要检查doReadFromFile
中是否有阻止。不建议使用sleep
之类的系统调用。而是使用live555任务调度程序机制。
我编写了类似的代码,即从tcp套接字读取音频/视频,解析数据包,然后通过live555重新播放媒体。我在一个单独的线程中处理了所有网络I / O,并通过共享队列机制将解析后的媒体样本传递到live555线程。到目前为止,这种方法运作良好,但还有很多其他方法可以解决这个问题,例如:像使用live555线程进行I / O一样,只要你不使用live555事件循环干扰就应该没问题。