Miracast(五)RTSP

2024-02-11 13:32
文章标签 rtsp miracast

本文主要是介绍Miracast(五)RTSP,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、WFD Source作为RTSP Server,如果使用P2P进行WFD的连接,那么WFD device应该在WPA2四次握手的M4(不是RTSP M4)消息后的90s内完成RTSP的TCP连接

二、RTSP流程

三、

M1-M7以及M16实例以及说明

以wireshark录到的空中包进行说明,空中包仅仅说明的是正常交互时的数据

1、M1 

M1 Request(Source->Sink)

(1)Date和Server不是必须的,可以不用关注

(2)CSeq的值可以随机设置,但是之后Source每次发送Request,Cseq值都要加1

(3)其余的是固定格式

M1 Response(Sink->Source)

(1)CSeq的值需要跟Request的值相同

(2)其余的是固定格式

2、M2

M2 Request(Sink->Source)

(1)CSeq的值可以随机设置,但是之后Sink每次发送Request,Cseq值都要加1

(2)其余的是固定格式

M2 Response(Source->Sink)

(1)Date和Server不是必须的,可以不用关注

(2)CSeq的值需要跟Request的值相同

(3)其余的是固定格式

3、M3

M3 Request(Source->Sink)

下面是content的内容

(1)Date和Server不是必须的,可以不用关注

(2)Content-length表示Content的长度,即上图中所有数据的总长度。

(3)上一次Source发送Request时CSeq的值是1,所以这一次CSeq需要加1,即CSeq的值为2

(4)上图中每一行都是Source想要从Sink获取的属性,Sink端只需要将自己支持的属性发送给Source即可

(5)其余的是固定格式

M3 Response(Sink->Source)

下面是content的内容

(1)Content-length表示Content的长度,即上图中所有数据的总长度。

(2)CSeq的值需要跟Request的值相同

(3)可以看到,Sink只回复了手机wfd_client_rtp_ports、wfd_audio_codecs、wfd_video_formats、wfd_content_protection、wfd_uibc_capability五项以及Sink端对应的具体属性值,其余的sink端不支持,所以没有回复。各项的具体信息参照wfd的协议

4、M4 

M4 Request(Source->Sink)

下面是content的内容

(1)Date和Server不是必须的,可以不用关注

(2)Content-length表示Content的长度,即上图中所有数据的总长度。

(3)上一次Source发送Request时CSeq的值是2,所以这一次CSeq需要加1,即CSeq的值为3

(4)上图中每一行都是Source根据Sink发送的属性以及自己支持的属性进行对比协商后确定的。

(5)其余的是固定格式

M4 Response(Sink->Source)

(1)CSeq的值需要跟Request的值相同

(2)其余的是固定格式

到这里WFD capability negotiation就完成了

5、M5

M5 Request(Source->Sink)

下面是content的内容

(1)Date和Server不是必须的,可以不用关注

(2)Content-length表示Content的长度,即上图中所有数据的总长度。

(3)上一次Source发送Request时CSeq的值是3,所以这一次CSeq需要加1,即CSeq的值为4

(4)上图中wfd_trigger_method: SETUP\r\n表示Source请求Sink触发SETUP动作

(5)其余的是固定格式

M5 Response(Sink->Source)

(1)CSeq的值需要跟Request的值相同

(2)其余的是固定格式

6、M6

M6 Request (Sink->Source)

(1)上一次Sink发送Request时CSeq的值是1,所以这一次CSeq需要加1,即CSeq的值为2

(2)rtsp://192.168.137.95/wfd1.0/streamid=0就是M4 Request中wfd-presentation-url对应的值

(3)Transport中client_port表示的是sink端监听RTP流(里面封装的是MPEG2-TS流)的端口,我们目前只支持RTP,不支持RTCP,所以只有一个端口,如果支持RTCP,client_port应该这么设置client_port=1028-1029

(4)其余的是固定格式

M6 Response(Source->Sink)

(1)Date和Server不是必须的,可以不用关注

(2)CSeq的值需要跟Request的值相同

(3)Session后面的值是session id,timeout表示的是wfd M16发送的最大间隔是30s,两次M16 request的发送间隔,要小于30-5s,M16用wfd用来周期性确定sink端状态的,类似于心跳

(4)client_port是sink端监听RTP流的端口,server_port是source端发送RTP流的端口

(5)其余的是固定格式

到这里WFD session建立完成

7、M7

M7 Request (Sink->Source)

(1)上一次Sink发送Request时CSeq的值是2,所以这一次CSeq需要加1,即CSeq的值为3

(2)rtsp://192.168.137.95/wfd1.0/streamid=0就是M4 Request中wfd-presentation-url对应的值

(3)Session不是必须的,可以没有

(4)其余的是固定格式

M7 Response(Source->Sink)

(1)Date和Server、Session、Range不是必须的,可以不用关注

