本文转自EasyDarwin开源团队成员Alex的博客:http://blog.csdn.net/cai6811376

海康威视使用PS流封装H.264流,EasyDarwin云平台支持ES流。当我们需要接入海康的视频时,我们就需要将海康的PS流转换为ES流。

首先,我们要知道什么PS流,ES流。

ES流(Elementary Stream): 也叫基本码流,包含视频、音频或数据的连续码流。

PS流(Packet Elementary Stream): 也叫打包的基本码流, 是将基本的码流ES流根据需要分成长度不等的数据包, 并加上包头就形成了打包的基本码流PS流。

TS流(Transport Stream): 也叫传输流, 是由固定长度为188字节的包组成, 含有独立时基的一个或多个program, 一个program又可以包含多个视频、音频、和文字信息的ES流; 每个ES流会有不同的PID标示. 而又为了可以分析这些ES流, TS有一些固定的PID用来间隔发送program和ES流信息的表格: PAT和PMT表。

关于PS流的格式解析,大家可以参照 PS流的格式和解析总结

那我们如何将PS流转换为ES流呢?(这里要感谢EasyDarwin团队的Sword)

  1. bool GetH246FromPS(IN BYTE* pBuffer, IN int nBufLenth, BYTE** pH264, int& nH264Lenth, BOOL& bVideo)
  2. {
  3. if (!pBuffer || nBufLenth <= 0)
  4. {
  5. return FALSE;
  6. }
  7. BYTE* pH264Buffer = NULL;
  8. int nHerderLen = 0;
  9. if (pBuffer
  10. && pBuffer[0] == 0x00
  11. && pBuffer[1] == 0x00
  12. && pBuffer[2] == 0x01
  13. && pBuffer[3] == 0xE0)//E==视频数据(此处E0标识为视频)
  14. {
  15. bVideo = TRUE;
  16. nHerderLen = 9 + (int)pBuffer[8];//9个为固定的数据包头长度,pBuffer[8]为填充头部分的长度
  17. pH264Buffer = pBuffer + nHerderLen;
  18. if (*pH264 == NULL)
  19. {
  20. *pH264 = new BYTE[nBufLenth];
  21. }
  22. if (*pH264&&pH264Buffer && (nBufLenth - nHerderLen)>0)
  23. {
  24. memcpy(*pH264, pH264Buffer, (nBufLenth - nHerderLen));
  25. }
  26. nH264Lenth = nBufLenth - nHerderLen;
  27. return TRUE;
  28. }
  29. else if (pBuffer
  30. && pBuffer[0] == 0x00
  31. && pBuffer[1] == 0x00
  32. && pBuffer[2] == 0x01
  33. && pBuffer[3] == 0xC0) //C==音频数据?
  34. {
  35. *pH264 = NULL;
  36. nH264Lenth = 0;
  37. bVideo = FALSE;
  38. }
  39. else if (pBuffer
  40. && pBuffer[0] == 0x00
  41. && pBuffer[1] == 0x00
  42. && pBuffer[2] == 0x01
  43. && pBuffer[3] == 0xBA)//视频流数据包 包头
  44. {
  45. bVideo = TRUE;
  46. *pH264 = NULL;
  47. nH264Lenth = 0;
  48. return FALSE;
  49. }
  50. return FALSE;
  51. }

源码及视频教程

源码地址:https://github.com/EasyDarwin/EasyDarwin/tree/master/EasyCamera-HK

