此接口用于构建RTSP命令响应,该命令响应将由RTSP服务器发送到RTSP客户端。接口由铅RTSP Sink过滤器并传递给ILMRTSPServerMedia: HandleCommand方法,当从RTSP客户端接收到RTSP命令时。
方法解析和解释RTSP命令ILMRTSPCommandParser接口,并在该接口中构建响应。
类型 |
的名字 |
描述 |
长 |
ResponseCode |
此属性指示响应代码。默认值是551(表示错误)。 因此,必须将此属性更改为200以表示成功。有关可能的RTSP响应的完整列表,请参见“RFC 2326 -实时流协议(RTSP)”。 |
型 |
ResponseString |
将与ResponseCode一起发送到客户机的字符串。当您更新ResponseCode属性时,此属性将自动更新。 但是,您也可以在更改ResponseCode之后,自己用更有意义的字符串更新它。 |
型 |
ContentType |
指示内容类型的字符串。默认值为空字符串。 该值将与“content - type:”前缀一起放在响应中,并告诉RTSP客户端内容的形式。 您应该在需要内容的命令中设置该参数,比如DESCRIBE。最常见的内容类型是“application/sdp”,这是大多数RTSP客户端对DESCRIBE命令的期望。 |
字段名 |
表示字段名的字符串。 |
fieldValue |
表示字段值的字符串。 |
这个方法将添加一个报头字段。报头字段具有该格式
<头字段>:<头的值>
例如,可以使用下面的调用来添加sessionID字段:
hr = pBuilder->AddHeaderField(L“会话”,我“MySessionString;超时= 70”);
在此之后,RTSP响应将在报头中包含以下信息:
会话:MySessionString;超时= 80
如果成功,S_OK,如果发生错误,< 0。
E_OUTOFMEMORY |
内存不足 |
E_POINTER |
至少有一个参数为NULL |
内容 |
指示一行或多行内容的字符串。 |
此方法将添加一行或多行内容。行将结束被添加到任何现有内容中,以将以前的内容与正在添加的内容分开。
所添加的内容应该与ContentType属性所指示的类型相匹配。
例如,下面的代码将设置内容类型,添加几行内容并调用ILMRTSPServerSession: HandleCommand完成对DESCRIBE命令的响应:
//在这个例子中,CRTSPServerFolderMedia正在实现ILMRTSPServerMedia
//类有一个接收器接口,用于获取描述信息,声明如下:
// ILMRTSPServerSession * m_pdescripbesession;
HRESULT CRTSPServerFolderMedia::HandleDescribeCommand(ILMRTSPServer *pServer, ILMRTSPCommandParser *pParser, ILMRTSPResponseBuilder *pBuilder, DWORD_PTR socket)
{
/* UpdateDescribeSessionFilename是另一个类成员,用指定的源文件更新包含m_pdescripbesession过滤器实例的图形在pParser * /
HRESULT hr = updatedescripbesessionfilename (pParser);
如果(失败(人力资源)
{
//如果updatedescripbesessionfilename失败,则该文件不存在或不支持
//所以只需将responseccode设置为适当的错误码并返回
pBuilder-> put_responseccode (hr == HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND) ?404: 415);
返回人力资源;
}
//我可以处理文件,所以设置ContentType为application/sdp和
//添加过滤器不知道的内容值
hr = pBuilder->put_ContentType(L“应用程序/ sdp”);
如果(成功(人力资源)
hr = AddContent(pBuilder, L .“v = 0”);
如果(成功(人力资源)
hr = AddContent(pBuilder, L ."o=- 0 0 IN IP4 127.0.0.1");
如果(成功(人力资源)
hr = AddContent(pBuilder, L .“s =测试会话”);
//在这种情况下,我正在播放整个文件从开始(位置0sec)
如果(成功(人力资源)
hr = AddContent(pBuilder, L .“=范围:《不扩散核武器条约》= 0 -”);
//让ILMRTSPServerSession::HandleCommand填充描述媒体流的其他内容值
如果(成功(人力资源)
hr = m_pdescripbesession ->HandleCommand(pServer, pParser, pBuilder, socket);
如果(成功(人力资源)
hr = pBuilder-> put_responseccode (200);/ /成功!
其他的
pBuilder - > RemoveAllContent ();
返回人力资源;
}
如果成功,S_OK,如果发生错误,< 0。
E_OUTOFMEMORY |
内存不足 |
此方法删除之前使用AddContent添加的所有内容。
S_OK(函数从不失败)。