- 博客(33)
- 资源 (3)
- 收藏
- 关注
转载 流媒体协议—HLS
HLS概述HLS(Http Live Streaming)是APPLE公司提出的基于HTTP的流媒体传输协议。它的工作原理就是把整个ts流分成一个个ts小文件供播放器按顺序下载播放。HLS作为当前媒体分发传输最为重要的几大协议之一,网络上已有大量深入分析文章,苹果官方文档也对协议应用做了完善的定义。故本篇文章仅简单介绍HLS的组成以及抓包对照分析。另外,完整的HLS系统
2017-01-25 14:56:40 3154
转载 流媒体协议—RTMP
认识RTMPRTMP协议是由Adobe提出的一个应用层的协议,主要用来解决流媒体数据传输的问题,是目前低延时直播应用最广泛的协议。在我们实际工作中,我们对RTMP应该再熟悉不过,因它是几乎所有编码器标准输出协议,是PC机打开浏览器就能播放(一般浏览器默认有Flash),也是所有CDN支持的最好的直播分发协议。所以,即便RTMP协议较为复杂,也有不少缺陷,但较长的一段时间内,还不
2017-01-25 14:48:37 1602 1
转载 流媒体协议—FLV
认识FLV上一篇讲了HTTP在流媒体中的应用,接下来我们先把基于HTTP的HTTP-FLV和HLS两种直播中应用非常广泛的协议提一下。先看看HTTP-FLV长成什么样子:http://ip:port/live/livestream.flv,协议头是http,另外”.flv”这个尾巴是它最明显的特征。在流媒体尤其是直播应用中,为什么我们要如此重视HTTP-FLV呢
2017-01-25 13:51:36 4052
转载 流媒体协议—HTTP
http://www.wtoutiao.com/p/5c4KKEX.html传输协议作为流媒体系统中最重要组成部分之一,在流媒体应用中扮演着关键性作用。本章着重对我们目前业务中常用的基于HTTP的流协议(如HLS、HTTP-FLV)、RTMP等主要流媒体协议以及相关的Websocket 、URL进行详细介绍。在流媒体相关工作中,我们经常会听到有人问起,这么多流媒体协议我
2017-01-25 11:29:02 7599
转载 NET 4.0 Task用法
System.Threading.Tasks的作用: Tasks命名空间下的类试图使用任务的概念来解决线程处理的复杂问题。任务(Task)包含一个操作,以及依赖哪个任务的完成才能开始。 测试用例: 假设有任务A,B,C,D。其中C依赖A和B的完成,而D依赖A的完成。代码该怎么写呢? 代码: 1 TaskFactory factory = new TaskFactor
2017-01-24 17:51:24 3599
转载 服务器热更新(当个文件更新)
上一篇文章我介绍了如果动态加载dll文件来更新程序可是在使用过程中,也许有很多会发现,动态加载dll其实不方便,应为需要预先编译代码为dll文件。便利性不是很高。那么有么有办法能做到动态实时更新呢????官方提供了这两个对象,动态编译源文件。 提供对 C# 代码生成器和代码编译器的实例的访问。 CSharpCodeProvider提供一下方法加载源文件,// 基
2017-01-23 16:12:35 4734 1
转载 服务器热更新(动态加载DLL)
大家可能对游戏服务器的运行不太理解或者说不太清楚一些机制。但是大家一定会明白一点,当程序在运行的时候出现一些bug,必须及时更新,但是不能重启程序的情况下。这里牵涉到一个问题。比如说在游戏里面,,如果一旦开服,错非完全致命性bug,否则是不能频繁重启服务器程序的,你重启一次就可能流失一部分玩家。那么就牵涉到程序热更新修复bug功能。今天就来扒一扒热更新的事情。
2017-01-23 16:10:38 8865 3
转载 ThreadPool 线程池
相关概念: 线程池可以看做容纳线程的容器; 一个应用程序最多只能有一个线程池; ThreadPool静态类通过QueueUserWorkItem()方法将工作函数排入线程池; 每排入一个工作函数,就相当于请求创建一个线程; 线程池的作用:线程池是为突然大量爆发的线程设计的,通过有限的几个固定线程为大量的操作服务,减少了
2017-01-22 14:38:07 539
原创 Windows关闭错误报告弹窗
项目中需要第三方一个后台的第三方应用, 这就需要守护进程, 保证他一直在运行, 然而应用并不稳定.在Win7,Win8,Win10中某些程序出错会出现Windows错误报告, 并且暂停应用不会退出, 这时候进程守护就会失效.所以需要把错误报告弹窗关闭, 让程序发生错误后直接退出. 这样才能使守护进程生效.一:注册表关闭弹窗(这个方法即可, 另一个可以顺便)1、使用
2017-01-20 11:25:40 4117
转载 大端小端格式详解
1. 什么是大端,什么是小端:所谓的大端模式,是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址中;所谓的小端模式,是指数据的低位保存在内存的低地址中,而数据的高位保存在内存的高地址中。2.为什么会有大小端:为什么会有大小端模式之分呢?这是因为在计算机系统中,我们是以字节为单位的,每个地址单元都对应着一个字节,一个字节为8bit。但是在C语言中除了
2017-01-19 14:45:04 645
转载 大端和小端RTP头结构体定义区别
/* * RTP data header */typedef struct {#if 0//BIG_ENDIA unsigned int version:2; /* protocol version */ unsigned int p:1; /* padding flag */ unsigned int x:1;
2017-01-19 09:36:13 1123
转载 mutex与semaphore的区别
"互斥(mutext)和旗语(semaphore)之间有什么不同?"这样的问题简短而有力,但要回答却相当困难.即使有经验的实时操作系统(RTOS)用户在区别如何正确使用mutex和semaphore时也存在着困难.但这一点很不幸而且很危险,因为无任这两种原生RTOS中的哪一种被错误使用,都会导致嵌入式系统出现意想不到的错误,特别是这些系统为有关生命安全的产品时.有关mutex和semaph
2017-01-18 11:21:18 807
转载 DTS和PTS
FFmpeg里有两种时间戳:DTS(Decoding Time Stamp)和PTS(Presentation Time Stamp)。 顾名思义,前者是解码的时间,后者是显示的时间。要仔细理解这两个概念,需要先了解FFmpeg中的packet和frame的概念。FFmpeg中用AVPacket结构体来描述解码前或编码后的压缩包,用AVFrame结构体来描述解码后或编码前的信号帧。 对于视
2017-01-17 11:17:24 517
转载 实现RTP协议的h.264传输
1. 引言 随着信息产业的发展,人们对信息资源的要求已经逐渐由文字和图片过渡到音频和视频,并越来越强调获取资源的实时性和互动性。但人们又面临着另外一种不可避免的尴尬,就是在网络上看到生动清晰的媒体演示的同时,不得不为等待传输文件而花费大量时间。为了解决这个矛盾,一种新的媒体技术应运而生,这就是流媒体技术。流媒体由于具有启动时延小、节省客户端存储空间等优势,逐渐成为人们的首选,流媒
2017-01-16 17:26:54 928
转载 理解互斥量和信号量
互斥量(Mutex) 互斥量表现互斥现象的数据结构,也被当作二元信号灯。一个互斥基本上是一个多任务敏感的二元信号,它能用作同步多任务的行为,它常用作保护从中断来的临界段代码并且在共享同步使用的资源。 Mutex本质上说就是一把锁,提供对资源的独占访问,所以Mutex主要的作用是用于互斥。Mutex对象的值,只有0和1两个值。这两个值也分别代表了Mutex的两
2017-01-16 17:15:38 498
转载 c++ 中__declspec 的用法
语法说明:__declspec ( extended-decl-modifier-seq )扩展修饰符:1:align(#) 用__declspec(align(#))精确控制用户自定数据的对齐方式 ,#是对齐值。e.g__declspec(align(32)) struct Str1{int a, b, c, d, e;};
2017-01-16 15:46:51 651
转载 C++ 调用lib 和 dll的 方法 及 动态库DLL与静态库lib的区别
C++ 调用.lib的方法:一: 隐式的加载时链接,有三种方法 1 LIB文件直接加入到工程文件列表中 在VC中打开File View一页,选中工程名,单击鼠标右键,然后选中"Add Files to Project"菜单,在弹出的文件对话框中选中要加入DLL的LIB文件。然后在首先要使用该函数的地方加上该LIB的头文件,如#include "..\lib.h"即
2017-01-16 15:36:58 3507
转载 从海康7816的ps流里获取数据h264数据
http://blog.csdn.net/wwyyxx26/article/details/15224879
2017-01-16 14:29:40 2064
转载 RTP协议全解析(H264码流和PS流)
写在前面:RTP的解析,网上找了很多资料,但是都不全,所以我力图整理出一个比较全面的解析,其中借鉴了很多文章,我都列在了文章最后,在此表示感谢。互联网的发展离不开大家的无私奉献,我决定从我做起,希望大家支持。原创不易,转载请附上链接,谢谢http://blog.csdn.net/chen495810242/article/details/39207305
2017-01-16 13:14:15 699
转载 关于对H264码流的PS的封装的相关代码实现
http://blog.csdn.net/max_min_go/article/details/360573131、写在开始之前: 最近因为新工作要维护别人留下的GB模块代码,先熟悉了流程,然后也试着封装了下ps流,结果也能通过测试正常预览了,当然,其中开发读文档的头疼,预览花屏,卡帧的事情都有遇到,当时慢慢的看文档,整理逻辑,也就都顺利解决了,
2017-01-16 13:05:02 928 1
转载 H264视频流的RTP封包
1.RTP打包原则RTP的包长度必须要小于MTU(最大传输单元),IP协议中MTU的最大长度为1500字节。除去IP报头(20字节)、UDP报头(8字节)、RTP头(12字节),所有RTP有效载荷(即NALU内容)的长度不得超过1460字节。2.RTP协议的报文结构 开始12个八进制出现在每个RTP包中,而CSRC标识列表仅出现在混合
2017-01-11 18:05:59 3308
转载 解决链接错误:error LNK2001: 无法解析的外部符号 __iob
该错误主要是由于静态库在VC6编译而主程序在VC2005编译,大家用的CRT不同。解决办法,代码中增加#ifdef __cplusplusextern "C" #endifFILE _iob[3] = {__iob_func()[0], __iob_func()[1], __iob_func()[2]};此错误的产生根源:在VC6的stdio.h之中有如下定义
2017-01-11 16:14:56 3148
转载 对H264进行RTP封包原理
http://blog.csdn.net/rankun1/article/details/526816291. 引言 随着信息产业的发展,人们对信息资源的要求已经逐渐由文字和图片过渡到音频和视频,并越来越强调获取资源的实时性和互动性。但人们又面临着另外一种不可避免的尴尬,就是在网络上看到生动清晰的媒体演示的同时,不得不为等待传输文件而花费大量时间。为了解决这个矛盾,一
2017-01-11 15:39:50 381
转载 rtp头之时间戳的确定!
RTP的头部格式如下:版本号(V):2比特,用来标志使用的RTP版本。填充位(P):1比特,如果该位置位,则该RTP包的尾部就包含附加的填充字节。扩展位(X):1比特,如果该位置位的话,RTP固定头部后面就跟有一个扩展头部。CSRC计数器(CC):4比特,含有固定头部后面跟着的CSRC的数目。标记位(M):1比特,该位的解释由配置文档(Profile)来承担
2017-01-11 14:27:28 1242
转载 ES、PES、PS、TS流
一、基本概念1)ES ES--Elementary Streams (原始流)是直接从编码器出来的数据流,可以是编码过的视频数据流(H.264,MJPEG等),音频数据流(AAC),或其他编码数据流的统称。ES流经过PES打包器之后,被转换成PES包。 ES是只包含一种内容的数据流,如只含视频或只含音频等,打包之后的PES也是只含一种性质的ES,如只含视频
2017-01-10 16:23:38 432
转载 VLC 接收H264、TS、PS流SDP写法
博主封装的是PS流,之前用vlc只是播放了h264流,写法如下:m=video 8002 RTP/AVP 96a=rtpmap:96 H264/90000用这个测试了半天,不是绿屏就是白板,一直在找是不是封包的问题,百度了一下,找到TS写法:m=video 8002 RTP/AVP 96a=rtpmap:96 MP2T/90000
2017-01-10 15:56:39 1718 1
转载 VS2015下解决:无法解析的外部符号 __imp___vsnprintf 及__iob_func
1、解决:无法解析的外部符号 __imp___vsnprintf在vs2015工程选项,链接器附加依赖项里面添加legacy_stdio_definitions.lib即可。出现这个问题的原因是vs2015默认编译时将许多标准库采用内联方式处理,因而没有可以链接的标准库文件,所以要专门添加标准库文件来链接标准库中的函数。2、解决:无法解析的外部符号_
2017-01-06 09:01:12 3854
转载 Linux进程间通信——使用信号量
这篇文章将讲述别一种进程间通信的机制——信号量。注意请不要把它与之前所说的信号混淆起来,信号与信号量是不同的两种事物。有关信号的更多内容,可以阅读我的另一篇文章:Linux进程间通信——使用信号。下面就进入信号量的讲解。一、什么是信号量为了防止出现因多个程序同时访问一个共享资源而引发的一系列问题,我们需要一种方法,它可以通过生成并使用令牌来授权,在任一时刻只能有一个执行
2017-01-03 17:01:28 518
转载 Linux进程间通信——使用共享内存
下面将讲解进程间通信的另一种方式,使用共享内存。一、什么是共享内存顾名思义,共享内存就是允许两个不相关的进程访问同一个逻辑内存。共享内存是在两个正在运行的进程之间共享和传递数据的一种非常有效的方式。不同进程之间共享的内存通常安排为同一段物理内存。进程可以将同一段共享内存连接到它们自己的地址空间中,所有进程都可以访问共享内存中的地址,就好像它们是由用C语言函数malloc
2017-01-03 16:43:36 341
转载 共享内存
共享内存 共享内存是被多个进程共享的一部分物理内存。共享内存是进程间共享数据的一种最快的方法,一个进程向共享内存区域写入了数据,共享这个内存区域的所有进程就可以立刻看到其中的内容。原理图如下:共享内存的实现分为两个步骤:一、 创建共享内存,使用shmget函数。二、 映射共享内存,将这段创建的共享内存映射到具体的进程空间去,使用shmat函数。
2017-01-03 16:32:22 420
转载 Linux生成和打上patch的方法
在团队开发的过程中,经常需要生成patch,或者打上别人提供的patch,那么一般情况是如何操作的呢。首先生成patch需要有两个工程,一个修改前的A工程,一个修改后的B工程。使用linux命令diff就可以生成patch了。格式如下:diff -Naur path/to/A_Project path/to/B_Project > Project.patch -N 选
2017-01-03 16:23:11 2700
转载 .NET 4.0中使用内存映射文件实现进程通讯
操作系统很早就开始使用内存映射文件(Memory Mapped File)来作为进程间的共享存储区,这是一种非常高效的进程通讯手段。Win32 API中也包含有创建内存映射文件的函数,然而,这些函数都运行于非托管环境下,在.NET中只能通过平台调用机制来使用它们,用起来很不方便。幸运的是,.NET 4.0新增加了一个System.IO. MemoryMappedFiles命名空间,其中添加了几
2017-01-03 16:16:42 706
转载 内存映射文件
在做科研,实现一些大数据的算法的时候,经常要调用一些文件的I/O函数,在数据量很大的时候,除了设计的算法和数据结构的耗时以外,其实主要的耗时还是文件的I/O。因为一般常规的方法就是先读出磁盘文件的内容到内存中,然后修改,最后写回到磁盘上。读磁盘文件是要经过一次系统调用,先将文件的内容从磁盘拷贝到内核空间的一个缓冲区,然后再将这些数据拷贝到用户空间,实际上是两次数据拷贝。写回同样也需要经过两次数据拷
2017-01-03 16:00:51 507
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人