欢迎大家一起学习探讨通信之WLAN。到目前为止,我们基于“无人机接力游戏竞赛”的“站点”,“名称”,“航道”,“速度”和“动力”,等效到WLAN通信系统中,探讨了“MAC地址”,“SSID”,“信道”,“速率”和“功率”。游戏竞赛信息解释只剩“规则”和“无人机的功能”。同样,等效到WLAN通信系统中为“协议标准”和“WLAN 相关功能”,这两部分包含信息量比较多。
图 1
从本节开始,将探讨“协议标准”和“WLAN 相关功能”的概念和技术,原计划“协议标准”应在“WLAN相关功能”之前探讨,但协议标准是比较枯燥乏味,对其探讨次序进行调整。先对常使用“WLAN相关功能”探讨学习,后续再对其“协议标准”探讨。本节将对基于WLAN通信系统的Miracast功能探讨学习。
好!“Miracast功能”相信有部分伙伴还未使用过。在手机上,该功能被命名为“投屏”,“屏幕投影”,“无线投屏”,“WiFi-Display”等等。该功能也称为WFD(WiFi-Display)。后续所有章节关于支持Miracast功能,将用“WFD”描述。
先看其功能来源描述:
Miracast是由Wi-Fi联盟制定发布无线显示标准,WiFi-display协议为其无线显示标准的具体实现。该功能是基于WLAN P2P链路进行数据传输。
接下来探讨学习Miracast功能实现。支持Miracast功能的设备,在使用该功能时,可做角色“WFD source”或“WFD sink”(发送端和接收端)。
-
“WFD source”:实时将终端的video和audio(视频和音频)数据传输至WFD sink,如下图2所示。
-
“WFD sink”:将接收到的video和audio数据进行处理显示。
图 2
WFD source和WFD sink 如何通过WLAN P2P链接进行数据通信的呢?
在WLAN P2P链路上,WFD设备将建立“UDP”和“TCP”两条网络层的链路,UDP链路用做实时数据流传输,TCP链路承载控制数据流传输。数据流传输模型如图3所示。
图 3
WFD设备如何配对连接的呢?
WFD连接过程,如下图4所示。WFD source 的IP地址“192.168.49.156”;WFD sink 的IP地址“192.168.49.1”。
第一步:建立TCP链路。在该链路上控制流进行传输。
图 4
第二步:控制流信息解析,如图5所示。
图 5
详细数据包内容解析:
(1)由WFD source 发起options,请求WFD设备信息
OPTIONS * RTSP/1.0
CSeq: 0
Require: org.wfa.wfd1.0
(2)WFD sink 响应,并说明支持的可响应处理的方法。
RTSP/1.0 200 OK
Date: Wed, 31 Dec 2008 16:29:29 +0000
User-Agent: stagefright/1.1 (Linux;Android 9.0)
CSeq: 0
Public: org.wfa.wfd1.0, GET_PARAMETER, SET_PARAMETER
注【协议内容】:
-
A WFD Device shall be able to send and respond to the OPTIONS, SET_PARAMETER, GET_PARAMETER, and org.wfa.wfd1.0 RTSP methods。
-
A WFD Sink shall be able to send the SETUP, PLAY, PAUSE and TEARDOWN RTSP methods。
-
A WFD Source shall be able to respond to the SETUP, PAUSE, PLAY, and TEARDOWN RTSP method。
(3)再由WFD sink 发起options,请求WFD设备信息。
OPTIONS * RTSP/1.0
Date: Wed, 31 Dec 2008 16:29:29 +0000
User-Agent: stagefright/1.1 (Linux;Android 9.0)
CSeq: 1
Require: org.wfa.wfd1.0
(4)WFD source 响应,并说明支持的可响应处理的方法。
RTSP/1.0 200 OK
CSeq: 1
Public: org.wfa.wfd1.0, GET_PARAMETER, SET_PARAMETER, SETUP, PLAY, PAUSE, TEARDOWN
(5)由WFD source发起GET_PARAMETER参数请求。
GET_PARAMETER rtsp://localhost/wfd1.0 RTSP/1.0
CSeq: 1
Content-Length: 211
Content-Type: text/parameters
wfd_audio_codecs
wfd_video_formats
wfd_content_protection
sony_ext_01
sony_ext_10
sony_ext_12
wfd_coupled_sink
wfd_client_rtp_ports
wfd_uibc_capability
wfd_standby_resume_capability
wd_initial_buffer
(6)WFD sink端响应支持的参数。
RTSP/1.0 200 OK
Date: Wed, 31 Dec 2008 16:29:29 +0000
User-Agent: stagefright/1.1 (Linux;Android 9.0)
CSeq: 1
Content-Type: text/parameters
Content-Length: 377
wfd_video_formats: 28 00 02 02 0001DEFF 157C7FFF 00000FFF 00 0000 0000 11 none none, 01 02 0001DEFF 157C7FFF 00000FFF 00 0000 0000 11 none none
wfd_audio_codecs: LPCM 00000003 00, AAC 00000001 00
wfd_content_protection: none
wfd_coupled_sink: none
wfd_client_rtp_ports: RTP/AVP/UDP;unicast 15550 0 mode=play
wfd_uibc_capability: none
wfd_standby_resume_capability: none
(7)WFD source设置支持的参数。
SET_PARAMETER rtsp://localhost/wfd1.0 RTSP/1.0
CSeq: 2
Session: 00000000
Content-Length: 247
Content-Type: text/parameters
wfd_audio_codecs: AAC 00000001 00
wfd_video_formats: 00 00 02 02 00000080 00000000 00000000 00 0000 0000 00 none none
wfd_presentation_URL: rtsp://192.168.49.2/wfd1.0/streamid=0 none
wfd_client_rtp_ports: RTP/AVP/UDP;unicast 15550 0 mode=play
(8)WFD sink端回复。
RTSP/1.0 200 OK
Date: Wed, 31 Dec 2008 16:29:29 +0000
User-Agent: stagefright/1.1 (Linux;Android 9.0)
CSeq: 2
(9)WFD source 请求设置参数。
SET_PARAMETER rtsp://localhost/wfd1.0 RTSP/1.0
CSeq: 3
Session: 00000000
Content-Length: 27
Content-Type: text/parameters
wfd_trigger_method: SETUP
(10)WFD sink 响应回复
RTSP/1.0 200 OK
Date: Tue, 31 Dec 2019 01:19:50 +0000
User-Agent: stagefright/1.1 (Linux;Android 4.1)
CSeq: 3
(11)WFD sink设置参数信息。
SETUP rtsp://192.168.49.156/wfd1.0/streamid=0 RTSP/1.0
Date: Tue, 31 Dec 2019 01:19:50 +0000
User-Agent: stagefright/1.1 (Linux;Android 4.1)
CSeq: 17
Transport: RTP/AVP/UDP;unicast;client_port=15550-15551
(12)WFD source响应回复。
RTSP/1.0 200 OK
CSeq: 17
Date: Tue, Dec 31 2019 01:19:50 GMT
Session: 00000019
Transport: RTP/AVP/UDP;unicast;client_port=15550-15551;server_port=19022-19023
(13)WFD sink 发起Play请求。
PLAY rtsp://192.168.49.156/wfd1.0/streamid=0 RTSP/1.0
Date: Tue, 31 Dec 2019 01:19:50 +0000
User-Agent: stagefright/1.1 (Linux;Android 4.1)
CSeq: 18
Session: 00000019
(14)WFD source 响应回复。
RTSP/1.0 200 OK
CSeq: 18
Date: Tue, Dec 31 2019 01:19:50 GMT
从上RTSP交互数据包信息,我们可知WFD source 和WFD sink通过RTSP控制流协商设置video,audio及UDP端口参数等。所以Miracast 的连接,在网络层主要是基于RTSP控制协议的参数同步与设置。
本节我们探讨了基于WLAN通信系统的Miracast功能,了解了Miracast的投屏原理和连接过程。对其RTSP交互数据包内容进行了详细check。第十二节探讨就到此,后续期待共同继续探讨学习。
注:
对以上所述专业知识有修正意见或建议,可随时留言反馈。如感兴趣更多通信知识,可关注“通信之WLAN”微信公众号。
谢谢大家支持~