ILMRTSPServer接口

控件公开的RTSP服务器功能的控制接口铅RTSP水槽过滤器。看到使用RTSP接收器创建RTSP服务器主题,以获取如何使用此接口的总体概述。

数据类型:

LMRTSPServer_APILEVEL

类型定义枚举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错误。

接口方法:

HRESULT ResetToDefaultsEx (LMRTSPServer_APILEVELApiLevel)

参数

ApiLevel

指定筛选器应该使用哪些默认值。

描述

将过滤器重置为默认值。apillevel参数决定使用哪些默认值。当前的应用程序应该将ApiLevel设置为LMRTSPServer_APILEVEL_1 = 0。

过滤器将来可能会改变,具有不同的属性或默认行为。调用此方法可确保过滤器未来版本的行为与开发应用程序时相同。

在开始设置属性和开始调用此接口的其他方法之前,最好调用ResetToDefaultsEx(LMRTSPServer_APILEVEL_1)。

返回

如果成功则S_OK,如果发生错误则< 0。

常见的错误代码

E_INVALIDARG

ApiLevel参数无效

HRESULTAddMedia (IUnknown * pMedia)

参数

pMedia

ILMRTSPServerMedia接口要添加到服务器支持的媒体对象列表中。

描述

使用此方法添加ILMRTSPServerMedia接口显示RTSP服务器支持的媒体对象列表。RTSP服务器在内部维护一个媒体接口列表。当收到命令时,RTSP服务器会询问所有的Media接口是否可以处理该命令。每个命令被传递到所有的Media接口,直到它找到第一个可以处理该命令的接口。如果没有媒体接口可以处理该命令,则向RTSP客户端发送错误响应。

返回

如果成功则S_OK,如果发生错误则< 0。

常见的错误代码

E_INVALIDARG

pMedia参数无效ILMRTSPServerMedia接口。

E_OUTOFMEMORY

没有足够的内存来重新分配接口指针数组。(不太可能)

HRESULT RemoveMedia (IUnknown * pMedia)

参数

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接口不在列表中。

HRESULT StartServer(长端口)

参数

港口

服务器应该监听连接的端口号。缺省值为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

HRESULTStopServer(长端口)

参数

港口

服务器应该停止监听的端口号。这个值应该与传递给StartServer方法的值相同。

描述

这个方法告诉RTSP服务器停止监听指定的端口。

调用此方法后,服务器将不处理任何RTSP命令,任何活动的RTSP连接将被中止。

返回

如果成功则S_OK,如果发生错误则< 0。

常见的错误代码

N/A

HRESULT FindSession(BSTR sessionID, IUnknown **ppServerMedia, IUnknown **ppServerSession)

参数

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可能无效,或者由于不活动而被销毁。

HRESULTGenerateNewSessionID (* pSessionID型)

参数

pSessionID

指向将用唯一会话字符串标识符填充的字符串的指针。

描述

这个方法生成一个新的会话ID字符串。它保证与活动会话使用的任何其他会话ID字符串不同。

通常,此方法用于生成一个会话ID,以响应不带会话ID参数的SETUP命令。

当RTSP客户端打算开始播放以请求呈现媒体中的第一个流时,通常会发送一个不带会话ID参数的SETUP命令。此时,服务器将创建一个会话并为其分配一个会话ID。会话ID应该是唯一的,它将用于从所有活动会话中识别它。

之后,它们通常会发送另一个带有会话ID参数的SETUP命令,向会话添加第二个流(如果媒体中有第二个流)。

一旦执行了SETUP命令,客户端通常会传递PLAY命令,并再次传递先前生成的sessionID,以确定应该播放哪个流。

此方法可用于生成这些惟一的sessionID字符串。

返回

如果成功则S_OK,如果发生错误则< 0。

常见的错误代码

E_OUTOFMEMORY

没有足够的内存来分配新字符串。

HRESULTSendCommandResponse(IUnknown *pCommandParser, IUnknown *pResponseBuilder, DWORD_PTR socket)

参数

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

出事了。响应可能到达客户机,也可能没有到达。

HRESULTCloseServerSocket (DWORD_PTR serverSocket)

参数

考察一下

接收命令的套接字。这将是发送响应的同一套接字。

描述

使用此方法断开由'serverSocket'标识的连接。该套接字与在ILMRTSPServerMedia: HandleMedia方法。

调用此方法断开特定客户机的连接。此命令关闭套接字,并确保不会从该套接字接收其他命令。

的RTSPServerSessionNotification_Timeout通知的响应调用此方法ILMRTSPServerMedia: OnNotification方法。

返回

如果成功则S_OK,如果发生错误则< 0。

常见的错误代码

E_INVALIDARG

套接字无效。

LTMM_E_ITEM_NOT_FOUND

[0x80050040]套接字似乎有效,但它不再在活动连接列表中。它肯定是通过其他方式关闭的。

LEADTOOLS Filters C API帮助
188金宝搏的网址客服|支持|联系我们|知识产权的通知
©1991 - 2021领先的技术公司。保留所有权利。