Streaming media protocols

本文介绍了常用的流媒体传输协议,如HTTP、RTMP等,并详细解释了RTSP、MMS及RTMP的不同实现方式及其默认端口。此外还讨论了WindowsMediaPlayer如何处理MMS流。

常用流媒体传输协议包括如下几种:

HTTP, RTMP, PNM, RTSP, MMS, RTSPU, RTSPT, MMSU, MMST

 

自从Windows Server 2008发布后,RTSP就成了Windows 平台上的默认流媒体传输协议了,微软开始慢慢废除之前力推的MMS传输协议了。此外RTSP一直是RealMedia/RealVideo/RealAudio/QuickTime(.mov, .mp4, .sdp) 的标配传输协议。

 

依据所依赖的底层传输协议的不同,RTSP可以分为如下几类实现:

RTSP using UDP is called RTSPU

RTSP using TCP is called RTSPT

RTSP默认端口是 554.

 

对MMS同样有如下分类:

MMS using UDP is called MMSU

MMS using TCP is called MMST

MMS using HTTP is called MMSH

MMS默认端口是1755

 

Windows Media Player在连接MMS 数据流的时候按照如下规则:

先尝试MMSU, 如果失败,则尝试MMST, 如果依然失败,继续尝试 MMSH.

 

此外RealMedia早期还曾用PNM 协议(默认端口 7070)来进行流媒体传输

 

近来随着Flash 视频的普及, Adobe公司的RTMP(默认端口 1735)传输协议变得越来越流行, Adobe强力推荐客户用RTMP来进行数据传输,而不是用目前各大主流视频网站采用的传统的HTTP progressive download。

 

RTMP同样根据实际的传输协议的不同,分为如下几类:

RTMP/RTMPE/RTMPT/RTMPTE/RTMPS..

 

