控件公开的RTSP服务器功能的控制接口铅RTSP水槽过滤器。看到使用RTSP接收器创建RTSP服务器主题,以获取如何使用此接口的总体概述。
类型定义枚举
{
LMRTSPServer_APILEVEL_1 = 0,/ /当前版本
} LMRTSPServer_APILEVEL;
列出可以传递给ResetToDefaultsEx方法的ApiLevel参数的有效值。
类型 |
的名字 |
描述 |
型 |
ServerURL |
[read-only]此只读属性可用于检索服务器URL。它将返回一个包含服务器地址和“rtsp://”前缀的字符串。类时,可以使用此字符串将其设置为目标文件名铅RTSP水槽像水槽一样过滤。 |
长 |
MediaCount |
[read-only]个数ILMRTSPServerMedia使用AddMedia方法添加的接口。 |
IUnknown |
MediaItem(长指数) |
[read-only]从的列表中获取项ILMRTSPServerMedia使用AddMedia方法添加的接口。 索引参数是基于0的,并且应该<= MediaCount - 1,并指示应该检索哪个项。 如果index < 0或index >= MediaCount,该属性将失败,并出现DISP_E_BADINDEX错误。 |
ApiLevel |
指定筛选器应该使用哪些默认值。 |
将过滤器重置为默认值。apillevel参数决定使用哪些默认值。当前的应用程序应该将ApiLevel设置为LMRTSPServer_APILEVEL_1 = 0。
过滤器将来可能会改变,具有不同的属性或默认行为。调用此方法可确保过滤器未来版本的行为与开发应用程序时相同。
在开始设置属性和开始调用此接口的其他方法之前,最好调用ResetToDefaultsEx(LMRTSPServer_APILEVEL_1)。
如果成功则S_OK,如果发生错误则< 0。
E_INVALIDARG |
ApiLevel参数无效 |
pMedia |
的ILMRTSPServerMedia接口要添加到服务器支持的媒体对象列表中。 |
使用此方法添加ILMRTSPServerMedia接口显示RTSP服务器支持的媒体对象列表。RTSP服务器在内部维护一个媒体接口列表。当收到命令时,RTSP服务器会询问所有的Media接口是否可以处理该命令。每个命令被传递到所有的Media接口,直到它找到第一个可以处理该命令的接口。如果没有媒体接口可以处理该命令,则向RTSP客户端发送错误响应。
如果成功则S_OK,如果发生错误则< 0。
E_INVALIDARG |
pMedia参数无效ILMRTSPServerMedia接口。 |
E_OUTOFMEMORY |
没有足够的内存来重新分配接口指针数组。(不太可能) |
pMedia |
的ILMRTSPServerMedia接口将被删除到服务器支持的媒体对象列表中。如果为NULL,则从列表中删除所有媒体对象。 |
使用此方法去除一个或所有ILMRTSPServerMedia从RTSP服务器支持的媒体对象列表中获取。
在释放服务器之前调用此方法非常重要,以避免由于循环引用而导致对象持久化在内存中的潜在问题。方法实现的对象ILMRTSPServerMedia类的析构函数中释放的ILMRTSPServer对象的引用ILMRTSPServerMedia接口。但是,如果ILMRTSPServerMedia接口的析构函数仍然在列表中ILMRTSPServerMedia在调用ILMRTSPServer对象的析构函数之前,不会调用该对象。但是,由于ILMRTSPServer的引用位于继承对象中,所以ILMRTSPServer的析构函数直到ILMRTSPServerMedia被摧毁。这样,它们就能让彼此永远活在记忆中。如果在释放ILMRTSPServer对象之前调用RemoveMedia(NULL),则可以避免这种循环引用计数。
因此,强烈建议在释放ILMRTSPServer对象之前调用RemoveMedia(NULL)。
如果成功则S_OK,如果发生错误则< 0。
E_INVALIDARG |
pMedia参数无效ILMRTSPServerMedia接口。 |
LTMM_E_ITEM_NOT_FOUND |
[0 x80050040]ILMRTSPServerMedia接口不在列表中。 |
港口 |
服务器应该监听连接的端口号。缺省值为554。 |
这个方法告诉RTSP服务器开始监听指定的端口。使用的地址应该已经通过调用设置好了IFileSinkFilter: SetFileName(rtsp: / / ip_address“L”)。
该端口应可用,且未被其他程序(如Windows Media Player网络共享服务)使用。端口取值范围为1 ~ 65535。如果选择的端口号不是554,建议使用1024以上的端口号。这样做可以避免与服务器上可能运行的其他程序发生冲突(对于系统使用或定义良好的协议(如HTTP的80或RTSP的554),许多低于1024的端口值受到限制。
有关运行RTSPServer演示程序的信息,请参见为什么运行Windows 8 RTSPServer Demo时,使用默认RTSP端口启动服务器失败?
所有将被支持的Media对象都应该通过调用AddMedia方法来添加。
在调用此方法之后,服务器就准备好从客户机接收RTSP命令了。
调用StopServer(port)停止服务器。
如果成功则S_OK,如果发生错误则< 0。
E_INVALIDARG |
端口无效(不在0 ~ 65535之间)。 |
HRESULT_FROM_WIN32(错误) |
[0 x80070000 . .0x8007FFFF] A Win32 error or a Winsock WSAxxx error has occurred. Please consult the Microsoft documentation for a description of the Windows and Winsock error codes. 例如,如果端口正在使用,则会生成WSAEADDRINUSE (10048) Winsock错误。对应的HRESULT是HRESULT_FROM_WIN32(WSAEADDRINUSE) = 80072740 |
港口 |
服务器应该停止监听的端口号。这个值应该与传递给StartServer方法的值相同。 |
这个方法告诉RTSP服务器停止监听指定的端口。
调用此方法后,服务器将不处理任何RTSP命令,任何活动的RTSP连接将被中止。
如果成功则S_OK,如果发生错误则< 0。
N/A
sessionID |
标识正在查找的会话ID的字符串。 |
ppServerMedia |
指向IUnknown指针地址的可选指针,该IUnknown指针将被指向ILMRTSPServerMedia服务于此会话的接口。如果你不需要这个信息,这个指针可以是NULL |
ppServerSession |
对象的指针将填充IUnknown指针的地址ILMRTSPServerSession标识会话的接口。 |
该方法使用sessionID查找会话接口。通常,在接收到带有会话ID的RTSP命令时调用此方法,以确定哪个会话将处理该命令。然后确定哪个捕获或转换对象对应于此对象ILMRTSPServerSession界面开始运行,暂停图形等。
如果成功则S_OK,如果发生错误则< 0。
LTMM_E_ITEM_NOT_FOUND |
[0x80050040] Session ID与任何活动的Session不匹配。会话ID可能无效,或者由于不活动而被销毁。 |
pSessionID |
指向将用唯一会话字符串标识符填充的字符串的指针。 |
这个方法生成一个新的会话ID字符串。它保证与活动会话使用的任何其他会话ID字符串不同。
通常,此方法用于生成一个会话ID,以响应不带会话ID参数的SETUP命令。
当RTSP客户端打算开始播放以请求呈现媒体中的第一个流时,通常会发送一个不带会话ID参数的SETUP命令。此时,服务器将创建一个会话并为其分配一个会话ID。会话ID应该是唯一的,它将用于从所有活动会话中识别它。
之后,它们通常会发送另一个带有会话ID参数的SETUP命令,向会话添加第二个流(如果媒体中有第二个流)。
一旦执行了SETUP命令,客户端通常会传递PLAY命令,并再次传递先前生成的sessionID,以确定应该播放哪个流。
此方法可用于生成这些惟一的sessionID字符串。
如果成功则S_OK,如果发生错误则< 0。
E_OUTOFMEMORY |
没有足够的内存来分配新字符串。 |
pCommandParser |
指针指向一个ILMRTSPCommandParser接口包含RTSP命令。 |
pResponseBuilder |
指针指向一个ILMRTSPResponseBuilder接口,包含RTSP响应。 |
套接字 |
接收命令的套接字。这将是发送响应的同一套接字。 |
使用此方法直接向RTSP客户端发送响应。RTSP响应应该在pResponseBuilder中完全填写。参数是在ILMRTSPServerMedia: HandleMedia方法。
正常情况下,RTSP响应由服务器在ILMRTSPServerMedia: HandleMedia方法返回。
但在某些情况下,无法立即发送响应ILMRTSPServerMedia: HandleMedia.在这种情况下,服务器需要保存响应,直到显式请求响应。
另一种情况可能是需要在之前发送响应ILMRTSPServerMedia: HandleMedia的回报。例如,当PLAY命令被处理时,数据需要开始发送。但是,如果数据在输入时开始发送ILMRTSPServerMedia: HandleMedia然后让服务器发送响应ILMRTSPServerMedia: HandleMedia返回时,创建一个竞态条件,数据可能在RTSP客户端接收RTSP响应之前到达。这是不可接受的。因此,在本例中,首先用SendCommandResponse发送响应,然后才开始转换/捕获。这样,RTSP响应在流媒体音频/视频数据启动之前发送。
应避免重复RTSP响应。如果使用SendCommandResponse方法发送响应,则返回LTMM_S_RESPONSE_PENDING [0x00050048] codeILMRTSPServerMedia: HandleMedia.这个特殊的返回代码告诉服务器“我的媒体能够处理这个命令,不要询问任何其他媒体。”另外,不要发送任何响应,因为响应将直接使用SendCommandResponse发送”。
如果成功则S_OK,如果发生错误则< 0。
E_OUTOFMEMORY |
内存不足,无法完成该命令。 |
HRESULT_FROM_WIN32(正在) |
[0x80072746]客户端连接丢失。 |
S_FALSE |
出事了。响应可能到达客户机,也可能没有到达。 |
考察一下 |
接收命令的套接字。这将是发送响应的同一套接字。 |
使用此方法断开由'serverSocket'标识的连接。该套接字与在ILMRTSPServerMedia: HandleMedia方法。
调用此方法断开特定客户机的连接。此命令关闭套接字,并确保不会从该套接字接收其他命令。
的RTSPServerSessionNotification_Timeout通知的响应调用此方法ILMRTSPServerMedia: OnNotification方法。
如果成功则S_OK,如果发生错误则< 0。
E_INVALIDARG |
套接字无效。 |
LTMM_E_ITEM_NOT_FOUND |
[0x80050040]套接字似乎有效,但它不再在活动连接列表中。它肯定是通过其他方式关闭的。 |