(2)CSeq的值需要跟Request的值相同

(3)其余的是固定格式

到这里Source端开始发送Audio/Video stream

8、M16

M16 Request(Source->Sink)

(1)Date、Server、Session不是必须的,可以不用关注

(2)上一次Source发送Request时CSeq的值是4,所以这一次CSeq需要加1,即CSeq的值为5

(3)M16 Request是source端根据M6 Response中设置的timeout值进行周期发送的,用来确定sink端是否在线。

(4)其余的是固定格式

M16 Response(Sink->Source)

(1)CSeq的值需要跟Request的值相同

(2)其余的是固定格式

四、

WFD RTSP中用到的一些参数

注意:

DIGIT:表示十进制数字

HEXDIG:表示十六进制数字

SP:表示空格

CR:表示\r

LF:表示\n

CRLF:表示\r\n

IPADDRESS:表示IP地址

IPPORT:表示端口号0-65535

N*N HEXDIG:表示N个byte

1、wfd-audio-codecs指定音频格式

 

 

 

例如:wfd_audio_codecs: LPCM 00000003 00, AAC 0000000f 00, AC3 00000007 00\r\n

这里面包含3个sink-audio-list,分别是LPCM 00000003 00和AAC 0000000f 00以及AC3 00000007 00中间用逗号空格分隔开。其他解释参照协议

2、wfd-video-formats

例如:wfd_video_formats: 40 00 01 10 0001bdeb 051557ff 00000fff 10 0000 001f 11 0780 0438, 02 10 0001bdeb 155557ff 00000fff 10 0000 001f 11 0780 0438\r\n

这里面包含2个H.264-codes,分别是01 10 0001bdeb 051557ff 00000fff 10 0000 001f 11 0780 0438和02 10 0001bdeb 155557ff 00000fff 10 0000 001f 11 0780 0438中间用逗号空格分隔开。其他解释参照协议

3、wfd-content-protection

具体解释参照协议

4、wfd-trigger-method

这个参数是WFD Source使用的,用来触发WFD Sink向WFD Soucre发起一个操作

例如:wfd_trigger_method: SETUP\r\n

5、wfd-presentation-url

这个参数是M6-RTSP Setup Request中用到的一个url,用来创建sink到source端的WFD Session,这个url对应的端口号就是RTSP M4 Request里面的

wfd-client-rtp-ports中的端口号

我们只用wfd-url0就行,wfd-url1为none,对应下面表中标记处

例如:wfd_presentation_URL: rtsp://192.168.137.95/wfd1.0/streamid=0 none\r\n

6、wfd-client-rtp-ports

这个参数是wfd sink用来通知source的,说明sink端会监听哪个端口,并从该端口获取RTP数据流

我们不用关心rtp-port1,直接设置成0

例如:wfd_client_rtp_ports: RTP/AVP/UDP;unicast 1028 0 mode=play\r\n

7、wfd-uibc-capability

这个参数用来描述UIBC的相关属性,如果支持UIBC,在wfd IE中的

WFD Extended Capability IE中也要进行相应的设置。具体参照协议

例如:wfd_uibc_capability: input_category_list=HIDC;generic_cap_list=Keyboard, Mouse;hidc_cap_list=Keyboard/USB, Mouse/USB;port=46531\r\n

8、wfd-uibc-setting

这个参数用来enable/disable uibc

例如:wfd_uibc_setting: enable\r\n

五、

RTSP过程中的timeout

1、WFD Source和WFD Sink之间的TCP连接成功以后,WFD Source需要在6s内发送RTSP M1 Request

2、RTSP Request和对应的Response之间超时是5s,例如:RTSP M1 Request和RTSP M1 Response之间

3、在WFD Session建立之前,Response和下一个Request发送成功的超时是6s,例如:接收到RTSP M3 Response和发送TSP M4 Reques之间

4、在WFD Session建立之前,发送上一个Response和成功发送下一个Request之间的超时是6s,例如:发送RTSP M2 Response和发送RTSP M3 Request之间

5、接收到RTSP M6 Response以后,到发送RTSP M7 Request的超时有两个值,如果支持HDCP则是9s,如果不支持HDCP则是6s

因为我们在RTSP Session建立以后只进行RTSP M16的交互,所以其他的超时不关心。

六、WFD keep-alive

WFD keep-alive是用来周期性确定WFD Session状态的

1、keep-alive的timeout是在RTSP M6的Session中设置的

2、两次连续的RTSP M16之间的时间应该小于(timeout value – 5)s

3、WFD sink接收到RTSP M16 Request以后应该回复RTSP M16 Response

4、如果WFD Source在timeout时间内没有接收到RTSP M16 Response,则WFD Source会断开RTSP和RTP连接,同样如果WFD Sink在timeout时间内没有接收到RTSP M16 Request,则WFD Sink也会断开RTSP和RTP连接。

这篇关于Miracast(五)RTSP的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/699909

