摘要: ffmpeg源码分析之数据流 http://www.yanfake.com本文主要介绍ffmpeg的数据流,在ffmpeg中主要分有三个主要用途用于媒体流的解码播放,媒体流的转换(解码之后再编码)和媒体流录制。媒体流的解码播放在ffmpeg中媒体流的解码播放流程如下图:其主要流程为从媒体文件中读取出媒体流,然后送入媒体格式解码器(demuxer)中去除多余的外衣--媒体格式。然后送入ffmpeg的codec的decode中进行解码,最终生成显示需要的YUV格式的图片,然后再送入类似SDL中进行渲染。ffmpeg中媒体流的解码播放流程相对比较来说其最大的难点在于pts的同步,在ffmpeg的ff 阅读全文
posted @ 2012-01-09 17:02 yanfake 阅读(334) 评论(0) 推荐(0) 编辑
摘要: FFMPEG基本概念:http://www.yanfake.comffmpeg是一个开源的编解码框架,它提供了一个音视频录制,解码和编码库。FFMPEG是在linux下开发的,但也有windows下的编译版本。ffmpeg项目由以下几部分组成:ffmpeg 视频文件转换命令行工具,也支持经过实时电视卡抓取和编码成视频文件.ffserver 基于HTTP(RTSP正在开发中)用于实时广播的多媒体服务器.也支持时间平移ffplay 用 SDL和FFmpeg库开发的一个简单的媒体播放器libavcodec 一个包含了所有FFmpeg音视频编解码器的库.为了保证最优性能和高可复用性,大多数编解码器从头 阅读全文
posted @ 2012-01-09 16:50 yanfake 阅读(641) 评论(0) 推荐(0) 编辑
摘要: 一、SDP协议介绍SDP 完全是一种会话描述格式 ― 它不属于传输协议 ― 它只使用不同的适当的传输协议,包括会话通知协议(SAP)、会话初始协议(SIP)、实时流协议(RTSP)、MIME 扩展协议的电子邮件以及超文本传输协议(HTTP)。SDP协议是也是基于文本的协议,这样就能保证协议的可扩展性比较强,这样就使其具有广泛的应用范围。SDP 不支持会话内容或媒体编码的协商,所以在流媒体中只用来描述媒体信息。媒体协商这一块要用RTSP来实现.二、SDP协议格式http://www.yanfake.comSDP描述由许多文本行组成,文本行的格式为<类型>=<值>,< 阅读全文
posted @ 2012-01-09 16:47 yanfake 阅读(322) 评论(0) 推荐(0) 编辑
摘要: 概述:实时传送协议(Real-time Transport Protocol或简写RTP,也可以写成RTTP)是一个网络传输协议,它是由IETF的多媒体传输工作小组1996年在RFC 1889中公布的。RTP协议详细说明了在互联网上传递音频和视频的标准数据包格式。它一开始被设计为一个多播协议,但后来被用在很多单播应用中。RTP协议常用于流媒体系统(配合RTCP协议或者RTSP协议)。因为RTP自身具有Time stamp所以在ffmpeg 中被用做一种formate.RTP协议格式: 0 1 2 ... 阅读全文
posted @ 2012-01-09 16:44 yanfake 阅读(508) 评论(0) 推荐(0) 编辑
摘要: 基本概念:I frame :帧内编码帧 又称intra picture,I 帧通常是每个 GOP(MPEG 所使用的一种视频压缩技术)的第一个帧,经过适度地压缩,做为随机访问的参考点,可以当成图象。I帧可以看成是一个图像经过压缩后的产物。P frame: 前向预测编码帧 又称predictive-frame,通过充分将低于图像序列中前面已编码帧的时间冗余信息来压缩传输数据量的编码图像,也叫预测帧;B frame: 双向预测内插编码帧 又称bi-directional interpolated prediction frame,既考虑与源图像序列前面已编码帧,也顾及源图像序列后面已编码帧之间的时 阅读全文
posted @ 2012-01-09 16:33 yanfake 阅读(1710) 评论(0) 推荐(0) 编辑
摘要: RTSP 协议分析1.概述:RTSP(Real Time Streaming Protocol),实时流传输协议,是TCP/IP协议体系中的一个应用层协议,由哥伦比亚大学、网景和RealNetworks公司提交的IETF RFC标准。该协议定义了一对多应用程序如何有效地通过IP网络传送多媒体数据。类似HTTP协议的流控制协议。它们都使用纯文本来发送信息,而且rtsp协议的语法也和HTTP类似,和HTTP协议相比RTSP协议所不同的地方是,RTSP协议是有状态的协议,而HTTP是无状态的协议。RTSP通过维护一个session来维护其状态的转换。RTSP协议的默认端口是554,默认的承载协议为T 阅读全文
posted @ 2012-01-09 16:23 yanfake 阅读(849) 评论(0) 推荐(0) 编辑
摘要: 本来是应该先写一个媒体文件格式的简单讲解的,还没来得及写,以后再写。今天就先根据ffmpeg的flv.c的flv_demux这个结构体来讲解一下当前比较流行的媒体格式flv.FLV 是FLASH VIDEO的简称,FLV流媒体格式是随着Flash MX的推出发展而来的视频格式。由于它形成的文件极小、加载速度极快,使得网络观看视频文件成为可能.当前主流的媒体网站像国内的优酷、国外youtube其标清格式的文件均采用flv的格式。FLV文件结构解析FLV是一个二进制文件,其文件格式如下图 ,由文件头(FLV header)和很多tag组成。tag又可以分成三类:audio,video,script 阅读全文
posted @ 2012-01-09 16:00 yanfake 阅读(1520) 评论(0) 推荐(0) 编辑
摘要: 开发平台:pc(xp),虚拟机vwmare6.5、Linux操作系统Fedora9转自研发客:http://www.yanfake.com需要知道的知识:1、printk打印输出的优先级#define KERN_EMERG "<0>"/*紧急事件消息,系统崩溃之前提示,表示系统不可用*/#define KERN_ALERT "<1>"/*报告消息,表示必须立即采取措施*/#define KERN_CRIT "<2>"/*临界条件,通常涉及严重的硬件或软件操作失败*/#define KERN_ERR 阅读全文
posted @ 2012-01-06 10:46 yanfake 阅读(248) 评论(0) 推荐(0) 编辑
摘要: 在上一篇文章里面我们编译了在X86体系的最简单的Linux下的入门驱动Hello,现在我们开始开发在ARM板上的最简单的Hello的驱动:转自研发客:http://www.yanfake.com开发环境:虚拟机上的Linux(Fedora)+ARM(11)+友善之臂的光盘带的linux内核linux-2.6.36开发步骤:1.先安装手册重新编译下内核和裁剪下文件系统,具体的就参考手册,上面写的很清楚,但是需要注意的是:在编译内核的时候不要选择linux_module_sample已经led和iic驱动,也就是不要包括hello驱动、led驱动、以及iic驱动。这个是为了方便在你的编译的驱动时好 阅读全文
posted @ 2012-01-06 10:44 yanfake 阅读(455) 评论(0) 推荐(0) 编辑
摘要: 转自研发客:http://www.yanfake.com在网络环境下,当服务一个客户请求可能花费较长时间时,我们并不希望整个服务器被单个客户长期占用,而是希望同时服务多个客户。一般我们的处理方法是通过在while循环accept客户的链接,然后通过线程处理已经连接过来的客户。还有一种比较好的方法,就是通过unix的fork函数建立一个子进程来处理。一个进程调用fork()函数后,系统先给新的进程分配资源,例如存储数据和代码的空间。然后把原来的进程的所有值都复制到新的新进程中,只有少数值与原来的进程的值不同。相当于克隆了一个自己。注意内核对象的引用计数会增加两次,父进程一次,子进程一次。下面是伪 阅读全文
posted @ 2012-01-06 10:36 yanfake 阅读(219) 评论(0) 推荐(0) 编辑