<think> 我们之前讨论了如何在ONVIF模块中声明支持profile_T,现在用户询问如何声明支持media2。在ONVIF协议中,Media2指的是ONVIF媒体服务版本2,它是对原有媒体服务的扩展。要支持media2,我们需要在代码中实现ONVIF Media2服务相关的接口。 根据提供的代码框架,我们可以分析如下: 1. ONVIF服务请求处理位于`onvif_server/soap_request`目录下,该目录中每个文件对应一个服务(如tds代表设备管理服务,trt代表媒体服务等)。 2. Media2服务在ONVIF中属于媒体服务的扩展,因此很可能需要在现有的媒体服务相关文件中进行修改或添加新的文件。 具体步骤: - **添加Media2服务接口**:在`onvif_server/soap_request`目录下,如果还没有对应的Media2服务实现,可能需要创建新的文件(如`soap_media2.c`和`soap_media2.h`)或者扩展现有的媒体服务文件(如`soap_trt.c`,因为trt代表媒体服务,但注意trt是媒体服务版本1)。 - **修改服务发现**:在设备发现服务中(可能在`soap_tds.c`中),需要声明支持Media2服务。即在`GetServices`或`GetCapabilities`响应中加入Media2服务的端点。 - **修改Makefile**:如果添加了新文件,需要在Makefile中添加编译源文件。 因此,具体在哪个文件声明支持media2? 1. **服务实现文件**:在`soap_request`目录下创建或修改文件(如`soap_media2.c`)来实现Media2的各个操作(如GetProfiles,GetStreamUri等)。 2. **服务声明文件**:在`soap_tds.c`(设备服务)中,修改`GetServices`或`GetCapabilities`函数,在响应中添加Media2服务的信息(包括命名空间、端点地址等)。 以添加Media2服务到`GetCapabilities`为例,在`soap_tds.c`中: ```c // 在函数tds__GetCapabilitiesResponse中,添加Media2服务 if (capabilities->Media2 == NULL) capabilities->Media2 = (struct tds__Media2Capabilities *)soap_malloc(soap, sizeof(struct tds__Media2Capabilities)); // 设置Media2能力 capabilities->Media2->XAddr = "http://[IP地址]/onvif/media2_service"; // 替换为实际的端点 capabilities->Media2->SupportedProfileLevels = ... ; // 设置支持的配置级别 ``` 另外,在`onvif_server/onvif_srv.c`中,需要将Media2服务的端点注册到SOAP服务中,以便处理请求。 总结:声明支持Media2主要在两个地方: - 在设备服务的`GetCapabilities`响应中声明支持(在`soap_tds.c`中修改)。 - 实现Media2服务接口(可能需要新建`soap_media2.c`文件)。 注意:由于Media2是较新的服务,需要确保ONVIF协议栈支持对应的命名空间和数据结构。现有的代码可能没有Media2的实现,因此需要根据ONVIF Media2的WSDL文件实现相应的操作。 因此,用户应该在以下文件声明支持media2: - 服务能力声明:`onvif_server/soap_request/soap_tds.c` - 服务实现:新建`onvif_server/soap_request/soap_media2.c`(或类似名称)并实现接口。 同时,需要在配置文件中(如`onvif_srv.h`)定义Media2服务的端点路径,并在主服务注册中(`onvif_srv.c`)添加该服务。 注意:具体实现需要参考ONVIF Media2规范。 下面根据要求输出相关问题: </think> ### 在 ONVIF 模块中声明支持 media 2 的位置 根据 ONVIF 协议架构和您的代码框架,声明支持 **media 2 (Media2 Service)** 需要修改以下核心文件: #### 1. **服务能力声明文件**(必需) `onvif_server/soap_request/soap_tds.c` - 修改 `tds__GetCapabilitiesResponse` 函数 - 在设备能力(`Capabilities`)结构中添加 Media2 服务声明: ```c // 添加 Media2 服务能力 if (capabilities->Media2 == NULL) { capabilities->Media2 = soap_new_tds__Media2Capabilities(soap, -1); } capabilities->Media2->XAddr = "http://[YOUR_IP]/onvif/media_service"; // 服务端点 capabilities->Media2->ProfileCapabilities = ... // 添加支持的配置能力 ``` #### 2. **服务端点实现文件**(核心) `onvif_server/soap_request/soap_media2.c`(需新建) - 实现 ONVIF Media2 服务接口: ```c // 示例:GetProfiles 实现 int __trt__GetProfiles(struct soap *soap, _trt__GetProfiles *trt__GetProfiles, _trt__GetProfilesResponse *trt__GetProfilesResponse) { // 返回包含 profile_T 的 Profiles 列表 trt__GetProfilesResponse->Profiles = soap_new_tt__Profile(soap, 2); trt__GetProfilesResponse->Profiles[0] = create_profile(soap, "profile_1"); trt__GetProfilesResponse->Profiles[1] = create_profile(soap, "profile_T"); // 声明支持 return SOAP_OK; } ``` #### 3. **服务注册文件**(关键) `onvif_server/onvif_srv.c` - 注册 Media2 服务到 SOAP 服务端: ```c // 在 onvif_srv_init 函数中添加 soap_register_plugin_arg(soap, http_da, NULL); soap_register_plugin_arg(soap, media2_method, NULL); // 注册 Media2 服务 ``` #### 4. **配置文件扩展**(可选) `files/etc/default/onvif/profile/profile_T` - 添加 media2 特有参数: ```conf media2_supported=true max_resolution=3840x2160 streaming_protocols=RTSP,WebRTC ``` ### 关键修改说明 | 文件位置 | 修改内容 | 作用 | |----------|----------|------| | `soap_tds.c` | 声明 Media2 服务能力 | 向客户端宣告支持 Media2 | | 新建 `soap_media2.c` | 实现 Media2 标准接口 | 提供实际功能实现 | | `onvif_srv.c` | 注册服务到 SOAP 栈 | 使服务可被外部访问 | | `profile_T` | 添加扩展配置 | 定义 profile_T 的媒体能力 | > ⚠️ **注意事项**: > 1. ONVIF Media2 服务命名空间为 `"http://www.onvif.org/ver20/media/wsdl"` > 2. 需同步更新 `Makefile` 添加 `soap_media2.c` 编译 > 3. 在 `trt_passthrough.h` 中添加 Media2 服务函数声明 > 4. Profile 名称 `profile_T` 需符合 ONVIF 命名规范
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值