海康PS转H264的编码思想(带图码流解释)

2023-11-16

海康PS转H264的编码思想(带图码流解释)

本人PS流解析成H264的其余文章:
01PS流格式
02封装时遇到的重点问题
03海康PS转H264的编码思想(带图码流解释)

1 海康的PS流发包的顺序到底是如何发送的?
根据01PS流格式我们知道他的格式,由PS头,系统头,映射头,PES包(包括包头和视频或者音频数据);但是却不知道他是实际是怎么发包过来的,这也是导致我们编写代码的一个问题,他到底是完整的按一个PS包发过来还是一个个段的先发PS头,再发系统头,再发映射头和最后发PES包,还是先发PS头,再连续发系统头和映射头,然后再发PES包呢?这当时确实也是非常的困扰我,无法下手,于是经过几晚的通宵达旦研究下,终于搞懂他的发包过程。

1)看下面的PS流可以看到,他首先是连续的发送多个海康私有协议的包,这是一个完整的海康私有协议包,我们遇到直接扔掉即可。即利用后面第五第六个字节与PES包一样为包体长度,(00+66)hex换成十进制共102个字节扔掉,这是第一步。实际上第7,8字节也是字段信息,第九个字节即07是可选字段的长度,PES包一般为FF,这个私有包被海康处理过可能是FF可能不是,但这3个字节不用考虑,编码时只需要利用第5,6字节扔掉即可。稍微注意的是后面可能也会遇到该包。
在这里插入图片描述
2)接下来发包的内容就是PS流的PS头了。

3)然后是PS的系统头和映射头,两者一般是合在一起发包的,或者只发系统头,而大部分情况就是只发系统头。

4)最后就是重点了,最后是发送PES包,他可能先发送音频的包(00 00 01 c0 + 音频数据)再发送视频的包,或者调转,但编码操作是一样的。但是最最最重点的是一帧完整的PES包可能需要连续发送。例如此时发送了一个PES包即00 00 01 E0 + 数据,若再发送00 00 01 E0 + 数据,说明是同一帧(同一画面的数据),因为没有遇到新的PS头,不是新的一帧数据。这一点是非常重要的。
看图:
即当我们接收到了第一个PES视频包时,我们作下面两种假设:
1)若下一个同样是以00 00 01 e0开头的话,就是同一帧的画面,必须接收完该画面的数据在av_write写包过去,不然结果就是画面花屏。
2)若下一个包是PS头的话,即00 00 01 a0,说明是新的一帧,可以将第一个PES视频包写过去。
实际上可能有人会问,音频包呢?因为我们不需要音频,所以不处理就相当于将该帧的音频舍弃掉,不会影响我们的判断。
第一个视频包:
在这里插入图片描述

下一个视频包:
在这里插入图片描述
仍然是00 00 01 e0开头,是同一帧数据,必须接收完才能发送。

即总结发包顺序:
海康私有包->PS包头->可能是系统头,映射头或者两者合体->一个或多个视频包,数据格式是00 00 01 e0 + 数据(或者个或多个音频包)。
实际上如果有开发经验的人的话,在编码的时候操作时只需要在PS头和视频包做额外的处理(不考虑音频)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

