研究VLC笔记1

3 篇文章 0 订阅
1 篇文章 0 订阅

现在,此博客尚未写完,请读者谨慎阅读。


研究VLC-Android版本0.9.5,从vlc-android开始读代码:
1、LibVlC.java中有playMRL函数,感觉它是开始播放一个视频,此函数是调用一个本地jni函数:Java_org_videolan_libvlc_LibVLC_playMRL,在libvlcjni.c中。


2、在Java_org_videolan_libvlc_LibVLC_playMRL中调用libvlc_media_player_play,这个函数是在VLC工程的lib\media_player.c文件中


3、在lib\media_player.c文件的libvlc_media_player_play中,会调用VLC的src\input\input.c文件的input_Create函数,它启动一个线程去读文件或流。里面就一句话,执行函数:Create();


4、在Create()中是如何运行到解复用函数OpenDemux的,搞的不是很明白,大概是这样:在input.c中有MainLoop线程主循环,它的里面调用了MainLoopDemux,就在这个MainLoopDemux函数定义处,作者注释这个函数的用途:Main loop: Fill buffers from access, and demux。不出意外的话就是这里了,果然里面有一个来自src\input\demux.h的demux_Demux函数,这个函数近似于只有一句话return p_demux->pf_demux( p_demux );这句话什么意思,请看下面的5、6、7三点就明白了。


5、在VLC\modules\demux\avformat中有个OpenDemux函数,里面有我们熟悉的ffmpeg库的avformat_open_input和av_find_input_format,在此之前还调用了avcommon.h文件中的vlc_init_avformat(),它初始化了ffmpeg环境:av_register_all(),但这里有个疑问,我在公司的电脑上看到av_register_all()之后接着avformat_network_init(),但我在家里刚下载的VLC源码里又没有avformat_network_init,奇怪,难道是在编译的时候写进去的?


6、在VLC\modules\demux\avformat\demux.c文件中有个Demux函数,它里面有av_read_frame(),想必Demux真的就是解复用函数了。


7、那么上述的OpenDemux和Demux有什么关系呢?原来在OpenDemux中有个p_demux结构,通过这句话p_demux->pf_demux = Demux;把函数指针赋给了此结构。OpenDemux是在modules\demux\avformat\avformat.h中声明,在demux.c中定义的,在avformat.c的vlc_module_begin()和vlc_module_end()中,在这么一句set_callbacks( OpenDemux, CloseDemux ),估计这里就把OpenDemux绑定到某个回调过程了。


8、在Demux函数中有一句话很耐人寻味,就是在p_stream->codec->codec_type == AVMEDIA_TYPE_VIDEO时,专门判断格式是否是FLV,注释中写的是Add here notoriously bugged file formats/samples regarding PTS,什么意思?百度一下。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值