【Miracast 协议详解】

Miracast 协议详解

一、Miracast 概述

Miracast 基于 Wi‑Fi Display (WFD) 标准,用于将移动设备屏幕无线投射到显示设备。主要组件:

  1. Wi‑Fi Direct (P2P):建立直连
  2. RTSP:会话控制
  3. RTP/RTCP:音视频传输
  4. 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 --------------|
相关推荐
列逍2 小时前
Linux文件(一)
linux·文件操作·write·read·重定向·open·文件描述符
Ghost Face...2 小时前
深入解析dd命令:缓存与磁盘速度之谜
linux·缓存
dishugj2 小时前
【Linux】CENTOS 7服务器chronyd同步本地时间服务器时间设置详解
linux·运维·服务器
*老工具人了*2 小时前
Linux I/O写数据全链路拆解
linux·运维
_OP_CHEN2 小时前
【Git原理与使用】(四)Git 远程操作与标签管理全解析:从分布式协作到版本标记最全攻略
linux·运维·分布式·git·git远程仓库·企业级组件·git标签管理
艾莉丝努力练剑2 小时前
【Linux基础开发工具 (七)】Git 版本管理全流程与 GDB / CGDB 调试技巧
大数据·linux·运维·服务器·git·安全·elasticsearch
shandianchengzi2 小时前
【记录】ARM|Ubuntu 24 快速安装 arm-none-eabi-gdb 及 QEMU 调试实战
linux·arm开发·ubuntu·arm·qemu
学困昇2 小时前
Linux 进程概念与内存管理详解(含冯诺依曼体系结构、环境变量、调度算法)
linux·c语言·开发语言·网络·数据结构·c++
为什么要内卷,摆烂不香吗2 小时前
sed 流编辑器练习自用
linux·运维·编辑器