随笔分类 -  多媒体编程

RTSP协议详解
摘要:关于RTSP.RTSP协议是一个非常类似HTTP协议的流控制协议。它们都使用纯文本来发送信息,而且rtsp协议的语法也和HTTP类似。Rtsp一开始这样设计,也是为了能够兼容使用以前写的HTTP协议分析代码。这是个好消息。它们主要的区别是HTTP协议是没有状态的,http协议在发送一个命令后,连接会断开,而且命令之间没有依赖性。不同的是RTSP的命令需要知道现在正处于一个什么状态,也就是说rtsp的命令总是按照顺序来发送,某个命令总在另外一个命令之前要发送。Rtsp不管处于什么状态都不会去断掉连接。HTTP协议默认使用80端口,而RTSP默认使用554端口。如果一些服务器因为某些安全的原因而封 阅读全文
posted @ 2012-12-18 22:10 一个人的天空@ 阅读(6338) 评论(0) 推荐(0)
windows 下VLC播放器应用之二------LIBVLC API解析
摘要:APIlibvlc_instance_t*libvlc_new(int argc, const char* const* argv) libvlc_instance_t* libvlc_new(int argc, const char* const* argv) 创建并初始化一个LIBVLC实例 这个函数接受一个命令行参数列表,这个参数列表影响LIBVLC INSTANCE的缺省配置. Version: 参数意味着被从命令行传递到LIBVLC,就像VLC媒体播放器做的那样。有效的参数列表依赖于LIBVLC的版本、操作系统、平台以及LIBVLC的插件集。无效或不支持的参数将会... 阅读全文
posted @ 2011-08-21 17:44 一个人的天空@ 阅读(10911) 评论(0) 推荐(0)
视频播放的基本原理
摘要:VLC是一个功能强大的玩意,能做很多有意思的事情。最简单的,从界面打开一个文件播放,也可以在命令行下使用,如C:\Program Files\VideoLAN\VLC>vlc.exe test.ts获取内置的帮助,会写到vlc-help.txtC:\Program Files\VideoLAN\VLC>vlc.exe -h获取更详细的帮助,有大量的选项介绍C:\Program Files\VideoLAN\VLC>vlc.exe -H在线使用帮助http://www.videolan.org/doc/play-howto/en/play-howto-en.htmlhttp:/ 阅读全文
posted @ 2011-05-11 17:00 一个人的天空@ 阅读(2076) 评论(0) 推荐(0)
vlc的第三方库contrib的修改之二:ffmpeg的库的修改
摘要:经常有朋友问Jeremiah怎么缩减VLC使用的FFMPEG的库,这个说难不难,说简单也不简单。经过两天的研究,修改了几个错误,把VLC-1.0.5使用的ffmpeg重新编译了,并添加到VLC-1.0.5中,现在就将过程记录下来,供大家参考。环境:1. Cygwin-new(20081208)2. VLC-1.0.53. contribs-1.0.2-gcc-4.2.1-sjlj-runtime-3.15.2-only.tar.bz21. 获取修改VLC的contrib的一般方法 本小节讲的很重要,如果要修改其他的库,只要记住本小节所讲的,一般都能修改好。 VLC源码当中都会提供获取编译con 阅读全文
posted @ 2011-03-15 15:02 一个人的天空@ 阅读(2059) 评论(0) 推荐(0)
vlc的第三方库contrib的修改之一:live库的修改
摘要:感谢vlc研究群的gg-Ak47童鞋的帮忙,虽然很据他给我讲的我没有搞定。Contrib库都是官网提供的,如果有些代码调用的第三方库,我们调试修改起来就很麻烦。Jeremiah最近再调试vlc的rtsp方面的东西,编译了live555的库,替换掉官网提供的Contrib里面关于live方面的库,vlc编译通过,实现了对第三方库的修改。在此共享,提供一个思路,其他的库,以此类推。测试环境:1.cygwin-new(20081208)2.vlc-0.9.9a3.contrib-20090118-win32-bin-gcc-4.2.1-sjlj-runtime-3.13-only.tar.bz2(在 阅读全文
posted @ 2011-03-15 14:57 一个人的天空@ 阅读(1472) 评论(0) 推荐(0)
YUV格式学习笔记
摘要:YUV与RGB表现图像的方法不同,其采用的是一个亮度信号加两个色差信号的方式来表现图像。其中UV表示的是CbCr,常见的YUV格式有:YUV4:2:0,YUV4:2:2,YUV4:1:1,YUV4:4:4,其代表的是不同的图像压缩方式。YUV的存储方式分为打包模式(packed)和平面模式(planar),下面摘自DX9SDK手册:YUVformatsaredividedintopackedformatsandplanarformats.Inapackedformat,theY,U,andVcomponentsarestoredinasinglearray.Pixelsareorganized 阅读全文
posted @ 2010-12-13 16:48 一个人的天空@ 阅读(410) 评论(0) 推荐(0)
视频与图像RGB/YUV格式详解(转)
摘要:视频与图像RGB/YUV格式详解(转)计算机彩色显示器显示色彩的原理与彩色电视机一样,都是采用R(Red)G(Green)B(Blue)相加混色的原理:通过发射出三种不同强度的电子束,使屏幕内侧覆盖的红绿蓝磷光材料发光而产生色彩这种色彩的表示方法称为RGB色彩空间表示(它也是多媒体计算机技术中用得最多的一种色彩空间表示方法)根据三基色原理,任意一种色光F都可以用不同分量的RGB三色相加混合而成F=r[R]+g[G]+b[B]其中,rgb分别为三基色参与混合的系数当三基色分量都为0(最弱)时混合为黑色光;而当三基色分量都为k(最强)时混合为白色光调整rgb三个系数的值,可以混合出介于黑色光和白色 阅读全文
posted @ 2010-12-13 16:48 一个人的天空@ 阅读(3245) 评论(0) 推荐(0)
vlc的应用之七:用vlc做单播,组播及点播服务器
摘要:还是前两天帮“猪小妹”考虑毕业设计的时候,想了想vlc能不能作为vod的服务器,替代上一篇博客里面的live555mediaserver,因为live555mediaserver做的确实不是太好。查了些资料,在vlc群里面乱问了一通,终于解决了。好东西啊,大家共享。在这感谢vlc研究群“樱木”童鞋提供的帮助。1.所需软件vlc-0.9.9或vlc-0.8.6i,主要测试的是比较新的0.9.9版本的。putty:一款集telnet,ssh远端登陆的非常好的软件。下载地址:http://wrc.gro.clinux.org/putty/putty.exe2.命令行启动vlc,并打开后台信息显示,有 阅读全文
posted @ 2010-11-11 10:39 一个人的天空@ 阅读(2889) 评论(0) 推荐(0)
vlc的应用之六:简单的视频点播系统(B/S)的实现
摘要:前两天帮“猪小妹”考虑毕业设计的时候,想了想视频点播系统的该如何实现。在这写一下自己的想法和非常简单的实现方式,纯属娱乐,请勿拍砖。1.大体的架构及流程实现视频点播系统,B/S架构,服务端至少应该是两个服务器:流媒体服务器,web服务器。客户端则就是web页面。当开启页面后则是客户端和服务器的第一次交互,通过http协议得到页面。里面会有流媒体地址的信息,浏览器里面点击显示视频组件,将流媒体的地址传给流媒体播放器,并启动播放器去请求视频。这是第二次交互。服务器端流媒体服务器发送流给客户端,页面上播放就okay了。2.环境及所需软件Jeremiah的测试环境是xpsp2及IE8浏览器。IP地址: 阅读全文
posted @ 2010-11-11 10:38 一个人的天空@ 阅读(2669) 评论(0) 推荐(0)
vlc的应用之五:动态调用libvlc.dll的补充
摘要:最近Jeremiah在增加以前播放器的功能的时候,被一个中文路径转码问题恶心了两天,最后终于让我给解决了。在这跟大家分享这个转码的解决方法,以及用视频本次存储的接口实现。 在看本篇日志之前,请先看我以前写的《vlc的应用之三:动态调用vlc-0.9.4的libvlc.dll 》。 补充一:libvlc_new(...)接口的中文路径转码处理using System;using System.Runtime.InteropServices;namespace MyOwnPlayer{class Core{//coreHandle字段和属性private CoreHandle coreHandle 阅读全文
posted @ 2010-11-11 10:32 一个人的天空@ 阅读(3336) 评论(0) 推荐(0)
一个最简单的源Filter的编写步骤 转贴
摘要:1.创建一个空的Dll工程,添加5个空文件分别名为:MyOutputPin.h、MySourceFilter.h、MyOutputPin.cpp、MySourceFilter.cpp和MySourceFilter.def。2.声明两个类,一个是Filter的实现类,一个是输出Pin的实现类,由于是最简单的源Filter,因此Filter只有一个输出Pin。实现的功能是从本地磁盘读取三个图片文件,轮流显示这三张图片,效果是模拟一个视频流。这两个类的声明代码:viewplaincopytoclipboardprint?//MySourceFilter.hclassCMySourceFilter// 阅读全文
posted @ 2010-09-07 17:45 一个人的天空@ 阅读(2635) 评论(0) 推荐(0)
RTSP协议通讯时需注意的细节
摘要:下午用Socket发送RTSP协议总是发送失败,而抓vlc的包几乎一模一样。手动发送协议时,有时行有时不行,比较郁闷。终于跟出来了,分为2点:1、每一条协议的后边都要加上回车+换行符,一次协议发送要发2次回车+换行符(该死的网络调试助手,误导我,字符串发送的时候自动去掉回车+换行符,导致一直不成功,16进制发送才可以。。。);2、初次向服务器发送OPTIONS时一定要加上User-Agent:XXX,否则服务器不会返回任何信息。 阅读全文
posted @ 2010-09-02 22:35 一个人的天空@ 阅读(517) 评论(0) 推荐(0)
MS VC6编译VLC-0.9.9a步骤说明
摘要:VLC在0.8.6C版本时,还保持着大部分代码对MSVC编译环境的兼容,到了0.9版本以后,就基本放弃了对MSVC的兼容性了。不过,要在MSVC环境里编译VLC最新版本,也还是有方法可以做到。VC6的编译环境,补丁版本ServicePack5,ProcessorPackSP5。下面仅以一个plugin的移植编译过程来说明。1.首先,将VLC-0.8.6C的msvc目录拷贝到vlc-0.9.9a目录下,这里面有多数plugin的VC6的.dsp工程文件。2.用VC6打开plugin_mp4.dsp,先尝试编译,错误如下:--------------------Configuration:plug 阅读全文
posted @ 2010-08-27 16:53 一个人的天空@ 阅读(3871) 评论(0) 推荐(0)
VLC各个Module模块之间如何共享变量
摘要:在做VLC开发的时候,想使用一个模块访问另外一个模块的数据,比如在网络模块得到了一些数据,想在其他模块得到这些数据进行处理,这时候就需要两个模块共享一些变量。查看VLC的源码,发现VLC专门有variables.h和variables.c是用来处理变量的。它提供了一些方法可以创建VLC变量、设置VLC变量、改变、销毁VLC变量等。当我们要产生一个VLC变量的时候,我们使用var_Create()函数;如在UDP模块创建了一个变量,vlc_value_tvalTemp;var_Create(p_access,"var_test",VLC_VAR_STRING);valTemp 阅读全文
posted @ 2010-08-27 15:53 一个人的天空@ 阅读(932) 评论(0) 推荐(0)
There Are Free RTSP DirectShow Source Filters with full source code
摘要:Hi,Thereareseveralfreeforcommercialuse,publishedRTSPDirectShowSourceFilters,withfullsourcecodeinC++.imustadmitthatittookaLOTofsearchingtofindthem!IwilltellyouaboutonethatIthinkisthebest.LookatthesourcecodeforVLC(VideoLAN)andpulloutthefiles:access.creal.crtsp.crtsp.hThat'sallyouneed.Lookatthesamp 阅读全文
posted @ 2010-08-27 11:18 一个人的天空@ 阅读(655) 评论(0) 推荐(0)
vlc代码分析(4)——mpgv的demux
摘要:Mpgv.c是对mpegvedio的解码部分,从demux开始,到sample到输出。其中,核心部分是函数ParseMPEGBlock。两种数据格式:video_format是video的meta_data,block是实际的数据CodePath:Open()----->Modules/demux/Mpgv.c1)setfunctionpoint.p_sysismainstructurep_demux->pf_demux=Demux;p_demux->pf_control=Control;p_demux->p_sys=p_sys=malloc(sizeof(demux_ 阅读全文
posted @ 2010-08-27 10:38 一个人的天空@ 阅读(1402) 评论(0) 推荐(0)
vlc代码分析(3)——输入模块
摘要:输入模块的CodePath,看来主要的分析还是在demux和access模块的分析。现在的codepath只是大致的模块input_CreateThread2--->Create()---->Run()---->Init()vlm.cinput.cinput.cinput.c---->input_EsOutNew()input.c---->[1]InputSourceInitinput.c1)-->demux2_New--->__demux2_New-->module_Need(p_demux,"access_demux",p 阅读全文
posted @ 2010-08-27 10:37 一个人的天空@ 阅读(1118) 评论(0) 推荐(0)
vlc 代码分析(2)——vlc中vlm介绍
摘要:概述代码从两大部分入手,一个telnet的deamon。还有就是rtsp的实现部分。结果发现,他们通过了一个桥梁vlm的media进行沟通。当受到newMEDIANAMEvodenabled就建立一个media。如果受到setupMEDIANAMEinputfilename.mpg就读入流准备分析,建立input流当受到rtsp的请求后,就建立这个output流这样,vod就和别的模块一致了。rtsp只是一种output流的module。代码分析1./modules/control/telnet.c/*********************************************** 阅读全文
posted @ 2010-08-27 10:36 一个人的天空@ 阅读(2146) 评论(0) 推荐(0)
vlc 代码分析(1)——框架分析
摘要:1.vlc.c只是入口程序2.Libvlc.c是各个模块的结合点,这要是对接口编程Vlc_Create():两个重要的数据结构:libvlc_t&vlc_t,所有的参数传递都在这里面Vlc_Init():初始化参数,module_bankVlc_AddInf():添加module3./src/misc/configure.c命令行参数和参数文件分析参数文件是~/.vnc/vlcrc。其中可以设置log文件的位置4./include/所有头文件的集合5./src/interface/Interface.h所有module的集合6./src/misc/Modules.c其中module_t 阅读全文
posted @ 2010-08-27 10:36 一个人的天空@ 阅读(4119) 评论(2) 推荐(0)
vlc学习计划(7)--从接收到数据流到播放视频的过程分析
摘要:从接收到数据流到播放视频的过程分析从网络接收到流->对数据流进行视频和音频分离->对视频用解码器解码->显示解码后的视频流视频显示部分走势线:分离->解码->新的VOUT缓冲区->VOUT线程Demux(modules\demux\mpeg\ps.c)->DemuxPs(modules\demux\mpeg\system.c)->ParsePS->input_SelectES(src\input\input_programs.c)->input_RunDecoder(src\input\input_dec.c)->CreateD 阅读全文
posted @ 2010-08-27 10:14 一个人的天空@ 阅读(2073) 评论(0) 推荐(0)