Miracast投屏协议深入剖析
Miracast由WiFi联盟制定,以WiFi-Direct、IEEE802.11为无线传输标准,允许手机向电视或其他接收设备进行无线投送视频、图片。和Miracast类似的投屏协议,还有Airplay、DLNA、chromecast等,现在主要对今天主角Miracast协议展开分析。
Miracast由WiFi联盟制定,以WiFi-Direct、IEEE802.11为无线传输标准,允许手机向电视或其他接收设备进行无线投送视频、图片。和Miracast类似的投屏协议,还有Airplay、DLNA、chromecast等,现在主要对今天主角Miracast协议展开分析。
目录
一、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应答时,相关应答码如下表:
应答码 | 描述 |
400 | RTSP语法错误 |
401 | RTP端口不可用 |
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类型,示例如下:
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)