相关文章

Android平台播放RTSP流的几种方案探究(VLC VS ExoPlayer VS SmartPlayer)

技术背景 好多开发者需要遴选Android平台RTSP直播播放器的时候,不知道如何选的好,本文针对常用的方案,做个大概的说明: 1. 使用VLC for Android VLC Media Player(VLC多媒体播放器),最初命名为VideoLAN客户端,是VideoLAN品牌产品,是VideoLAN计划的多媒体播放器。它支持众多音频与视频解码器及文件格式,并支持DVD影音光盘,VCD影

浅析网页不安装插件播放RTSP/FLV视频的方法

早期很多摄像头视频流使用的是RTSP、RTMP协议,播放这类协议的视频通常是在网页上安装插件。但现在越来越多的用户,对于网页安装插件比较反感,且随着移动设备的普及,用户更多的希望使用手机、平板等移动设备,直接可以查看这些协议的视频。那是否有什么方案可以直接网页打开RTSP、RTMP协议的视频,直接观看不用安装插件呢?而且对于摄像头的数据,尽可能低延迟的获取实时画面。  其实很多摄像头厂家也注意到

使用WebRtcStreamer播放rtsp视频

一、使用步骤 1.安装WebRtcStreamer包 代码如下(示例): {"name": "default","version": "0.1.0","private": true,"scripts": {"serve": "vue-cli-service serve","build": "vue-cli-service build"},"dependencies": {"core-js":

LiveGBS流媒体平台GB/T28181功能-支持RTSP流分发支持GB28181国标流转RTSP流如何配置RTSP视频直播流输出

LiveGBS支持RTSP流分发支持GB28181国标流转RTSP流如何配置RTSP视频直播流输出 1、开启RTSP1.1、页面配置1.2、ini文件配置 2、配置RTSP流用户密码3、RTSP流地址(接口调用)4、RTSP流地址(静态拼接获取)5 、相关问题6、搭建GB28181视频直播平台 1、开启RTSP 1.1、页面配置 在基础配置 -> 流媒体服务配置中配置,RTSP

rtsp和onvif的区别和联系

RTSP(Real-Time Streaming Protocol)和ONVIF(Open Network Video Interface Forum)在视频监控系统和技术标准方面各有其独特的作用和区别,同时它们之间也存在一定的联系。以下是对RTSP和ONVIF的区别和联系的详细分析: rtsp和onvif区别 定义和用途: RTSP:是一种用于在互联网上控制实时多媒体流传输的协议。它允许客户

在安卓和Windows下使用Vizario H264 RTSP

Unity2021.3.35f1,运行模式为ENGINE_SERVER 1.环境设置  Windows设置  安卓设置 2.代码修改 ConnectionProperties中的server必须与真实IP一样,所以需要新增一个获取IP的函数 public string GetLocalIPAddress(){IPHostEntry host;string localIP = "

在国产芯片上实现YOLOv5/v8图像AI识别-【4.2】RK3588获取USB摄像头图像推流RTSP更多内容见视频

本专栏主要是提供一种国产化图像识别的解决方案,专栏中实现了YOLOv5/v8在国产化芯片上的使用部署,并可以实现网页端实时查看。根据自己的具体需求可以直接产品化部署使用。 B站配套视频:https://www.bilibili.com/video/BV1or421T74f 前言 在实际生产过程中,有很多时候不光是通过网络获取rtsp视频流,通常会采用在板子上插上USB摄像头获取画面。 今天

记录:Rk3588播放RTSP视频流有延时和卡顿(CPU性能问题)

前言         前段时间做项目,花了几天时间开发了一款基于RK3588平台,进行RTSP和RTP的解码软件,接收其他软件发送的UDP控制指令,进行位置、大小、显示的前后顺序、播放链接、参数等动态调整,使用QT+Gstreamer框架开发。 管道:rtspsrc location=rtsp://admin@passpwd:192.9.200.113 port-range=10000-100

RTSP详细介绍

RTSP协议     RTSP(Real Time Stream Protocol,实时流协议)是应用级协议,控制实时数据的发送。RTSP提供了一个可扩展框架,使实时数据,如音频与视频的受控、点播成为可能。数据 源包括现插数据与存储在剪辑中的数据。该协议目的在于控制多个数据发送连接,为选择发送通道如UDP、多播UDP与TCP等提供途径,并为选择基于RTP 上发送机制提供方法。 一.

RTSP 详细消息交互

RTSP(Real Time Streaming Protocol)实时流协议,是TCP/IP协议体系中的一个应用层协议。RTSP在体系结构上位于RTP和RTCP之上,它使用TCP或RTP完成数据传输。 RTSP没有“连接”这个概念,而由RTSP会话(session)代替(服务器端保持一个由识别符标记的会话)。RTSP会话没有绑定传输层连接(如TCP连接)。在RTSP会话期间,RTSP客户端