vlcplayer源碼
A. 求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
B. 如何在MacOSX Lion上編譯VLC media player
11.03
在Mac OS X Lion下編譯VLC media player
Prerequisite
Mac OS X Lion
XCode 4.4.1
0.建立一個文件夾並進入
$ mkdir vlc_osx && cd vlc_osx
1.設置編譯器
$ export CC=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/cc
$ export CXX=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++
$ export OBJC=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/cc
2. 下載源碼至本地
$ git clone git://git.videolan.org/vlc.git
3. 編譯autoconfig等工具
$ cd vlc/extras/tools
$ ./bootstrap && make
$ cd ../..
$ export PATH=$PWD/extras/tools/build/bin:$PATH
(注意第四項設置非常重要,確保自行編譯生成的工具所在的路徑在系統原有路徑之前,否則會調用
系統原有的lib tool工具,由於版本問題,可以會導致下面的步驟出錯)
4. 設置操作系統版本
$ export OSX_VERSION=10.7
5. 編譯
$ cd contrib
$ mkdir -p osx && cd osx
$ ../bootstrap --host=x86_64-apple-darwin11 --build=x86_64-apple-darwin11
6.編譯第三方庫
6.1 下載編譯好的第三方庫(推薦)
$ make prebuilt
6.2 從源碼自行編譯第三方庫(反正我是沒有編譯成功)
$ make -j4 .gettext
$ export PATH=$PWD/../x86_64-apple-darwin11/bin:$PATH
7.Bootstrap VLC
$ cd ../..
$ ./bootstrap
8.配置編譯選項(Configure)
$ mkdir -p build && cd build
$ ../extras/package/macosx/configure.sh --enable-debug --disable-ncurses --host=x86_64-apple-darwin11 --build=x86_64-apple-darwin11
9.編譯VLC
$ make -j4 或 $./compile.sh
10.開始使用
此時在當前目錄下(即build目錄)下應有一個VLC.app目錄
$VLC.app/Contents/MacOS/VLC
應該可以看到vlc media player正確啟動了
Reference
http://wiki.videolan.org/OSXCompile
C. 如何在Ubuntu上安裝VLC播放器,以及DASH VLC plugin,使其支持DASH訪問
最簡單的方法,打開軟體中心或新立得,直接搜vlc,找到後安裝。
稍微難一點的方法,打開終端,輸入命令
sudoapt-getinstallvlc
我沒有命令行安裝過vlc,不知道軟體庫里還是不是vlc,如果不是一般可以這樣解決
sudoapt-getinstallvlc*
最難的方法,下載源碼自己編譯安裝。
********************************************************
插件那個安裝,建議先安裝新立得(建議必裝)
sudoapt-getinstallsynaptic
用sudo許可權打開後直接查找相關的插件名,然後安裝。
或者用上面的方法
sudoapt-getinstallvlc*
除了vlc之外還會顯示很多可用插件,選擇你需要的,安裝即可,例如
sudoapt-getinstallvlcvlc-dash-plugin
上面命令我瞎編的不能信,具體看你終端里的反饋。
D. vlc播放器是用什麼寫出來的
以下是編譯VLC源代碼時所需的庫:
Third party libraries used by VLC
You'll find a complete list on the wiki.
But, here are the most important libraries.
Audio/Video codecs
liba52 - an ATSC A/52 (aka AC3) audio decoder
libmad - an MPEG audio decoder
libmpeg2 - an MPEG1/2 video decoder
libavcodec (ffmpeg) - an extensive audio/video codec library which supports several formats like MPEG4, H263, WMV/A etc...
libogg - an Ogg bitstream parser
libvorbis - a Vorbis audio decoder
libflac - a FLAC (Free Lossless Audio Codec) audio decoder
libspeex - a Speex (Free speech codec) audio decoder
libtheora - a Theora video decoder
libfaad2 - an AAC audio decoder
libdv - a DV video decoder (deprecated in favor of libavcodec)
libxvidcore (xvid) - an ISO MPEG-4 compliant video codec (deprecated in favor of libavcodec)
libdca - A DTS Coherent Acoustics decoding library.
GUI framework libraries
wxWidgets - a cross-platform C++ GUI framework that keeps the look and feel of each platform
QT4 - a C++ Cross-Platform Rich Client Development Framework
Audio/Video output libraries
libsdl - a cross-platform multimedia library designed to provide level access to audio, and 2D video framebuffer
Miscellaneous libraries
libdvdcss - a library for accessing encrypted DVDs
libdvdnav - a library for DVD navigation
libdvdread - a library for reading DVD-Video images
libdvbpsi - a library designed for decoding and generation of MPEG TS and DVB PSI tables
libopenslp - an open-source implementation of Service Location Protocol
gettext - a set of tools that provides a framework to help applications proce multi-lingual messages
libfreetype2 - a software font engine that is designed to be small, efficient, highly customizable and portable while capable of procing high-quality output (glyph images).
fribidi - A Free Implementation of the Unicode Bidirectional Algorithm
liveMedia - C++ libraries for multimedia streaming (RTP/RTCP, RTSP, SIP)
matroska - a new, extensible open standard Audio/Video container format
If you're using those libs to compile VLC for windows with mingw-gcc 3.3.1, you can use our Win32 contribs.
如果需要更權威的回答,這里是VLC官方提供的源碼下載:
http://download.videolan.org/pub/vlc/
E. 我的電腦為什麼安裝不了VLC media player
http://download.videolan.org/pub/videolan/
這里有vlc各個版本的源代碼和二進制文件,直接下你想要的版本的二進制文件解壓後就可以用了,不用安裝。(注意選與自己操作系統一值的壓縮包)
F. 怎麼用java調用vlc播放器
最簡單的方法,打開軟體中心或新立得,直接搜vlc,找到後安裝。稍微難一點的方法,打開終端,輸入命令sudo apt-get install vlc我沒有命令行安裝過vlc,不知道軟體庫里還是不是vlc,如果不是一般可以這樣解決sudo apt-get install vlc*最難的方法,下載源碼自己編譯安裝。********************************************************插件那個安裝,建議先安裝新立得(建議必裝)sudo apt-get install synaptic用sudo許可權打開後直接查找相關的插件名,然後安裝。或者用上面的方法sudo apt-get install vlc*除了vlc之外還會顯示很多可用插件,選擇你需要的,安裝即可,例如sudo apt-get install vlc vlc-dash-plugin上面命令我瞎編的不能信,具體看你終端里的反饋。
G. VLC播放器看網路電視,應該打開什麼文件,是什麼格式的,代碼是什麼,謝謝!
、轉發服務端設置
首先將一個性能好的電腦作為轉發伺服器,運行VLC Media Player軟體,在菜單欄里,通過[文件]→[打開文件],選擇[網路],選「HTTP/HTTPS/FTP/MMS」傳輸協議,在網址填寫框內填寫需要播放衛星節目的網址,網上的教程均介紹應該填寫「 xxx/video.m3u」,但發現不能成功,正確的方式應該填寫衛星節目的詳細網址,這就和在WEB頁面調用VLC Media Player軟體時,必須先下載後方能播放成功是一樣的道理。
如何知道衛星節目的詳細網址呢?以我們轉發70.5°E的「Trace TV」音樂頻道為例,具體方法如下:
首先進入DM500S接收機的WEB管理控制界面,選擇「Trace TV」頻道,點擊「VLC」,待下載完成後點擊播放,此時出現VLC Media Player軟體播放該頻道的界面。在菜單欄里,通過[查看]→[串流及媒體信息],選擇[一般]。
復制「URI」欄目內的網址(註:「URI」應該為「URL」,漢化錯誤),粘貼到[文件] →[打開文件] →[網路] →[網址]框內,再將[串流/保護]前選項框內打「√」,即可點擊「設置」按鈕。
進入[串流輸出]設置界面。
首先選擇[輸出]方式,這里選用MMSH協議,地址欄填寫轉發服務端的IP地址「192.168.1.2」。然後選擇[封裝方法],一般選用ASF,也可採用MP4、WAV封裝方法,不過只能採用MMSH協議輸出,如果採用HTTP協議輸出,則客戶端播放沒有畫面。
通過VLC串流轉碼。實際上就是VLC Media Player解碼DM500S的TS流,然後VLC Media Player又重新封裝打包並且傳回網路的過程,這個封裝方式可以在[轉碼選項]中自行變更。在[轉碼選項]中,選擇視頻編碼器、音頻編碼器的編碼格式時,應考慮客戶端有無相應的解碼包。一般視頻編碼器可選擇常用的WMV1、WMV2格式,音頻編碼器選用MP3格式。比特率的選擇應考慮網路帶寬及轉發伺服器的性能,在條件允許的情況下,選擇較大的比特率有利於畫質和音質的提高。選擇時注意,視頻編碼器中的「尺寸」是指播放畫面的大小;音頻編碼器中的「頻道」為漢化錯誤,應該為「聲道」,通常選擇「2」,表示雙聲道。
以上的設置完成後,按兩次「確定」後退出設置界面,此時VLC Media Player播放器底端會有計時器出現,說明軟體已開始進行串流發送。至於成功不成功,我們可以通過菜單欄[查看]→[串流及媒體信息]→[Statistics]來查看。
在下面的[串流]區域內,已有各項發送數據統計數字,表示轉發功能正常。注意:在轉發時,VLC Media Player軟體是沒有畫面顯示和聲音輸出的,因此其視頻和音頻區域的「已顯示的幀」和「已播放的緩沖器」的統計數字均為「0」。
2、客戶端播放
由於轉發服務端採用MMSH協議輸出,因此只要打開Windows Media Player播放軟體,通過[文件]→[打開URL],輸入mms://192.168.1.2:1234或,播放軟體經過片刻的連接和緩沖後,就可觀看節目了,界面的最下方為播放速率。注意:如果轉發服務端採用HTTP協議輸出,則客戶端只能輸入地址。
3、使用注意事項
採用該方案關鍵是轉發服務端設置,如果客戶端無法播放,首先應該檢查轉發伺服器有無串流輸出。對於客戶端只有伴音輸出而沒有畫面播出的,則應該檢查所選用的輸出協議是否正確,其次是所選的視頻編碼器在客戶端有無相應的解碼包。
對於廣播來講,它是一種同時向大量客戶傳輸數據的方法。在廣播時,是通過使用廣播發布點來實現的。在我們上面所介紹的兩種方案中,廣播發布點就是客戶端要輸入網址和埠號。使用廣播方案時,接收廣播的客戶端是不能切換頻道的,只能是播什麼看什麼。當服務端(DM500S)或轉發服務端(台式機)換機時,客戶端(筆記本電腦)軟體需要重新啟動播放功能。
H. 如何將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中。
轉載
I. vlc是開源的還有開源的播放器嗎
在github上搜索player就會有一堆