自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Mr_weng

厚积薄发

  • 博客(69)
  • 收藏
  • 关注

原创 H.264码流结构解析

1. H.264简介MPEG(Moving Picture Experts Group)和VCEG(Video Coding Experts Group)已经联合开发了一个比早期研发的MPEG 和H.263性能更好的视频压缩编码标准,这就是被命名为AVC(Advanced Video Coding),也被称为ITU-T H.264建议和MPEG-4的第10 部分的标准,简称为H.264/A

2014-12-19 23:01:19 890

转载 Linux中的fork()函数分析

一、fork入门知识     一个进程,包括代码、数据和分配给进程的资源。fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两个进程也可以做不同的事。    一个进程调用fork()函数后,系统先给新的进程分配资源,例如存储数据和代码的空间。然后把原来的进程的所有值都复制到新的新进程中,只有少数值与原来

2014-11-07 12:50:00 687

原创 提高程序运行效率的方法(补充中)

注:以C/C++程序为例一、尽量减少值传递,多用引用来传递参数。    至于其中的原因,相信大家也很清楚,如果参数是int等语言自定义的类型可能能性能的影响还不是很大,但是如果参数是一个类的对象,那么其效率问题就不言而喻了。例如一个判断两个字符串是否相等的函数,其声明如下:bool Compare(string s1, string s2)bool Co

2014-09-02 12:01:56 720

原创 有关C/C++的一些基础知识

1.多态类中的虚函数表是Compile-Time,还是Run-Time时建立的?

2014-07-23 14:43:02 739

转载 ffmpeg解码基础

目前几乎所有的主流多媒体播放器都是基于开源多媒体框架ffmpeg来做的,可见ffmpeg的强大。下面是对一个媒体文件进行解码的主要流程:1.    解复用(Demux)当我们打开一个多媒体文件之后,第一步就是解复用,称之为Demux。为什么需要这一步,这一步究竟是做什么的?我们知道在一个多媒体文件中,既包括音频也包括视频,而且音频和视频都是分开进行压缩的,因为音频和视频

2015-02-13 23:23:53 603

原创 基于RTSP/RTP协议的H.264传输

