vlc源码分析
❶ vlc源代码如何使用
如果是用VC 6的打开dsw 后缀的文件,如果是VS 20003 打开sln 文件
如果是VS2005则打开 vcproject(这个名称比较长,忘了,不知是不是这个,不过差不多的)
❷ vlc源码中,main函数所在文件在哪里。找不到main函数了
bin/vlc.c
❸ vlc-android要怎么用
做vlc-android移植的道友都应该知道,当编译完vlc-android 源码后EventManager.java 类中定义了许多事件,下面是源码一部分: public class EventManager { /* * Be sure to subscribe to events you need in the JNI too. */ //public static final int MediaMetaChanged = 0; //public static final int MediaSubItemAdded = 1; //public static final int MediaDurationChanged = 2; //public static final int MediaParsedChanged = 3; //public static final int MediaFreed = 4; //public static final int MediaStateChanged = 5; //public static final int MediaPlayerMediaChanged = 0x100; //public static final int MediaPlayerNothingSpecial = 0x101; //public static final int MediaPlayerOpening = 0x102; //public static final int MediaPlayerBuffering = 0x103; public static final int MediaPlayerPlaying = 0x104; public static final int MediaPlayerPaused = 0x105; public static final int MediaPlayerStopped = 0x106; ...... } 可是对于这些事件有很多都被注释掉了,当我们需要被注释掉的事件时,就算把注释拿掉,再调用mEventManager.addHandler(EventManager.getInstance())添加事件之后,也不会在定义的mEventHandler 的handleMessage()中监听到,下面为一个mEventHandler定义的demo: [java] view plain private final VideoEventHandler mEventHandler = new VideoEventHandler(this); private class VideoEventHandler extends WeakHandler<DtvPlayer>{ public VideoEventHandler(DtvPlayer owner) { super(owner); } @Override public void handleMessage(Message msg) { DtvPlayer activity = getOwner(); if(activity == null) return; switch (msg.getData().getInt("event")) { case EventManager.MediaPlayerBuffering: Log.d(TAG, "MediaPlayerBuffering"); break; case EventManager.MediaPlayerEncounteredError: Log.d(TAG, "MediaPlayerEncounteredError"); break; ...... default: Log.e(TAG, String.format("Event not handled (0x%x)", msg.getData().getInt("event"))); break; } super.handleMessage(msg); } } 那么如何才能够在mEventHandler中监听到我们需要的事件呢,下面将进入主题。 在libvlcjni.c中有一个静态常量,其中指定了我们目前需要获取哪些事件: [html] view plain static const libvlc_event_type_t mp_events[] = { libvlc_MediaPlayerPlaying, libvlc_MediaPlayerPaused, libvlc_MediaPlayerEndReached, libvlc_MediaPlayerStopped, libvlc_MediaPlayerVout, libvlc_MediaPlayerPositionChanged }; 你可以将自己需要的事件添加在里面,然后将EventManager中响应的事件注释拿掉,之后重新编译源码就可以再mEventHandler中获取你刚添加的事件了。 (例如:你要想获取MediaPlayerEncounteredError事件,先将libvlc_MediaPlayerEncounteredError添加在mp_events[]静态常量中(注意,这里前面多了libvlc_),然后把EventManager中的public static final int MediaPlayerEncounteredError = 0x10a;注释拿掉,重新编译源码之后就可以在你得mEventHandler 的handleMessage()中获取到EventManger.MediaPlayerEncounteredError事件)。 在vlc-android/vlc/lib/event.c中定义了所有事件: [cpp] view plain #define DEF( a ) { libvlc_##a, #a, }, typedef struct { int type; const char name[40]; } event_name_t; static const event_name_t event_list[] = { DEF(MediaMetaChanged) DEF(MediaSubItemAdded) DEF(MediaDurationChanged) DEF(MediaParsedChanged) DEF(MediaFreed) DEF(MediaStateChanged) DEF(MediaPlayerMediaChanged) DEF(MediaPlayerNothingSpecial) DEF(MediaPlayerOpening) DEF(MediaPlayerBuffering) DEF(MediaPlayerPlaying) DEF(MediaPlayerPaused) DEF(MediaPlayerStopped) DEF(MediaPlayerForward) DEF(MediaPlayerBackward) DEF(MediaPlayerEndReached) DEF(MediaPlayerEncounteredError) DEF(MediaPlayerTimeChanged) DEF(MediaPlayerPositionChanged) DEF(MediaPlayerSeekableChanged) DEF(MediaPlayerPausableChanged) DEF(MediaPlayerTitleChanged) DEF(MediaPlayerSnapshotTaken) DEF(MediaPlayerLengthChanged) DEF(MediaPlayerVout) DEF(MediaListItemAdded) DEF(MediaListWillAddItem) DEF(MediaListItemDeleted) DEF(MediaListWillDeleteItem) DEF(MediaListViewItemAdded) DEF(MediaListViewWillAddItem) DEF(MediaListViewItemDeleted) DEF(MediaListViewWillDeleteItem) DEF(MediaListPlayerPlayed) DEF(MediaListPlayerNextItemSet) DEF(MediaListPlayerStopped) DEF(MediaDiscovererStarted) DEF(MediaDiscovererEnded) DEF(VlmMediaAdded) DEF(VlmMediaRemoved) DEF(VlmMediaChanged) DEF(VlmMediaInstanceStarted) DEF(VlmMediaInstanceStopped) DEF(VlmMediaInstanceStatusInit) DEF(VlmMediaInstanceStatusOpening) DEF(VlmMediaInstanceStatusPlaying) DEF(VlmMediaInstanceStatusPause) DEF(VlmMediaInstanceStatusEnd) DEF(VlmMediaInstanceStatusError) }; #undef DEF 其中DEF()将MediaPlayerEncounteredError定义为libvlc_MediaPlayerEncounteredError,当本地代码产生MediaPlayerEncounteredError事件时会将libvlc_MediaPlayerEncounteredError传递给jni,与此同时jni又会传递给java层。不管是本地libvlc_MediaPlayerEncounteredError还是java层MediaPlayerEncounteredError,对于同一个事件被定义的值都是相同的,传输的是同一个消息值。本地代码定义在vlc-android/vlc/include/libvlc_events.h, java代码定义在EventManager.java中。
❹ 怎么在新版本的vlcandroid中使用旧版本的vlc
做vlc-android移植的道友都应该知道,当编译完vlc-android 源码后EventManager.java
类中定义了许多事件,下面是源码一部分:
public class EventManager {/*
* Be sure to subscribe to events you need in the JNI too.
*///public static final int MediaMetaChanged = 0;
//public static final int MediaSubItemAdded = 1;
//public static final int MediaDurationChanged = 2;
//public static final int MediaParsedChanged = 3;
//public static final int MediaFreed = 4;
//public static final int MediaStateChanged = 5;//public static final int MediaPlayerMediaChanged = 0
❺ 求vlc播放器的源代码
最新版源码下载地址: http://download.videolan.org/pub/videolan/vlc/1.1.7/vlc-1.1.7.tar.bz2
但是官方不支持使用VC编译,并且不建议使用VC,移植难度很大。
官方支持的是MingW或者Cygwin,也就是GCC的Windows版。编译方法见官方Wiki:
- http://wiki.videolan.org/Win32CompileMSYS
- http://wiki.videolan.org/Win32CompileCygwin
❻ vlc for android为什么没有串流功能
做vlc-android移植的道友都应该知道,当编译完vlc-android源码后EventManager.java类中定义了许多事件,下面是源码一部分:publicclassEventManager{/**.*///=0;//=1;//=2;//=3;//=4;//=5;//=0x100;//=0x101;//=0x102;//=0x103;=0x104;=0x105;=0x106;}可是对于这些事件有很多都被注释掉了,当我们需要被注释掉的事件时,就算把注释拿掉,再调用mEventManager.addHandler(EventManager.getInstance())添加事件之后,也不会在定义的mEventHandler的handleMessage()中监听到,下面为一个mEventHandler定义的demo:[java]=newVideoEventHandler(this);{publicVideoEventHandler(DtvPlayerowner){super(owner);}@(Messagemsg){DtvPlayeractivity=getOwner();if(activity==null)return;switch(msg.getData().getInt("event")){caseEventManager.MediaPlayerBuffering:Log.d(TAG,"MediaPlayerBuffering");break;caseEventManager.MediaPlayerEncounteredError:Log.d(TAG,"MediaPlayerEncounteredError");break;default:Log.e(TAG,String.format("Eventnothandled(0x%x)",msg.getData().getInt("event")));break;}super.handleMessage(msg);}}那么如何才能够在mEventHandler中监听到我们需要的事件呢,下面将进入主题。在libvlcjni.c中有一个静态常量,其中指定了我们目前需要获取哪些事件:[html]viewplainstaticconstlibvlc_event_type_tmp_events[]={libvlc_MediaPlayerPlaying,libvlc_MediaPlayerPaused,libvlc_MediaPlayerEndReached,libvlc_MediaPlayerStopped,libvlc_MediaPlayerVout,libvlc_MediaPlayerPositionChanged};你可以将自己需要的事件添加在里面,然后将EventManager中响应的事件注释拿掉,之后重新编译源码就可以再mEventHandler中获取你刚添加的事件了。(例如:你要想获取MediaPlayerEncounteredError事件,先将libvlc_MediaPlayerEncounteredError添加在mp_events[]静态常量中(注意,这里前面多了libvlc_),然后把EventManager中的=0x10a;注释拿掉,重新编译源码之后就可以在你得mEventHandler的handleMessage()中获取到EventManger.MediaPlayerEncounteredError事件)。在vlc-android/vlc/lib/event.c中定义了所有事件:[cpp]viewplain#defineDEF(a){libvlc_##a,#a,},typedefstruct{inttype;constcharname[40];}event_name_t;staticconstevent_name_tevent_list[]={DEF(MediaMetaChanged)DEF(MediaSubItemAdded)DEF(MediaDurationChanged)DEF(MediaParsedChanged)DEF(MediaFreed)DEF(MediaStateChanged)DEF(MediaPlayerMediaChanged)DEF(MediaPlayerNothingSpecial)DEF(MediaPlayerOpening)DEF(MediaPlayerBuffering)DEF(MediaPlayerPlaying)DEF(MediaPlayerPaused)DEF(MediaPlayerStopped)DEF(MediaPlayerForward)DEF(MediaPlayerBackward)DEF(MediaPlayerEndReached)DEF(MediaPlayerEncounteredError)DEF(MediaPlayerTimeChanged)DEF(MediaPlayerPositionChanged)DEF(MediaPlayerSeekableChanged)DEF(MediaPlayerPausableChanged)DEF(MediaPlayerTitleChanged)DEF(MediaPlayerSnapshotTaken)DEF(MediaPlayerLengthChanged)DEF(MediaPlayerVout)DEF(MediaListItemAdded)DEF(MediaListWillAddItem)DEF(MediaListItemDeleted)DEF(MediaListWillDeleteItem)DEF(MediaListViewItemAdded)DEF(MediaListViewWillAddItem)DEF(MediaListViewItemDeleted)DEF(MediaListViewWillDeleteItem)DEF(MediaListPlayerPlayed)DEF(MediaListPlayerNextItemSet)DEF(MediaListPlayerStopped)DEF(MediaDiscovererStarted)DEF(MediaDiscovererEnded)DEF(VlmMediaAdded)DEF(VlmMediaRemoved)DEF(VlmMediaChanged)DEF(VlmMediaInstanceStarted)DEF(VlmMediaInstanceStopped)DEF(VlmMediaInstanceStatusInit)DEF(VlmMediaInstanceStatusOpening)DEF(VlmMediaInstanceStatusPlaying)DEF(VlmMediaInstanceStatusPause)DEF(VlmMediaInstanceStatusEnd)DEF(VlmMediaInstanceStatusError)};#undefDEF其中DEF()将MediaPlayerEncounteredError定义为libvlc_MediaPlayerEncounteredError,当本地代码产生MediaPlayerEncounteredError事件时会将libvlc_MediaPlayerEncounteredError传递给jni,与此同时jni又会传递给java层。不管是本地libvlc_MediaPlayerEncounteredError还是java层MediaPlayerEncounteredError,对于同一个事件被定义的值都是相同的,传输的是同一个消息值。本地代码定义在vlc-android/vlc/include/libvlc_events.h,java代码定义在EventManager.java中。