Miracast由WiFi联盟制定,以WiFi-Direct、IEEE802.11为无线传输标准,允许手机向电视或其他接收设备进行无线投送视频、图片。和Miracast类似的投屏协议,还有Airplay、DLNA、chromecast等,现在主要对今天主角Miracast协议展开分析。

目录

一、Miracast通信架构

二、设备发现

1、WiFi-P2P

2、TDLS

3、Infrastructure

 三、音视频支持格式

1、音频支持格式

2、视频支持格式

 四、会话流程分析

1、会话流程

2、会话管理

3、媒体协商

4、音视频传输链路

 五、时钟同步

 六、数据包格式

1、WFD数据格式

2、TS打包流程

3、数据包层级关系

 七、切换传输协议

1、UDP切换TCP

2、SET_PARAMETER应答码

八、RTSP方法与示例

1、双端支持的RTSP方法

2、RTSP数据包示例


一、Miracast通信架构

Miracast基于WiFi P2P,或TDLS,或Infrastructure进行设备发现,位于OSI模型的数据链路层。而媒体传输控制使用RTSP协议,还有远程I2C数据读写、UIBC用户输入反向信道、HDCP高带宽内容保护等,位于OSI模型的TCP/IP传输控制层与网络层。其中,由音视频数据封装成PES包,经过HDCP内容保护,再封装成TS包,接着封装成RTP包,使用RTSP协议发送。如下图所示:

二、设备发现

Miracast支持三种设备发现形式:WiFi-P2P、TDLS、Infrastructure。

1、WiFi-P2P

P2P是点对点连接,基于WiFi-Direct实现WiFi直连,不需要经过无线热点。如下图所示:

2、TDLS

TDLS,全称Tunneled Direct Link Setup,隧道直连建立,通过AP(Access Point)或者GO(Group Owner)连接。如下图所示:

3、Infrastructure

Infrastructure经过AP无线热点,通过组播实现设备发现服务。如下图所示:

 三、音视频支持格式

1、音频支持格式

音频支持的格式包括: LPCM、AAC-LC、AC-3、E-AC-3、Dolby TrueHD、AC-4、MPEG-4 AAC、MPEG-H 3D Audio等。其中,采样率、采样位数、声道数有所限制。如下图所示:

2、视频支持格式

视频支持格式包括:H264、HEVC。其中,H264的profile支持CBP(Constraint Baseline Profile)和RHP(Restrict High Profile)两种。对比CBP和RHP可以看出,CBP只支持I帧P帧、CAVLC、YUV420P等。如下图所示:

 四、会话流程分析

会话是WFD Source与WFD Sink双端交互,这里主要讲解会话流程、会话管理、媒体协商、音视频传输链路。

1、会话流程

会话流程包括:服务发现、建立连接、媒体协商、设置参数、媒体流传输、RTSP控制命令。具体如下图所示:

2、会话管理

设备发现、服务发现、建立连接这三步运行在MAC层。用户输入反向信道、媒体协商、码流控制、内容保护这四步运行在LLC层。如下图所示:

3、媒体协商

媒体协商是Source和Sink双端发送OPTIONS、SET_PARAMETER进行媒体能力交换。如下图所示:

4、音视频传输链路

音视频发送端链路自底向上:WiFi PHY->WiFi MAC->LLC,经过音视频编码、加密、打包,最后使用TCP/IP网络传输。接收端链路:接收数据包后,经过拆包、解密、解码,最后渲染。如下图所示:

 五、时钟同步

发送端在音视频编码时,加入PCR时钟,然后音视频流打包时加入主时钟,经过无线传输。接收端收到数据后进行拆包,加入从时钟用于时钟同步,得到音视频流再解码渲染。如下图所示:

 六、数据包格式

1、WFD数据格式

WFD数据包由IP头、UDP头、RTP头、TS媒体包组成,共1356字节。其中,单个TS包为188字节。如下图所示:

2、TS打包流程

TS打包流程:音视频数据->PES打包->HDCP内容加密->形成TS,即Transport Stream传输流。如下图所示:

3、数据包层级关系

RTP包的payload是TS包,而TS包的payload是PES包,层级关系如下图:

 七、切换传输协议

1、UDP切换TCP

媒体流传输过程中,允许实时切换传输协议。UDP切换TCP,首先发送SET_PARAMETER请求:wfd2_transport_switch: RTP/AVP/TCP,然后发送SETUP请求交换端口,如下示意图:

2、SET_PARAMETER应答码

在SET_PARAMETER应答时,相关应答码如下表:

应答码描述
400RTSP语法错误
401RTP端口不可用
404无效参数(不在媒体协商中)
415不支持的格式
451未知参数
453超出码率
457不支持的profile或level
458无法更新参数
465未知原因
552不接受修改分辨率
553不接受修改帧率

八、RTSP方法与示例

1、双端支持的RTSP方法

WFD Source和Sink双端支持的RTSP方法如下。其中,Source发送支持OPTIONS、org.wfa.wfd1.0、SET_PARAMETER、GET_PARAMETER,而Sink发送端在Source端基础上,还支持SETUP、PLAY、PAUSE、TEARDOWN。具体如下表:

2、RTSP数据包示例

RTSP数据包从M1到M7类型,还有M16类型,示例如下:

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