Miracast 协议详解
一、Miracast 概述
Miracast 基于 Wi‑Fi Display (WFD) 标准,用于将移动设备屏幕无线投射到显示设备。主要组件:
- Wi‑Fi Direct (P2P):建立直连
- RTSP:会话控制
- RTP/RTCP:音视频传输
- UIBC:用户输入回传
二、Miracast 交互流程
阶段1:设备发现与 P2P 连接
Source (手机) Sink (接收端)
| |
|--- Probe Request (WFD IE) ---->|
|<-- Probe Response (WFD IE) ----|
| |
|--- P2P Device Discovery ------>|
|<-- P2P Device Discovery ------|
| |
|--- P2P GO Negotiation -------->|
|<-- P2P GO Negotiation ---------|
| |
|--- P2P Provisioning ---------->|
|<-- P2P Provisioning -----------|
| |
|--- DHCP (获取IP) ------------->|
|<-- DHCP (分配IP) --------------|
阶段2:RTSP 会话建立
RTSP 用于能力协商和会话控制。
2.1 M1 - RTSP Options
Source -> Sink:
OPTIONS * RTSP/1.0
CSeq: 1
Require: org.wfa.wfd1.0
User-Agent: WFD/1.0
Sink -> Source:
RTSP/1.0 200 OK
CSeq: 1
Public: org.wfa.wfd1.0, GET_PARAMETER, SET_PARAMETER
2.2 M2 - Get Parameter (能力查询)
Source -> Sink:
GET_PARAMETER rtsp://192.168.49.1/wfd1.0 RTSP/1.0
CSeq: 2
Content-Type: text/parameters
Content-Length: <length>
wfd_video_formats
wfd_audio_codecs
wfd_client_rtp_ports
wfd_uibc_capability
wfd_standby_resume_capability
Sink 响应包含支持的能力:
Sink -> Source:
RTSP/1.0 200 OK
CSeq: 2
Content-Type: text/parameters
Content-Length: <length>
wfd_video_formats: 00 00 01 01 00000001 00 00000000 00000000 00 0000 0000 00 none none
wfd_audio_codecs: AAC 00000001 00
wfd_client_rtp_ports: RTP/AVP/UDP;unicast 19000 0 mode=play
wfd_uibc_capability: input_category_list=HIDC;hidc_cap_list=none
2.3 M3 - Set Parameter (能力协商)
Source 选择参数并发送:
Source -> Sink:
SET_PARAMETER rtsp://192.168.49.1/wfd1.0 RTSP/1.0
CSeq: 3
Content-Type: text/parameters
Content-Length: <length>
wfd_video_formats: 00 00 01 01 00000001 00 00000000 00000000 00 0000 0000 00 none none
wfd_audio_codecs: AAC 00000001 00
wfd_client_rtp_ports: RTP/AVP/UDP;unicast 19000 0 mode=play
wfd_uibc_setting: enable
2.4 M4 - Setup (建立传输通道)
Source -> Sink:
SETUP rtsp://192.168.49.1/wfd1.0 RTSP/1.0
CSeq: 4
Transport: RTP/AVP/UDP;unicast;client_port=19000-19001
Require: org.wfa.wfd1.0
Sink -> Source:
RTSP/1.0 200 OK
CSeq: 4
Transport: RTP/AVP/UDP;unicast;client_port=19000-19001;server_port=19002-19003
Session: 12345678;timeout=60
2.5 M5 - Play (开始播放)
Source -> Sink:
PLAY rtsp://192.168.49.1/wfd1.0 RTSP/1.0
CSeq: 5
Session: 12345678
Sink -> Source:
RTSP/1.0 200 OK
CSeq: 5
Session: 12345678
阶段3:RTP/RTCP 音视频传输
RTP 包结构
RTP Header (12 bytes):
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|V=2|P|X| CC |M| PT | sequence number |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| timestamp |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| synchronization source (SSRC) identifier |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
RTP Payload:
- Video: H.264 NAL units
- Audio: AAC frames
RTCP 包结构
RTCP SR (Sender Report):
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|V=2|P| RC | PT=SR=200 | length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| SSRC of sender |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| NTP timestamp, most significant word |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| NTP timestamp, least significant word |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| RTP timestamp |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| sender's packet count |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| sender's octet count |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
阶段4:UIBC (用户输入回传)
UIBC 允许 Sink 将触摸、键盘等输入回传给 Source。
Source -> Sink (M16):
SET_PARAMETER rtsp://192.168.49.1/wfd1.0 RTSP/1.0
CSeq: 16
Content-Type: text/parameters
Content-Length: <length>
wfd_uibc_setting: enable
wfd_uibc_capability: input_category_list=HIDC;hidc_cap_list=mouse keyboard
三、WiFi 数据包解析
1. Probe Request/Response (WFD IE)
Probe Request Frame:
[802.11 Header]
[SSID: "DIRECT-xx"]
[Supported Rates]
[WFD IE] ← Miracast关键信息
- Device Type (Source/Sink)
- Session Management Control Port (7236)
- Maximum Throughput
- WFD Information Elements
WFD IE 结构:
WFD IE (Information Element):
Element ID: 221 (Vendor Specific)
Length: Variable
OUI: 50-6F-9A (Wi-Fi Alliance)
OUI Type: 0x0A (WFD)
Sub-elements:
- Device Type (0x00)
- Session Management Control Port (0x01)
- Maximum Throughput (0x02)
- WFD Extended Capability (0x03)
- Local IP Address (0x04)
- Associated BSSID (0x05)
- WFD Session Information (0x06)
- WFD Alternative MAC Address (0x07)
2. P2P Action Frame
P2P Action Frame:
[802.11 Header]
[Category: Public Action (0x04)]
[Action: P2P (0x7F)]
[P2P Attributes]
- P2P Capability
- P2P Device Info
- P2P Group Owner Intent
- P2P Configuration Timeout
- P2P Listen Channel
- P2P Operating Channel
3. RTSP 数据包(TCP)
Ethernet Header (14 bytes)
IP Header (20 bytes)
TCP Header (20 bytes)
RTSP Message:
OPTIONS * RTSP/1.0\r\n
CSeq: 1\r\n
Require: org.wfa.wfd1.0\r\n
User-Agent: WFD/1.0\r\n
\r\n
4. RTP 数据包(UDP)
Ethernet Header (14 bytes)
IP Header (20 bytes)
UDP Header (8 bytes)
RTP Header (12 bytes)
RTP Payload (H.264 NAL or AAC)
四、关键参数说明
视频格式参数 (wfd_video_formats)
格式: 00 00 01 01 00000001 00 00000000 00000000 00 0000 0000 00 none none
解析:
- 00 00: Native (1920x1080p60)
- 01: Preferred Display Mode
- 01: H264 Profile (High)
- 00000001: H264 Level (4.0)
- 00: CEA Mask (支持的分辨率位图)
- 00000000: VESA Mask
- 00000000: HH Mask
- 00: Latency
- 0000: Minimum Slice Size
- 0000: Slice Encapsulation
- 00: Frame Rate Control
- none: 3D Video Formats
- none: 3D Video Formats
音频编解码参数 (wfd_audio_codecs)
格式: AAC 00000001 00
解析:
- AAC: 音频编解码器
- 00000001: 支持的AAC模式位图
- 00: LPCM模式(不支持)
五、完整交互时序图
Source Sink
| |
|-- Wi-Fi Probe (WFD IE) ------>|
|<-- Wi-Fi Probe Response ------|
| |
|-- P2P Device Discovery ------->|
|<-- P2P Device Discovery ------|
| |
|-- P2P GO Negotiation -------->|
|<-- P2P GO Negotiation --------|
| |
|-- P2P Provisioning ----------->|
|<-- P2P Provisioning ----------|
| |
|-- DHCP Request --------------->|
|<-- DHCP Response (IP分配) -----|
| |
|-- RTSP OPTIONS -------------->|
|<-- RTSP 200 OK --------------|
| |
|-- RTSP GET_PARAMETER -------->|
|<-- RTSP 200 OK (能力列表) -----|
| |
|-- RTSP SET_PARAMETER -------->|
|<-- RTSP 200 OK --------------|
| |
|-- RTSP SETUP ---------------->|
|<-- RTSP 200 OK (端口信息) -----|
| |
|-- RTSP PLAY ----------------->|
|<-- RTSP 200 OK --------------|
| |
|-- RTP Video Stream ---------->|
|-- RTP Audio Stream ---------->|
|<-- RTCP SR/RR ----------------|
| |
|-- RTSP TEARDOWN ------------->|
|<-- RTSP 200 OK --------------|