1.前言流媒体由于具有启动时延小、节省客户端存储空间等优势,逐渐成为人们的首选,流媒体网络应用也在全球范围内得到不断的发展。其中实时流传输协议 RTP 详细说明了在互联网上传递音频和视频的标准数据包格式,它与传输控制协议 RTCP 配合使用,成为流媒体技术最普遍采用的协议之一。 H.264/AVC 是ITU-T 视频编码专家组(VCEG)和ISO/IEC 动态图像专家组(MPEG

2015-02-13 23:22:21 791

原创 sqlite API

sqlite数据库的基本操作:1.关键数据结构sqlite 里最常用到的是 sqlite3 * 类型。从数据库打开开始,sqlite就要为这个类型准备好内存,直到数据库关闭,整个过程都需要用到这个类型。当数据库打开时开始,这个类型的变量就代表了你要操作的数据库。下面再详细介绍。2.打开数据库int sqlite3_open(filename, sqlit

2015-02-12 13:33:14 621

原创 H.264-语法结构

H.264中的名词解释场和帧 : 视频的一场或一帧可用来产生一个编码图像。在电视中,为减少大面积闪烁现象,把一帧分成两个隔行的场。

2014-11-26 15:05:32 604

原创 static修饰的变量与函数说明

static变量和static函数static关键字有两种意思1,表示变量是静态存储变量 表示变量存放在静态存储区. 2,表示该变量是内部连接 (这种情况是指该变量不在任何{}之内,就象全局变量那样,这时候加上static) ,也就是说在其它的.cpp文件中,该变量是不可见的(你不能用).当static加在函数前面的时候 表示该函数是内部连接,之在本文件中有效,

2014-11-26 14:01:24 1422

原创 Linux下的ctag工具介绍

对于Linux下的C/C++的 程序员,使用VIM+Ctags的组合来写程序也许是最佳的选择。

2014-11-24 12:27:18 3783 1

转载 Linux系统编程之管道:管道的读写规则与Pipe Capacity以及PIPE_BUF

一、当没有数据可读时O_NONBLOCK disable:read调用阻塞,即进程暂停执行,一直等到有数据来到为止。(管道的默认为阻塞)O_NONBLOCK enable:read调用返回-1,errno值为EAGAIN。

2014-11-21 16:10:45 689

原创 Linux系统编程之管道:匿名管道pipe与命名管道fifo

一、进程间通信每个进程各自有不同的用户地址空间,任何一个进程的全局变量在另一个进程中都看不到,所以进程之间要交换数据必须通过内核,在内核中开辟一块缓冲区,进程1把数据从用户空间拷到内核缓冲区,进程2再从内核缓冲区把数据读走,内核提供的这种机制称为进程间通信(IPC,InterProcess Communication)。如下图所示。

2014-11-21 16:09:01 784

转载 linux系统编程之信号(二):一些信号发送函数和不同精度的睡眠

一、kill, raise, killpg 函数

2014-11-16 00:21:21 566

原创 Linux文件权限说明

查看文件权限的语句:  在终端输入:ls -l xxx.xxx (xxx.xxx是文件名)  那么就会出现相类似的信息,主要都是这些:-rw-rw-r--

2014-11-12 19:29:45 584

转载 Linux进程间的通信(二)

一、死锁(1) 死锁是指多个进程之间相互等待对方的资源,而在得到对方资源之前又不释放自己的资源,这样,造成循环等待的一种现象。如果所有进程都在等待一个不可能发生的事,则进程就死锁了。(2)死锁产生的必要条件:互斥条件进程对资源进行排它性使用,即在一段时间内某资源仅为一个进程所占用。 请求和保持条件当进程因请求资源而阻塞

2014-11-06 19:54:17 676

转载 Linux进程间的通信(一)

一、顺序程序与并发程序特征顺序程序特征顺序性封闭性:(运行环境的封闭性)确定性可再现性并发程序特征共享性并发性随机性二、进程互斥1、由于各进程要求共享资源,而且有些资源需要互斥使用,因此各进程间竞争使用这些资源,进程的这种关系为进程的互斥2、系统中某些资源一次只允许一个进程使用,称这样的资源

2014-11-06 19:35:17 515

原创 STL顺利容器之双端队列(deque)

双端队列是由动态数组实现。头文件:#include 构造方法:deque deq                                        创建一个没有任何元素的双端队列deque deq(otherDeq)                    用另一个类型相同双端队列初始化该双端队列deque deq(size)    

2014-11-06 19:14:29 585

转载 Linux网络编程之socket:unix域套接字编程与socketpair函数

一、UNIX Domain Socket IPCsocket API原本是为网络通讯设计的,但后来在socket的框架上发展出一种IPC机制,就是UNIX Domain Socket。虽然网络socket也可用于同一台主机的进程间通讯(通过loopback地址127.0.0.1),但是UNIX Domain Socket用于IPC更有效率:不需要经过网络协议栈,不需要打包拆包、计算校验和、

2014-11-03 20:51:57 801

原创 STL顺序容器之向量(vector)

1,构造方法:vector vecList                                        创建一个没有任何元素的向量vector vecList(otherVecList)               用另一个类型相同向量初始化该向量vector vecList(size)                              初始化一个固定si

2014-11-02 12:44:14 558

转载 Linux网络编程之socket:epoll系列函数简介,与select,poll函数的区别

一、epoll 系列函数简介

2014-11-02 12:17:18 995

原创 linux网络编程之套接字:套接字I/O超时设置方法和用select实现超时

一、使用alarm 函数设置超时

2014-10-28 19:33:36 799

原创 ffmpeg常用命令

1.将一个视频转换成多张图片:

2014-10-26 14:58:47 796

转载 Linux网络编程之socket:select函数的并发限制与poll函数

一、用select实现的并发服务器,能达到的并发数,受两方面限制1、一个进程能打开的最大文件描述符限制。这可以通过调整内核参数。可以通过ulimit -n来调整或者使用setrlimit函数设置, 但一个系统所能打开的最大数也是有限的,跟内存大小有关,可以通过cat /proc/sys/fs/file-max 查看2、select中的fd_set集合容量的限制(FD_SETSIZE

2014-10-23 13:37:47 641

原创 Linux网络编程之socket:使用select函数实现并发处理

一、当我们使用单进程单连接且使用readline修改后的客户端程序,去连接使用readline修改后的服务器端程序,会出现一个有趣的现象,先来看输出:先运行服务器端,再运行客户端。

2014-10-21 19:19:49 6433

原创 H.264编码原理

H.264/AVC 是ITU-T 视频编码专家组(VCEG)和ISO/IEC 动态图像专家组(MPEG )联合组成的联合视频组(JVT)共同努力制订的新一代视频编码标准,它最大的优势是具有很高的数据压缩比率,在同等图像质量的条件下,H.264 的压缩比是MPEG-2 的2 倍以上,是 MPEG-4的1.5~2 倍。同时,采用视频编码层(VCL)和网络提取层(NAL )的分层设计,非常适用于流媒

2014-10-19 21:10:43 592

原创 ffmpeg安装第三方编码器

安装好了ffmpeg后,如果你使用ffmpeg工具去把某个视频文件转成h264视频编码、mp3音频编码or其他ffmpeg自身不带的xxx编码类型,就会看到报错信息,unknown encoder 'xxx'。此刻你需要的只要去安装其他的编码器就行了,本质上其实是把其他的编码器以库的形式安装好,例如,把正确的libx264.so or libx264.a存放在/usr/lib下 or /usr

2014-10-14 21:54:31 878

原创 Linux网络编程之socket:由一个进程发起多个连接

让一个客户端发起多个连接,然后只利用其中一个连接发送数据。

2014-09-21 21:46:08 1351

转载 Linux编程之socket:tcp流协议产生的粘包问题及解决方法

首先说明的是发送端可以是一K一K地发送数据,而接收端的应用程序可以两K两K地提走数据,当然也有可能一次提走3K或6K数据,或者一次只提走几个字节的数据,也就是说,应用程序所看到的数据是一个整体,或说是一个流(stream),一条消息有多少字节对应用程序是不可见的,因此TCP协议是面向流的协议,这也是容易出现粘包问题的原因。而UDP是面向消息的协议,每个UDP段都是一条消息,应用程序必须以消息为单位

2014-09-18 17:48:01 1469

原创 Ubuntu下安装ffmpeg

1.首先登入ffmpeg的官网下载源文件:

2014-09-17 17:40:35 5272 1

转载 Linux网络编程:信号

一、为了理解信号,先从我们最熟悉的场景说起:1. 用户输入命令,在Shell下启动一个前台进程。2. 用户按下Ctrl-C,这个键盘输入产生一个硬件中断。3. 如果CPU当前正在执行这个进程的代码,则该进程的用户空间代码暂停执行,CPU从用户态切换到内核态处理硬件中断。4. 终端驱动程序将Ctrl-C解释成一个SIGINT信号,记在该进程的PCB中(也可以说发送了一个SIGINT信

2014-09-14 16:47:06 856

原创 Linux网络编程之socket:使用fork并发处理多个client的请求和对等通信P2P

一、在前面讲过的回射客户/服务器程序中,服务器只能处理一个客户端的请求,如何同时服务多个客户端呢?在未讲到select/poll/epoll等高级IO之前,比较老土的办法是使用fork来实现。网络服务器通常用fork来同时服务多个客户端,父进程专门负责监听端口,每次accept一个新的客户端连接就fork出一个子进程专门服务这个客户端。但是子进程退出时会产生僵尸进程,父进程要注意处理SIGCHLD

2014-09-13 18:43:38 986

原创 Linux编程基础:C标准库IO缓冲区与内核缓冲区的区别

1.C标准库的I/O缓冲区         UNIX的传统 是Everything is a file,键盘、显示器、串口、磁盘等设备在/dev 目录下都有一个特殊的设备文件与之对应,这些设备文件也可以像普通文件(保存在磁盘上的文件)一样打开、读、写和关闭,使用的函数接口是相同的。用户程序调用C标准I/O库函数读写普通文件或设备,而这些库函数要通过系统调用把读写请求传给内核 ,最终由内核驱动磁

2014-09-12 11:30:26 969

转载 Linux网络编程之socket:socket与字节序以及地址转换函数

一、什么是socketsocket可以看成是用户进程与内核网络协议栈的编程接口。socket不仅可以用于本机的进程间通信,还可以用于网络上不同主机的进程间通信。

2014-09-12 11:25:08 690

转载 Linux编程基础:文件描述符file descriptor与inode

每个进程在Linux内核中都有一个task_struct结构体来维护进程相关的 信息,称为进程描述符(Process Descriptor),而在操作系统理论中称为进程控制块 (PCB,Process Control Block)。task_struct中有一个指针(struct files_struct *files; )指向files_struct结构体,称为文件 描述符表,其中每个表项包

2014-09-10 16:30:04 965

原创 Linux编程基础:C标准IO库函数与Unbuffered IO函数

先来看看C标准I/O库函数是如何用系统调用实现的。 fopen(3) 调用open(2)打开指定的文件,返回一个文件描述符(就是一个int 类型的编号),分配一 个FILE 结构体, 通常里面包含了:文件fd缓冲区指针缓冲区长度当前缓冲区读取长度出错标志返回这 个FILE 结构体的地址。 fgetc(3) 通过传入的FILE *参数找

2014-09-10 14:51:58 616

原创 Linux编程基础:read/write函数以及(非)阻塞I/O的概念

一、read/write 函数read函数从打开的设备或文件中读取数据。#include ssize_t read(int fd, void *buf, size_t count);返回值:成功返回读取的字节数,出错返回-1并设置errno,如果在调read之前已到达文件末尾,则这次read返回0参数count是请求读取的字节数,读上来的

2014-09-10 14:41:06 664

原创 Linux系统编程:fcntl函数与文件锁

一、fcntl函数功能:操纵文件描述符,改变已打开的文件的属性int fcntl(int fd, int cmd, ... /* arg */ );cmd的取值可以如下:复制文件描述符F_DUPFD (long)设置/获取文件描述符标志F_GETFD (void)F_SETFD (long)设置/获取文件状

2014-09-09 22:51:26 729

原创 Linux系统编程:文件的属性

一、读取文件元数据int stat(const char *path, struct stat *buf);int fstat(int fd, struct stat *buf);int lstat(const char *path, struct stat *buf); stat() stats the file pointed to by path an

2014-09-09 17:11:11 583

原创 Linux系统编程:目录的操作

一、目录的访问功能说明:打开一个目录原型:DIR*  opendir(char *pathname);返回值:打开成功,返回一个目录指针打开失败,则返回NULL

2014-09-09 15:08:00 470

原创 Linux系统编程:文件的读取写入

一、read系统调用一旦有了与一个打开文件描述相关连的文件描述符,只要该文件是用O_RDONLY或O_RDWR标志打开的,就可以用read()系统调用从该文件中读取字节 函数原型:ssize_t read(int fd, void *buf, size_t count);参数:fd :想要读的文件的文件描述符buf : 指向内存块的指针,从文件中读取来的字节放到

2014-09-06 18:36:25 827

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除