海康PS转H264的编码思想(带图码流解释) 的相关文章

  • 为什么这个 Web api 控制器不并发?

    我有一个 Web API 控制器 里面有以下方法 public string Tester Thread Sleep 2000 return OK 当我调用它 10 次 使用 Fiddler 时 我预计所有 10 次调用都会在大约 2 秒后
  • 如何在 VC++ CString 中验证有效的整数和浮点数

    有人可以告诉我一种有效的方法来验证 CString 对象中存在的数字是有效整数还是浮点数吗 Use tcstol http msdn microsoft com en us library w4z2wdyc aspx and tcstod
  • FFMPEG - 具有持续时间过滤器问题的连接解复用器

    我正在尝试使用图像生成视频ffmpeg concat 解复用器 我正在创建一个带有图像文件路径的文本文件 由于图像的持续时间可能不同 我正在使用duration过滤器指定每个图像的持续时间 示例文本文件如下 文件1 jpg 持续时间3 文件
  • 按扩展名过滤搜索文件返回太多结果

    我正在开发一个 C 控制台应用程序 它必须管理 Windows 操作系统上的文件 我需要获取具有特定扩展名的文件名 列表 我找到了很多解决方案 最建议的是以下一种 HANDLE hFind WIN32 FIND DATA data hFin
  • 前向声明类型和“已声明为类类型的非类类型”

    我对以下代码有问题 template
  • 传递 constexpr 对象

    我决定给予新的C 14的定义constexpr旋转并充分利用它 我决定编写一个小的编译时字符串解析器 然而 我正在努力保持我的对象constexpr将其传递给函数时 考虑以下代码 include
  • 有些有助于理解“产量”

    在我不断追求少吸的过程中 我试图理解 产量 的说法 但我不断遇到同样的错误 someMethod 的主体不能是迭代器块 因为 System Collections Generic List 不是迭代器接口类型 这是我被卡住的代码 forea
  • RestSharp获取序列化输出

    我正在寻找一种方法来访问 AddBody 调用的序列化结果 我正在使用内置的 RestSharp 序列化器 例子 class Foo public string FooField void SendRecord var f new Foo
  • 在 C# 中,如何根据在 gridview 行中单击的按钮引用特定产品记录

    我有一个显示产品网格视图的页面 该表内有一列 其中有一个名为 详细信息 的超链接 我想这样做 以便如果用户单击该特定产品的详细信息单元格 将打开一个新页面 提供有关该产品的更多信息 我不确定如何确定哪个Product记录链接的详细信息以及我
  • 即使没有异步,CallContext.LogicalGetData 也会恢复。为什么?

    我注意到CallContext LogicalSetData LogicalGetData不按照我期望的方式工作 内部设置的值async方法得到恢复即使没有异步或任何类型的线程切换 无论如何 这是一个简单的例子 using System u
  • 不同 C++ 文件中的相同类名

    如果两个 C 文件具有相同名称的类的不同定义 那么当它们被编译和链接时 即使没有警告也会抛出一些东西 例如 a cc class Student public std string foo return A void foo a Stude
  • 从 C# 使用 Odbc 调用 Oracle 包函数

    我在 Oracle 包中定义了一个函数 CREATE OR REPLACE PACKAGE BODY TESTUSER TESTPKG as FUNCTION testfunc n IN NUMBER RETURN NUMBER as be
  • 如何解压 msgpack 文件?

    我正在将 msgpack 编码的数据写入文件 在编写时 我只是使用 C API 的 fbuffer 如 我为示例删除了所有错误处理 FILE fp fopen filename ab msgpack packer pk msgpack pa
  • C++:为什么 numeric_limits 对它不知道的类型起作用?

    我创建了自己的类型 没有任何比较器 也没有专门化std numeric limits 尽管如此 由于某种原因 std numeric limits
  • Visual Studio 2015 - Web 项目上缺少共享项目参考选项卡

    我从 MSDN 订阅升级到 Visual Studio 2015 因为我非常兴奋地阅读有关共享项目的信息 当我们想要做的只是重用代码时 不再需要在依赖项中管理 21382 个 nuget 包 所以我构建了一个测试共享项目 其中包含一些代码
  • C++:二叉树所有节点值的总和

    我正在准备面试 我被一个二叉树问题困住了 我们如何计算二叉树所有节点中存在的值的总和 优雅的递归解决方案 伪代码 def sum node if node NULL return 0 return node gt value sum nod
  • 了解 Lambda 表达式和委托 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我已经尝试解决这个问题很长一段时间了 阅读在线博客和文章 但到目前为止还没有成功 什么是代表 什么是 Lambda 表达式 两者的优点
  • 在 Win32 控制台应用程序中设置光标位置

    如何在 Win32 控制台应用程序中设置光标位置 最好 我想避免制作句柄并使用 Windows 控制台功能 我花了整个早上沿着那条黑暗的小巷跑 它产生的问题比它解决的问题还要多 我似乎记得当我在大学时使用 stdio 做这件事相对简单 但我
  • 如何在 sql azure 上运行 aspnet_regsql? [复制]

    这个问题在这里已经有答案了 可能的重复 将 ASP NET 成员资格数据库迁移到 SQL Azure https stackoverflow com questions 10140774 migrating asp net membersh
  • 在 System.Type 上使用条件断点时出错

    这是函数 public void Init System Type Type this Type Type BuildFieldAttributes BuildDataColumns FieldAttributes 我在第一行设置了一个断点

