把这个搞明白,算是顿悟的一个真实例子。怎么也搞不懂的架构,突然就想明白了。不过这其实是一个思维的过程。当然如果你想明白这些东西,至少要非常清楚一个概念:接口。我只是一个半路出家的开发者,我真正明白什么接口时,我已经写了一年多代码了。书面的解释实在拗口,我记不住。我的理解就是:接口,在C语言里面,就是函数接口,在C++里面就是纯虚函数,在java里面就是interface。用接口,而不是实现来编程一个最大的好处就是:隔离变化。其实这些东西,都是我在李先静老师《系统程序员成长计划》里面领悟到的。好吧说完了接口的体会,少说废话,步入正题。我们要思考一个问题,对于一个播放器,解决的主要问题有哪些?当然 Read More
posted @ 2013-08-26 00:38 mr_nop Views(901) Comments(0) Diggs(0) Edit
最近搞windows编程,想学习一下direct show。编译了一下sdk里面的一个sample filter,做个笔记,记录一下。说来渐愧,vc也用了n久了,还没有自己动手建立一个正式的项目,都是在别人的项目里面增减东西,所以很多东西只能自己一步一步试探。学习filter本身可能不复杂,但是建立环境就非常恶心了,这里我写一点自己搭环境的过程,让需要的人可以少走点弯路。另外,一般需要建立这种工程的人,都是老程序员了,呵呵我这种新手,自然是没有机会弄,所以没弄过,我觉得也情有可原。哈哈。学习direct show,其实最基本的就是dxsdk sample里面baseclassed的学习。学好这 Read More
posted @ 2013-07-30 23:18 mr_nop Views(870) Comments(0) Diggs(0) Edit
修bug修得头疼,看看自己的博客,坑挖了一堆,出来混,迟早是要还的,这里先补一个。刚开始看多媒体这块时,总是发现有新框架,新平台,新名词弄得云山雾绕,为了避免重复google/wiki,我尝试做个总节吧。之前写过codec与container的区别,这里就不多说了,更近应用层的东西。这些东西大概有:vlc/ffmepg/mplayer/gstreamer/openmax/mpc/ffdshow/directshow...这些软件,所涉及的层面和针对的应用场景,系统各不相同,按层次分别说一下。一.播放器层次这个层次上,是直接可以用的软件,已经做完了一切工作,如果我们需要用他们,是不需要写一行代码 Read More
posted @ 2013-05-17 15:54 mr_nop Views(2099) Comments(0) Diggs(0) Edit
不多说了,想编译这个库的,都知道这是个啥,介绍个毛背景啊。呵呵。1.准备工作,需要安装的软件及工具Vs2010(skia官网上说要装windowssdkv7.0,实际上如果你装上vs2010,那这个sdk已经被装好了),cygwin,(注意安装上svn与python,官网说要装svn客户端,实际上cygwin里面你就可以选择安装,不用另外安装,python也一样。)反正有了这两样,基本就ok了。2.Checkout及配置代码svncheckouthttp://skia.googlecode.com/svn/trunk/skia-read-only然后打开cygwin,进入skia目录下,有一个 Read More
posted @ 2013-04-24 19:43 mr_nop Views(3907) Comments(0) Diggs(0) Edit
又挖一个坑,好久没写了,看得代码多而繁乱,又没有专精一块,到头来还是困惑丛生,不管了,做个笔记,写写自己对android hal层的一点理解。涉及的代码来自android-4.0版本。1.概念和原因android hal的概念和存在的原因,不必多说,其实就两点。1.隔离具体驱动接口的变化,2.保护硬件厂商的关键信息。通过这一层的封装1.各类硬件(fb,gps,sensor)只需要实现规定的接口即可,驱动接口的不兼容(比如各种硬件设备的ioctl,很可能是厂商自己规定的命令),可以隔离变化。2.硬件厂商在封装的接口,只需提供一个so即可,使用时,用dlopen hook到相关的接口,不用开放源代 Read More
posted @ 2013-02-27 14:27 mr_nop Views(6209) Comments(1) Diggs(4) Edit
上篇说完了基本的硬件组成,这篇谈一谈软件栈。对于一个完整软件来说,层次架构,可配置性,可移植性,都是必不可少的。包括os,tcp/ip协议栈,都具有这种属性。1.隔离硬件变化,不同的芯片产商,会提供不同的sdk,封装自己的硬件操作接口。但是这对跨平台软件来说,正是一个问题所在。隔离平台变化,不同的芯片厂商,针对自己的芯片移植了不同的os(例如linux/psos/vxworks/ecos/ucos/os21/...),线程,文件io,锁这些东西,都是会变化的。所以我们构建在os/driver之上的第一层就是porting层。这个层次上,软硬件功能基本是一一对应的。不会有虚拟设备之类东西出现。例 Read More
posted @ 2012-10-02 23:46 mr_nop Views(378) Comments(0) Diggs(0) Edit
这篇讲讲直播机顶盒的基本硬件组成。不打算谈拆机看到的东西,那样我们只能看到一堆的电容,电阻。。。。:)。这里要观注的是主要是主芯片和一些重要的外设。1.tuner,就是高频头。这是一切数据的来源,无论是音视频,还是oc数据广播,或者某些vod实现方式的点播数据。一般来说,一个盒子只有一个,但是,对于某些具有特别功能的机顶盒,也可能会有多个,比如带有pvr(personal video record)。就可能需要有两个tuner。2.qam,解调器。tuner过来是是经过数字调制的正弦波,还只是模拟信号,需要qam解调,把模拟信号转化成数字信号,cpu才能处理。不同的信道调制方式不同,qam的规 Read More
posted @ 2012-09-09 01:18 mr_nop Views(531) Comments(0) Diggs(0) Edit
网络上的数字电视的资料实在是比较少,大部分都在讲psi/si的基本表,这部分基本是与mpeg-2基本重合的。我更想讲的是数字电视的业务及基本实现的原理相关的。1,数字电视是什么?这里我们只讨论狭义上的单向广播电视。一个系统,一个由前端设备,终端和网络构成的系统。所谓前端,可以通俗的理解成,广播电视局,电视台,局方之类的播控管理方。实现把电视节目广播到各个终端上面,一般会有卫星信号接收器,视频编转码器,复用器,ca前端加扰器,qam等等。首先各个局方从卫星接收卫星信号,有时可能视频是由h264编码的,但是终端无法支持,所以要加上转码,把数个节目复用到一个频点上,经过加扰,调制,就播发出去了。下图 Read More
posted @ 2012-09-09 01:17 mr_nop Views(677) Comments(0) Diggs(0) Edit
播放器解决了视频播放的问题。通常来说,解决问题最好的办好就是大而化小,小而化无。因为整个播放过程是一个复杂的过程,所以播放器也采用分而治之的办法。简单来说,这个大问题可以分解为四个小问题。1,数据接收;2,数据解析;3,数据解码;4,数据输出。我会对mplayer和vlc这两个开源播放器的代码结构来说明这四个问题。一,数据接收(access)自然,我们不能无中生有,要处理数据,总要有数据来源才行。但是数据来源的渠道有很多种。可能是硬盘文件,可能是dvd光盘,也可能是http/httplive数据包,也可能是rtp数据包(vod),或者ftp,广播电视的ts流等等。所以第一步我们要处理的问题就是 Read More
posted @ 2012-09-01 15:39 mr_nop Views(1907) Comments(0) Diggs(0) Edit
这基本是一个老生常谈的东西了,但是我仍然是看了很多资料,加上一点点理解才完全明白了其中的差别所在。这就像上学时的考试大纲,这种东西要求是识记类型的,没有技术门槛,但是只有你把东西都记住之后,才完全知道书上再说什么。一,容器的概念什么叫容器,从字面的含义来说,能放东西的东西,就叫容器。打个比方就像桶,可以装水,可以装油,可以装硫酸,等等。一部电影,不可能只有图像,还有声音,可能还会有字幕,还会有文件作者,加密信息等等。但是我们又不能把这些东西单独存放,这样太麻烦了。所以发明这样一个“桶”,把图像,声音,字幕等等的东西,一股脑放到一个地方,这个“桶”就叫视频的容器。ps:又叫封装格式。一般来说,文 Read More
posted @ 2012-08-30 23:46 mr_nop Views(1979) Comments(3) Diggs(0) Edit