GB28181国检推流

Wesley13
• 阅读 699

     GB28181国检有一向内容是实时播放摄像机流,经过一番努力,搞定这个功能,现分享心得:

首先需要了解流程,说简答点就是视频流从哪里来到什么地方去,下图描述了视频流推流,转发的

基本过程:信令交互成功以后,摄像机(媒体流发送者)推送流到媒体服务器,媒体服务器在指定

的端口接收到视频流后,转发给流媒体接收者(例如某台PC的某个空闲端口)。

    讲了基本流程,我们来看下28181要求的视频流格式。GB28181要求传输的视频流格式为PS流,或者

H264裸流,又或者是MP4格式,其中PS流及H264裸流较常见。PS流是如何封装的这里不细述,可以查询

相关文档。如何区分是PS流还是H264裸流有个简答的方法:用wireshark抓包,数据包类型是rtp的是PS流

数据类型是udp是H264裸流。

   准备工作完毕,开始讲推流。推流的前提是信令交互已经成功。下面说下基于jpmedia推流的基本步骤。

  GB28181国检推流

                                                                 图1

1) static boolInitialize() 

      输入:无 输出:无 返回值:true 表示初始化成功,false 表示失败。

      初始化接口库,媒体服务器接收到 sip 服务器 invite请求后即执行该操作,如图 1 第 2 步。

 2) bool CreateRecvTransport(unsignedshortrecvPort)
  

      输入:端口号 输出:无 返回值:true表示创建接收端口成功,false表示失败。

     备注:媒体服务器收到invite请求后发送自身 sdp 信息,recvPort 需作为 sdp 指定 端口。

     媒体服务器收到sip 服务器 invite 请求后
    即执行该操作,如图 1 第2 步。

3)bool AttachMediaSender(conststring&mediasenderaddress,unsignedshortport)

     输入:媒体流发送者 IP, 端口 输出:无 返回值:true 表示关联媒体流发送者成功,false 表示失败。

     备注:关联媒体流发送者 IP 地址及端口,图 1 第 6 步执行该操作,sdp 信息包含了媒 体流发送者 IP 地址及端口号。

4)bool CreateForwardTransport(unsignedshortsendport)const

     输入:本地转发端口 输出:无 返回值:true

     表示创建转发端口成功,false表示失败。 备注:自行指定未使用端口即可,图 1 第 8 步执行该操作。

5)bool AttachMediaReceiver(conststring&mediareceiveraddress,unsignedshortport)const

    输入:流媒体接收者 IP 地址,端口 输出:无 返回值:true 表示关联媒体流接收者成功,false表示失败。

    备注:图 1 第 12 步执行该操作。

6)void DestroySendTransport()const

     输入:无 输出:无 返回值:无 备注:释放端口资源,图 1 第15 步执行该操作。

7)void DestroyRecvTransport()const

    输入:无 输出:无 返回值:无 备注:释放端口资源,图 1 第17 步执行该操作。

    如果出现推流花屏可以用wireshark抓包保存成文件。播放保存下来的文件,如果视频正常,说明视频源

没有问题。如果抓包保存文件见下图。

GB28181国检推流

                                                                                            图2

GB28181国检推流

                                                                                   图3

如需交流请加 流媒体/Ffmpeg/音视频 127903734,库下载地址http://pan.baidu.com/s/1hsysYuo

GB28181国检推流

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
2星期前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Wesley13 Wesley13
2年前
GB28181对接视频流
   今天抽空写下以GB28181的方式获取摄像机视频流以备后用,同时也希望能帮助到正着手开发GB28181对接视频的同学,这块的资料实在不多。今天讲的内容不涉及到平台对接,平台对接下次有时间再讲,平台对接相对更麻烦点。通过GB28181获取摄像机视频流,首先需要摄像机支持GB28181,如何知道摄像机是否支持GB28181协议呢?请看下图:
Wesley13 Wesley13
2年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
2年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
2年前
JAVA + LR实现apache流媒体的性能测试
最近的一个项目,视频点播系统,使用apache实现的流媒体服务器。其实准确的说叫做伪流(HTTPPseudoStreaming),基本原理和概念自行了解吧。让我简单的描述就是仍然是HTTP下载,播放器播放本地缓存。只不过它也实现了一些和正规流媒体服务类似的功能。视频点播类系统的性能测试,说简单了主要就是模拟大量用户去看视频。服务端监控整体性能,客户端
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
6个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这