随机推荐

  • 红外避障小车(ZK-2)初步拼装

    红外避障小车 ZK 2 初步拼装 一 拼装零件 1 M330螺丝4个 2 M312铜柱4个 3 M8螺丝4个 M36螺丝8个 4 码盘2个 5 M3螺母8个 6 T型小支架4个 7 船型开关1个 8 轮胎2个 9 万向轮1个 10 电池盒1
  • [Java反序列化]AspectJWeaver反序列化

    Java反序列化 AspectJWeaver反序列化 前言 2021年二月份ysoserialize增加了这条AspectJWeaver链子 之后陆续在2021年的D3CTF以及国赛决赛中都出现了这条链子的攻击 所以学习一下AspectJW
  • 深入学习jquery源码之replaceWith()和replaceAll()

    深入学习jquery源码之replaceWith 和replaceAll replaceWith content fn 概述 将所有匹配的元素替换成指定的HTML或DOM元素 参数 content String Element jQuery
  • 网络推广引流方法大全

    在互联网的圈子里有关网络推行的问题是一个永久的话题 你的商品哪怕再好假如没有推行进来一切都是白搭 经常听有人说 酒香不怕巷子深 但分离当今社会的方式 特别是在竞争日益严酷的今天我想 酒香也会怕巷子深了 进入互联网时期 企业产品推行再也不能仅
  • Nosql 概念释义

    进几年常常听到一个高大上的名字 osql 再加上鼓吹者说Nosql将会消灭关系数据库 今天怀着好奇心里 简单了解了以下Nosql的概念 发现其实没有那么神秘 被鼓吹者夸大其词了 导致我等门外汉一下子给打懵了 我认为 一个新技术要想让大家使用
  • IDEA插件系列(9):MyBatisX插件——Mybatis插件

    MybatisX插件功能 mapper和xml可以来回跳转 mybatis xml 映射器 xml提示 mapper和xml支持自动提示 如jpa 参考MybatisCodeHelperPro 集成mybatis生成器Gui 从免费myba
  • 【译】A gentle introduction to self-sovereign identity

    2017年5月17日 ANTONYLEWIS2015 2017年5月 印度互联网和社会智库中心发布了一份报告 详细说明了印度国家身份数据库 Aadhaar 泄漏可能会泄露个人信息的方式 该信息涉及超过1 3亿印度国民 泄密事件为财务欺诈创造
  • 关于习而学的软件工程教育

    邹欣老师的博客在此 http www cnblogs com xinz archive 2012 01 08 2316717 html 我不是很同意邹欣老师的观点 对于一个大学生 思想远比实践经验要重要 子曾经曰过 世界上最简单的事情就是学
  • 再也不用手写爬虫了!推荐5款自动爬取数据的神器!

    大家好 我是菜鸟哥 今天给大家推荐一些不错的神器 网络信息的时代 想要收集信息 爬虫是一项必不可少的工具 对于很多小伙伴们来说 只是想利用爬虫进行快速的内容抓取 而并不想太过深入的学习爬虫 利用python编写爬虫程序虽然炫酷 但是需要耗费
  • java字符串模式匹配next_字符串的模式匹配详解--BF算法与KMP算法

    一 BF算法 BF算法是普通的模式匹配算法 BF算法的思想就是将目标串S的第一个字符与模式串P的第一个字符进行匹配 若相等 则继续比较S的第二个字符和P的第二个字符 若不相等 则比较S的第二个字符和P的第一个字符 依次比较下去 直到得出最后
  • 关于python中的闭包与for循环(可变变量)的矛盾以及如何避免

    本文只讲一个重点 闭包与for循环之间的矛盾以及避免的方法 关于闭包的概念 请参考网上的概念 废话不多说来看以下代码 def count fs for i in range 1 4 def f return i i fs append f
  • AXI DMA学习

    AXI总线协议 一 概述 AXI 高性能扩展总线接口 Advanced eXtensible Interface 是ARM AMBA 单片机总线系列中的一个协议 是计划用于高性能 高主频的系统设计的 AXI协议是被优化用于通过使用Xilin
  • ibms智能化系统集成服务器,智能化集成管理系统(IBMS)

    IBMS是在BMS的基础上更进一步的与通信网络系统 信息网络系统实现更高一层的建筑集成管理系统 IBMS 就是建立在5A集成之上的更高层次的集成 5A是指OA 办公智能化 BA 楼宇自动化 CA 通讯传输智能化 FA 消防智能化 SA 安保
  • JAVA多态机制简述

    多态是指方法或对象具有多种形态 是oop的第三大特征 其是建立在封装和继承之上的 多态的体现 1 方法多态 1 重载体现多态2 重写体现多态 2 对象多态 1 对象的编译类型和运行类型可以不一致 编译类型在编译时就会确定 2 对象的运行类型
  • 渗透测试--medium_socnet

    靶机下载地址 https download vulnhub com boredhackerblog medium socnet ova 实验环境 Kali IP 192 168 172 134 靶机 medium socnet 主机发现 a
  • QT学习——QTreeView获取选中单行数据和多行数据

    个人感觉QTreeView有些地方的使用没有MFC的CListCtrl方便 比如在不响应单击信号的情况下 获取选中行的数据 单行和多行 也许因为我是新手吧 一 获取单行选中的数据 QModelIndex selected ui treeVi
  • 自学c++笔记(二)

    笔记记录本人学习C 路上的一些摘要与总结 供本人阅读同时也分享与他人 变量的定义 int carrots carrot 25 cout lt lt carrots 会输出25 int 表示整数 carrot 来标识存储在该内存单元的值 co
  • manjaro主目录设置英文

    终端 vim config user dirs dirs 把对应的换成英文 然后命令 mv 下载 Downloads mv 桌面 Desktop mv 模板 Templates 全部 mv
  • 2点云--数据结构

    根据激光测量原理得到的点云 包含三维坐标信息 xyz 和激光反射强度信息 intensity 激光反射强度与仪器的激光发射能量 波长 目标的表面材质 粗糙程度 入射角相关 基本类型PointCloud PCL的基本数据类型是PointClo
  • 海康PS转H264的编码思想(带图码流解释)

    海康PS转H264的编码思想 带图码流解释 本人PS流解析成H264的其余文章 01PS流格式 02封装时遇到的重点问题 03海康PS转H264的编码思想 带图码流解释 1 海康的PS流发包的顺序到底是如何发送的 根据01PS流格式我们知道