**RTSP视频流开发**

RTSP视频开发:
1.使用VLC播放RTSP视频流,然后使用wireshark抓VLC的包,找到RTSP交互报文
2.报文如下:

 OPTIONS rtsp://192.168.0.212:554/testStream RTSP/1.0    //客户端向服务器发送,说RTSP服务你又那些操作CSeq: 2User-Agent: LibVLC/3.0.4 (LIVE555 Streaming Media v2016.11.28)RTSP/1.0 200 OK         //RTSP服务器响应客户端CSeq: 2Date: Tue, Sep 01 2009 00:01:34 GMTPublic: OPTIONS, DESCRIBE, SETUP, TEARDOWN, PLAY, PAUSE, GET_PARAMETER, SET_PARAMETER  //RTSP响应客户端  说我这些操作DESCRIBE rtsp://192.168.0.212:554/testStream RTSP/1.0      //客户端向服务器端发送DESCRIBE,用于得到URI所指定的媒体描述信息,一般是SDP信息。客户端通过Accept头指定客户端可以接受的媒体述信息类型。CSeq: 3User-Agent: LibVLC/3.0.4 (LIVE555 Streaming Media v2016.11.28)Accept: application/sdpRTSP/1.0 200 OK    //服务器响应CSeq: 3Date: Tue, Sep 01 2009 00:01:36 GMTContent-Base: rtsp://192.168.0.212/testStream/Content-Type: application/sdpContent-Length: 495//媒体播放的信息v=0o=- 1251763203553668 1 IN IP4 192.168.0.212s=Session streamed by "testOnDemandRTSPServer"i=testStreamt=0 0a=tool:LIVE555 Streaming Media v2016.11.28a=type:broadcasta=control:*a=range:npt=0-a=x-qt-text-nam:Session streamed by "testOnDemandRTSPServer"a=x-qt-text-inf:testStreamm=video 0 RTP/AVP 96   c=IN IP4 0.0.0.0b=AS:500a=rtpmap:96 H264/90000  //采用视频采用H264格式a=fmtp:96 packetization-mode=1;profile-level-id=640028;sprop-parameter-sets=Z2QAKKzoB4AiflQ=,aO48MA==  //这个是音频 音频格式是AAC a=control:track1SETUP rtsp://192.168.0.212/testStream/track1 RTSP/1.0   //建议视频流CSeq: 4User-Agent: LibVLC/3.0.4 (LIVE555 Streaming Media v2016.11.28)Transport: RTP/AVP;unicast;client_port=49474-49475RTSP/1.0 200 OKCSeq: 4Date: Tue, Sep 01 2009 00:01:36 GMTTransport: RTP/AVP;unicast;destination=192.168.0.15;source=192.168.0.212;client_port=49474-49475;server_port=6970-6971Session: FA18BF48;timeout=65PLAY rtsp://192.168.0.212/testStream/ RTSP/1.0      //双方达成一致,开始播放视频CSeq: 5User-Agent: LibVLC/3.0.4 (LIVE555 Streaming Media v2016.11.28)Session: FA18BF48Range: npt=0.000-RTSP/1.0 200 OKCSeq: 5Date: Tue, Sep 01 2009 00:01:36 GMTRange: npt=0.000-Session: FA18BF48RTP-Info: url=rtsp://192.168.0.212/testStream/track1;seq=6674;rtptime=191607758

