红联Linux门户
Linux帮助

改mplayerplugin-in插件的经历

发布时间:2007-07-16 00:33:44来源:红联作者:postnew
  实验室作了一个j2ee的教学系统,在windows下和x86 linux下都跑得不错,音频和视频都使用adobe flash player来实现,但是7.7日接到任务说争取要让系统能在"龙芯"debian linux上面跑,现在改原来的程序时间不够,期望能在firefox插件上下功夫,现在播放音频和视频的代码如下:

  
  

  flash插件通过src属性的.swf后缀确定使用flash来播放相应的flv格式流或者Mp3等东西,因为adboe flash插件不支持"龙芯"debian linux,所以得改进插件

  基本思想:把src属性和flashvar属性读出来,进行变换,以访问到正确的媒体的文件.测试linux下的mplayer播放flv格式和Mp3等都非常好,决定就使用Mplayer

  起初,想直接作找个firefox插件,把flashvar值提取出来赋值给src.看了一天firefox插件相关的的xul,js等文档,查看了mediawrap,mediaconnectivity插件的源码,到星期天下午,终于把任务完成了.

  这其中最大的感触是:作插件的时候怎么调试啊?开始时连printf都不知道往那个地方打,最后才发现firefox提供的console service,可以把调试信息往"错误控制台"里面输出.

  改了,完成了,可是遗憾的是调用的mplayer是作为独立的应用程序在运行,没有嵌入到firefox里面去!才发现虽然花了2天时间用xul,js的方式完成任务,结果是不符合要求!

  于是找了mplayerplug-in插件,在龙芯的库里面没有,自己于是拿了apt-get source 了ubuntu的源拿到龙芯上编译.相关的依赖库虽然和ubuntu的名称不同,所幸还是比较顺利的建立了编译环境.

  以前自己从来没有在linux下作过c++开发,自己也没有用C++作过任何的项目,但是根据自己的思路:不就是把src的属性用flashvar属性作一下转换吗?不熟习C++也没关系,会点基本语法就行.

  于是看makefile文件,看头文件,看源码,大概理清了流程,很快星期2就把从浏览器传给plugin的参数的src属性给改过来了,测试,通不过!

  于是继续仔细看源码,发现真正调用的时候是用的stream->url,于是想改stream->url属性,确发现是const char *,不许改,死马当活马,找到系统库的头文件,改成char *,改调stream->url的值,结果还是不行!

  "当实在没法子的时候,去看手册吧",于是星期5把dev.mozilla.org上关于plugin的文档仔细看了个几次:弄清了流程:firefox->根据网页查找合适的插件->初始化插件->实例化->播放文件.设想只要在实例化插件以前把参数改过来就行,测试,仍然不行!

  然后才发现在插件初始化时里面的文件就已经以stream的方式存在,插件实例化后改的参数并不能影响从浏览器到插件里面的的流!如果要改变,只能自己重新建一个流,获取对应的URL文件,但是这个流也是从浏览器->插件的,默认的是http://domain.com/xxx.flv,浏览器会把这个流自动的传给Plugin,因为没有使用方式,如果真要处理,只能自己弄一个流机制来处理获取的文件,太麻烦了

  或者说把播放的url直接传给plugin,让plugin直接播放,可惜的是流不是seekable的,这样很多flv格式的流播放会失败..

  只好give up.

  小结:
  1,插件调试是个麻烦事情
  2,一定要在最初弄明白任务究竟是什么
  3,有更加简单的方案时不要用复杂的方案
  4,作事情前一定要先看文档,看文档
  5,C的内存分配真烦啊。

  其实没有必要那么改,只要把embed的标记改为,默认的mplayerplugin-in不支持x-flv,改为支持这种格式的文件就简单多了

  
  

  改网页的输出源,使用标准的方式处理,何必折疼1个星期。
文章评论

共有 0 条评论