Live555 - 使用两个子会话的视频和音频的 TCP 流

Live555 - TCP streaming of video and audio in one using two subsessions

我一直在尝试通过单个流进行视频和音频的实时 RTSP 流式传输。

我所做的与他们的示例非常相似(创建 ServerMediaSession 并向其添加两个 SubSession,一个用于视频,一个用于音频),我所做的唯一更改是我创建了一个新的字节流源称为 TcpSource,这与他们的 ByteStreamFileSource 非常相似,只是我在 doReadFromFile 方法中调用 recv() 而不是 "fread()"(视频和音频有不同的套接字,当然)。

结果是,如果我分别拥有每个子会话,它就可以正常工作。但是,当我尝试通过 TCP 传输视频和音频时,它会导致大量数据包丢失,或者只有一个流正常工作而另一个流卡在中间(例如,视频冻结而音频继续正常播放)。

能请教一下吗?它与 sending\receiving 超时有关吗? 提前致谢。

live555 事件循环是单线程的,对任何阻塞或繁重的处理都很敏感。

首先要检查的是您没有使用 blocking I/O。如果是,那么您正在干扰 live555 框架处理的所有事情,例如任何计时器、RTCP 报告、套接字读写等

第二件事是您需要检查您是否在 doReadFromFile 中阻塞。不推荐像 sleep 这样的系统调用。而是使用live555任务调度机制。

我写过类似的代码,即从 tcp 套接字读取 audio/video,解析数据包,然后通过 live555 重新广播媒体。我在一个单独的线程中处理我的所有网络 I/O,并通过共享队列机制将解析的媒体样本传递到 live555 线程。到目前为止这很有效,但是还有很多其他方法可以解决这个问题,例如只要您不 干扰 与 live555 事件循环,使用 live555 线程 I/O 应该没问题。