Live555 lib 有一个很好的例子testOnDemandRTSPServer.cpp这个例子只是流“一个”给定的文件。我想流式传输多个文件。Live555 是否有播放列表概念或如何在 Live555 中流式传输多个文件?
最良好的祝愿
PS:我尝试添加多个子会话,在这种情况下 Live555 只是流式传输最后一个会话文件......
Live555 lib 有一个很好的例子testOnDemandRTSPServer.cpp这个例子只是流“一个”给定的文件。我想流式传输多个文件。Live555 是否有播放列表概念或如何在 Live555 中流式传输多个文件?
最良好的祝愿
PS:我尝试添加多个子会话,在这种情况下 Live555 只是流式传输最后一个会话文件......
live555 代码附带了另外一个应用程序。Live555Media 服务器位于源代码的 mediaServer 目录中。这可以完成工作。它使用dynamicRTSP
服务器类。您将包含所有媒体文件的文件夹提供给它,并以rtsp://ip/filename
.
我的 0.02 美分:我不确定这是否有意义:如果你想在同一个会话中流式传输它们,你将如何确保它们都以相同的格式编码,这是一个要求。RTSP describe 获取文件的媒体会话描述,这用于设置流会话,因此所有文件的编码相似至关重要。
RTSP 未对播放列表做出任何规定。通常播放列表不通过 RTSP 传输,而是通过 HTTP 传输。IMO 如果播放列表位于客户端上,则等待 RTCP 再见数据包(在 eof 处)然后为播放列表中的下一个文件/RTSP URI 执行设置和播放会更有意义。
如果您只想在 RTSP 客户端启动一个会话的情况下流式传输一系列文件(播放列表在服务器上),当然没有什么能阻止您在 live555 库中创建自定义文件源来执行您想要的操作......
最近我不得不做类似的任务和类似的功能:
在这里,您可以做什么让视频 H264 流文件像播放列表一样在行中播放(当然,如果它们具有相同的分辨率、编码配置文件等)
您将不得不修改 ByteStreamFileSource::doGetNextFrame 方法。有类似 feof(fFid) 的代码
if (feof(fFid))
{
CloseInputFile(fFid);
fFid = OpenInputFile(envir(), "test.264");
//fileName
}
else ....
当然,如果您仍然需要 LGPL 合规性,您还有更多工作要做……您必须在库外复制/重命名此类,并对 H264VideoFileServerMediaSubsession 执行相同操作,并修改 createNewStreamSource 方法,使其使用您重写的 ByteStreamFileSource 类。