minidlna源码初探(二)—— SSDP设备发现的大致流程

本文深入minidlna程序流程,解析SSDP设备发现过程。当设备加入网络,通过多播ssdp::alive消息通知控制点。控制点使用HTTP的M-SEARCH查询设备,匹配设备类型后,设备回应响应。VLC作为客户端,通过组播发送ssdp:discover,设备接收后回应,最终在VLC的UPnP界面显示设备。
摘要由CSDN通过智能技术生成

前言:

        之前有专文介绍了minidlna中的UPNP功能,内中介绍其中包含的SSDP简单发现协议),SOAP(简单对象访问协议)等几个协议(http://blog.csdn.net/sakaue/article/details/19070735)。本文将根据minidlna的程序流程,概述SSDP的流程,为下一部分ACE实现做铺垫。


设备发现的大致流程:

        首先,根据UPNP的规范:

            在设备加入网络,UPnP发现协议允许设备向控制点广告它的服务。它使用向一个标准地址和端口多址传送发现消息来实现。控制点在此端口上侦听是否有新服务加入系统。为了通知所有设备,一个设备为每个其上的嵌入设备和服务发送一系列相应的发现消息。每个消息也包含它表征设备或服务的特定信息。

我们需要在服务(设备)开始时定时多播一个ssdp::alive给各个加入组播的用户(控制点),信息个格式如下:

    NOTIFY * HTTP/1.1  
    HOST:239.255.255.250:1900                                    #协议保留多播地址和端口,必须是239.255.255.250:1900  
    CACHE-CONTROL:max-age=1810                           #max-age指定通知消息存活时间,如果超过此时间间隔,控制点可以认为设备不存在  
    LOCATION:http://192.168.1.20:8200/rootDesc.xml     #包含根设备描述得URL地址  
    SERVER: 3.4.72-rt89 DLNADOC/1.50 UPnP/1.0 SakaueDLNA/1.1.0  
    NT:upnp:rootdevice   #在此消息中,NT头必须为服务的服务类型  
    USN:uuid:4d696e69-444c-164e-9d41-001ec92f0378::upnp:rootdevice   #表示不同服务的统一服务名,它提供了一种标识出相同类型服务的能力  
    NTS:ssdp:alive   #表示通知消息的子类型,必须为ssdp:alive  
这种定时的的ssdp::alive消息需要发送以下几种类型的USN(统一服务名):

static const char * const known_service_types[] =
{
    "upnp:rootdevice",                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值