upnp协议和dlna源码理解与修改

39 篇文章 2 订阅
29 篇文章 1 订阅

其他文章

upnp和ssdp 之一

libupnp

libupnp 的例子写得不是很有条理,但是很容易修改,是很好的入门

1、SampleUtil_PrintEvent()

这个函数是打印出所有的控制点,可以注释掉,除了显示是没有用处的,重点函数是TvCtrlPointCallbackEventHandler回调
回调函数

2、修改代码

里面的例子tv_ctrlpt_main.cpp 重点关注,这是一个控制点的编写,编写dlna 投屏设备需要修改很多名称参数

rc = TvCtrlPointStart(linux_print, NULL, 0);

这句代码是整个入口,需要关注,一步一步调试进去,就明白upnp协议了,其他基础请看我的其他文章。
libupnp打印设备
上图是修改过后打印搜索到的设备,本图是搜索到了kodi设备

wireshark 抓包
上图是wireshark抓返回包,实际上udp里面包含的是http协议。
抓包使用语法 udp and host xxxx.xxxx.xxx.xxx and not host 192.168.1.255
因为广播地址有很多干扰包,所以去掉广播包

dlnap

这是python写的一个投屏,写得言简意赅,调试下来,技巧十足,作者很有功力
python dlnap.py --ip 192.168.1.144 --play http://127.0.0.1:8000/a.mp4
python dlnap.py --ip 192.168.1.144 --stop

事实上,投屏是分为两步走的

1、发送命令让大屏播放mp4文件

POST /AVTransport/cff47b40-2475-7ff1-7459-318ec45c9853/control.xml HTTP/1.1
User-Agent: dlnap.py/0.15
Accept: */*
Content-Type: text/xml; charset="utf-8"
HOST: 192.168.1.144:1551
Content-Length: 504
SOAPACTION: "urn:schemas-upnp-org:service:AVTransport:1#SetAVTransportURI"
Connection: close

<?xml version="1.0" encoding="utf-8"?>
     <s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
     <s:Body>
      <u:SetAVTransportURI xmlns:u="urn:schemas-upnp-org:service:AVTransport:1">
      <InstanceID>0</InstanceID><CurrentURI>http://127.0.0.1:8000/a.mp4</CurrentURI><CurrentURIMetaData></CurrentURIMetaData>
</u:SetAVTransportURI>
   </s:Body>
</s:Envelope>

2、播放

POST /AVTransport/cff47b40-2475-7ff1-7459-318ec45c9853/control.xml HTTP/1.1
User-Agent: dlnap.py/0.15
Accept: */*
Content-Type: text/xml; charset="utf-8"
HOST: 192.168.1.144:1551
Content-Length: 401
SOAPACTION: "urn:schemas-upnp-org:service:AVTransport:1#Play"
Connection: close

<?xml version="1.0" encoding="utf-8"?>
         <s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" s:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
            <s:Body>
               <u:Play xmlns:u="urn:schemas-upnp-org:service:AVTransport:1">
                  <InstanceID>0</InstanceID><Speed>1</Speed>
               </u:Play>
            </s:Body>
         </s:Envelope>

以上理解了,除了网络的基本功力,还要有http协议的理解以及xml 解析等等,soap协议的理解,dlna 大屏投放基本就能做了。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qianbo_insist

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值