3.使用tcpdump这个抓包工具,在设备进行抓包,然后将抓的报文和PC机使用wireshark抓包进行对比,格式那个地方不对,就找花时间找问题所在,让你的设备的RTSP交互报文和PC机上抓包的RTSP交互报文格式一致.当时我遇到的问题是因为音频而导致的,我在大华球机上,不带音频的信息,我写好RTSP视频信息时,很高兴,然后向领导交叉,我的公司的设备播放客户的RTSP视频流时出现了问题,客户的视频带音频.然后我使用VLC播放客户的RTSP视频流,抓包,发现, 客户有两次SETUP 第一次时间里视频套截字建立,第二次是音频套接字建立.就是因为这个导致报文格式不一样.(对于H264结构不懂,可以看看这个http://www.iosxxx.com/blog/2017-08-09-%E4%BB%8E%E9%9B%B6%E4%BA%86%E8%A7%A3H264%E7%BB%93%E6%9E%84.html)

4.报文格式一样是,视频还播放不出来,当时我就纳闷,到底是为什么呢?只有一个办法就是抓包.获取到的视频数据,然后看看我拼帧是否拼对了,一看,my god.我的神啊,这是和我看开玩笑吗,我对视频帧处理,和抓包获取的视频帧完全牛头不对马嘴.然后我根据用户采用RTP对H264视频进行打包方式,进行拼帧,这个做完之后,发现视频卡顿,根据序列号进行判断是否设备丢包了,同时在设备进行抓包,比较,发现抓包的视频数据是连续的,然而设备却显示是丢包,这是为啥.我想了很久也是没有想明白这是为什么,当时想出现丢包,我就叫把视频给丢掉,然后等I帧来,才开始接受数据.后来我看一个大牛博客,上面说,因为延时设备没有收到包,你取数据时,没有取到,这个就造成丢包,然而设备还是接受到了.最后我把调用延时改小一点,视频问题解决了.

5.处理AAC音频,我做的很简单,将AAC数据给取出来,加上我公司的对AAC音频头.就这样RTSP视频流协议就做好了(AAC音频可以看这个博客https://blog.csdn.net/bsplover/article/details/7426476)

总结:
1.保持一颗乐观的心态.
2.找问题不能模糊化,要做到精确定位.
3.代码规范.写代码时多思考

RTSP视频流开发经验总结相关推荐

  1. FFmpeg中拉取rtsp视频流并缩放显示测试代码

    之前在https://blog.csdn.net/fengbingchun/article/details/92198857中给出过仅拉取rtsp视频流的测试代码,这里在此代码的基础上进行扩充,包括设 ...

  2. 网页中插入VLC播放器播放rtsp视频流步骤

    1.      仿照http://download.csdn.net/detail/haowenxin123456789/8044245 中步骤: 2.      从http://www.videol ...

  3. PHP如何调取vlc播放rtsp,H5+VLC播放RTSP视频流

    最新项目涉及到摄像头,这篇文章记录一下在VUE中播放RTSP视频流. 这篇文章主要介绍使用VLC插件播放RTSP视频流,目前支持的浏览器有 360浏览器.2345浏览器,可用于一些对播放器要求不高的项 ...

  4. 海康摄像头取、录像机RTSP视频流的字串格式

    海康摄像头取.录像机RTSP视频流的字串格式 主码流 rtsp://IP:554/h264/ch1/main/av_stream rtsp://IP:554/ISAPI/streaming/chann ...

  5. 网页播放rtsp视频流

    https://github.com/vbence/stream-m https://github.com/131/h264-live-player 网页播放rtsp视频流 原文:https://bl ...

  6. Winform中使用EasyPlayer-RTSP-Win开源组件实现播放RTSP视频流

    场景 开源RTMP组件EasyPusher-Android+EasyDarwin实现APP推流给RTSP流媒体服务器: 开源RTMP组件EasyPusher-Android+EasyDarwin实现A ...

  7. live555 接收rtsp视频流流程分析

    live555 接收rtsp视频流流程分析 RTSP交互流程 C表示RTSP客户端,S表示RTSP服务端 ① C->S: OPTIONrequest         //询问S有哪些方法可用 S ...

  8. python视频延迟严重_利用多进程降低opencv视频延迟处理rtsp视频流

    Python多进程opencv 前几天遇到了一个问题,利用opencv程序调取rtsp视频流,因为处理程序要消耗的CPU时间过于长,VideoCapture的read是按帧读取,所以经常导致内存溢出, ...

  9. Python Gstreamer播放rtsp视频流(海康IPCAM)

    Python Gstreamer播放rtsp视频流(海康IPCAM) 播放思路: 图解: 1.首先通过IPCAM的ip与用户等信息获得rtsp码:   海康新版IPCAM的rtsp地址规则为:rtsp ...

  10. 使用ffmpeg、nvdia解码rtsp视频流,cuda做NV12-RGBA转换

    本章是在nvidia_video_sdk_6.0.1的基础之上做封装的,我研究了其中的NvDecodeGL工程:由于自己工作会遇到显示多路rtsp视频流及解码的情况,所以进行了研究. 网上有其它的介绍 ...

最新文章

  1. Python matplotlib可视化:用Matplotlib的bar_label函数自定义条形图的数值标签、用Matplotlib的bar_label函数为条形图添加数值标记(在每一个条形的中部)
  2. ByteArrayOutputStream
  3. 简单插入排序,折半插入排序和2路插入排序 c源码
  4. 球球大作战为什么显示服务器神游,球球大作战不能玩怎么解决_球球大作战不能玩解决方案详细分析_好特教程...
  5. STM平台增加性能测试/稳定性测试部分【一】
  6. 模型越复杂越容易惰性_ML模型的惰性预测
  7. html设置页面的高度和宽度,web显示页面有图像上设置高度和宽度很重要
  8. [html] input上传文件可以同时选择多张吗?怎么设置?
  9. mybatis在指定库建表_使用MyBatis Plus自动添加数据库表中的创建时间、创建者、更新时间、更新者...
  10. Silverlight 入门
  11. C语言OJ项目参考(2963) 判断三角形
  12. cad边长提取lisp_用lisp怎么提取cad中文字-内容-*通用符匹配(值 :设定)生成excel文件...
  13. ttl计算机,TTL接口
  14. linux文件增加自定义属性,Linux 笔记...文件和目录属性useradd、userdel、usermod 、passwd...
  15. 互联网盈利模式,网络策划运营模式
  16. Windows Server 2012 R2 安装 Docker
  17. SpringBoot Banner 图片定制修改
  18. css设置overflow:hiden行内元素会发生偏移的现象
  19. springboot +mybatis实现多表一对一查询
  20. 学术圈很火的 超材料、超表面、超透镜:什么时候可以代替传统透镜?

热门文章

  1. 基于协同过滤的推荐算法
  2. 数字电路的基础知识(结合Verilog)
  3. postman并发测试_PostMan接口压力测试
  4. memtest86内存测试工具介绍
  5. windows系统mysql定时备份
  6. MySQL 定时备份数据库(非常全)
  7. 网易云音乐广告CTR预估模型演进过程
  8. 使用a标签下载文件时成了预览,并非是下载
  9. linux——makefile编写
  10. CM/CMR/CMP防火等级有何区别?CM/CMR/CMP级电缆网线如何选?