视频教程地址:[http://edu.csdn.net/course/detail/3029

](http://edu.csdn.net/course/detail/3029)

获取更多信息

邮件:support@easydarwin.org

WEB:www.EasyDarwin.org

Copyright © EasyDarwin.org 2012-2016

EasyDarwin云平台:EasyCamera开源摄像机接入海康威视摄像机PS流转ES流的更多相关文章

  1. EasyDarwin流媒体云平台:EasyCamera开源摄像机接入海康威视摄像机实时视频

    本文转自EasyDarwin团队成员Alex的博客:http://blog.csdn.net/cai6811376/article/details/52755298 EasyCamera接收云平台实时 ...

  2. 基于EasyDarwin云平台实现的EasyClient客户端与EasyCamera摄像机之间的对讲与云台控制功能

    本文转自EasyDarwin团队Kim的博客,感谢Kim长期对EasyDarwin开源项目的贡献:http://blog.csdn.net/jinlong0603 EasyDarwin云平台是一套由E ...

  3. EasyCamera海康摄像机向EasyDarwin云平台推送音视频数据的缓存设计

    本文转自EasyDarwin团队成员Alex的博客:http://blog.csdn.net/cai6811376 EasyCamera在向EasyDarwin云平台推送音视频数据时,有时一个I帧会很 ...

  4. EasyDarwin开源云平台接入海康威视EasyCamera摄像机之快照获取与上传

    本文转自EasyDarwin团队成员Alex的博客:http://blog.csdn.net/cai6811376 EasyCamera开源摄像机拥有获取摄像机实时快照并上传至EasyDarwin云平 ...

  5. EasyDarwin开源流媒体云平台支持EasyCamera摄像机、EasyCamera手机直播监控、EasyNVR等多终端接入

    云平台架构 EasyDarwin开源流媒体云平台目前已经包括了EasyCMS中心管理服务.EasyDarwin流媒体服务.EasyCamera设备端(支持Arm_Linux.Android.PC).E ...

  6. EasyDarwin开源流媒体云平台设计与实现(分布式+负载均衡)

    前言 早在2013年我就设计了一套架构非常简单的分布式流媒体服务器平台<基于Darwin实现的分布式流媒体直播服务器系统>,当时的考虑如今看来有诸多的细节点没有考虑到:1.CMS是单点部署 ...

  7. EasyDarwin开源流媒体云平台之语音对讲功能设计与实现

    本文由EasyDarwin开源团队成员Alex贡献:http://blog.csdn.net/cai6811376/article/details/52006958 EasyDarwin云平台一直在稳 ...

  8. EasyDarwin开源流媒体云平台之云台ptz控制设计与实现

    本文转自EasyDarwin开源团队成员Alex的博客:http://blog.csdn.net/cai6811376/article/details/51912692 近日,EasyDarwin云平 ...

  9. EasyDarwin开源流媒体音视频云平台遇到的奇葩问题:内网运行正常,公网流媒体不通

    最近在帮助EasyDarwin的用户部署EasyNVR+EasyDarwin云平台+EasyClient方案的过程中,遇到一个问题,EasyNVR分布在用户各地区现场的内网中,EasyDarwin云平 ...

随机推荐

  1. 挑战程序设计2 KD树

    Range Query - Range Search (kD Tree) Time Limit : 1 sec, Memory Limit : 262144 KB Japanese version i ...

  2. Sequelize的增删改查

    //启动mysql数据库 net start mysql //新建index.js //建立连接var Sequelize=require("sequelize");var mys ...

  3. WebRTC源码架构浅析(转)

    Google 在2010年花了6千8百万美元收购了大名鼎鼎的 Global IP Sound/Solutions (GIPS) 公司, 得到了它的 VoIP 相关技术的专利和软件. 第二年, Goog ...

  4. 标准C程序设计七---120

    Linux应用             编程深入            语言编程 标准C程序设计七---经典C11程序设计    以下内容为阅读:    <标准C程序设计>(第7版) 作者 ...

  5. (转):从内核代码聊聊pipe的实现

    来源: http://luodw.cc/2016/07/09/pipeof/ 用linux也有两年多了,从命令,系统调用,到内核原理一路学过来,我发现我是深深喜欢上这个系统:使用起来就是一个字&quo ...

  6. GSMArena battery life test

    GSMArena battery life test Battery Endurance Score = [ Battery Capacity / ( call hrs * a + Browsing ...

  7. POJ 3171 区间覆盖最小值&&线段树优化dp

    Cleaning Shifts Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 4715   Accepted: 1590 D ...

  8. k8s的使用入门

    1.kubectl命令就是apiserver的客户端工具,可以实现对nodes资源的增删改查. # 描述一个节点的信息 kubectl describe node k8s-node1 # 查看k8s集 ...

  9. Codeforces Gym 100431B Binary Search 搜索+组合数学+高精度

    原题链接:http://codeforces.com/gym/100431/attachments/download/2421/20092010-winter-petrozavodsk-camp-an ...

  10. How to Use Dtrace Tracing Ruby Executing

    http://googya.github.io/blog/categories/dtrace/ 最近看了点关于Dtrace的东西,它是个通用型的工具,但我主要集中于分析ruby程序的执行上面.关于操作 ...