當前位置:首頁 » 操作系統 » libvlc源碼

libvlc源碼

發布時間: 2022-11-19 14:39:51

① 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/

② 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中。

linux的系統支持哪些影視和音樂播放器

音樂播放器十個:


1- Rhythmbox:
Rhythmbox是一個偉大的linux版本的音樂播放器. 它可以容易的幫你組織音樂內容,並且是免費的. 它的靈感來自於蘋果的iTunes,它使用GStreamer多媒體庫開發,在GNOME桌面環境中執行結果和效果者讓人感到驚艷.

2- GMPC (Gnome音樂播放器客戶端):GMPC 是一個很好的前端音樂播放器守護程序. 它快速並且易於使用,同時它還優於mpd的所有功能(mpd?).


3- XMMS (X多媒體系統):
XMMS (X多媒體系統) 是一個偉大的多媒體播放器,幾乎可以運行於所有的系統,但在linux下卻有一些特殊的地方. XMMS可以播放的多媒體文件有MP3, MOD, WAV 和其它的一些輸入插件. 它是一個運行在許多類UNIX系統上的有點類似Winamp但又小於它的免費音頻播放器.

4- Amarok:
Amarok 是linux和unix上另一個偉大的音樂播放器. Amarok的界面非常直觀. 它是免費的自由軟體. 現在, Amarok是linux上最受歡迎的音頻播放器.

5- Quod Libet
Quod Libet是一個使用GTK+界面庫開發的播放器, 它的主要功能特點是音樂庫管理. 不同於其它的以分類, 流派,藝術家和專輯方式管理, 代之是你可以搜索然後顯示它. Quod Libet 在大型音樂庫管理這一點上要遠勝於其它linux上的播放器.

6- Audacious:Audacious 是linux或其它基於linux系統上的免費播放器. 支持它自己的大部分是自己的一些功能插件,包括所有的解碼器. 大多數系統上,默認是安裝一個很有用的一個插件集, 讓你有能力播放mp3,ogg,和FLAC等格式文件.

7- Exaile:
Exaile 是一個免費的自由軟體,它可以運行於所以類unix操作系統中,它是目標是要小於KDE下的Amarok,所以它使用的是GTK+不是QT.

8- Banshee:?
Banshee一個在GNU/Linux上使用Helix和GStreamer多媒體平台庫來執行播放,編碼,和解碼Ogg,MP3和其它的格式的自由免費的音樂播放器.你可以播放和導入CD, 輕松的與你的ipod同步分享或播放它.? Banshee同樣也可將播放列表報告發布到last.fm的播放列表中.? 還有其它的一些很酷功能如:它可以提取CD,支持播客, 漂亮整潔的播放列表, 音樂推薦, 燒錄音頻,MP3,CD等等!

9- BMP (Beep Media Player)
BMP 也就是蜂鳴媒體播放器. BMP 一個基於xmms的免費音樂播放器(上述). 它看來很像Winamp,也支持它的外觀主題,包括xmms的. BMP 支持所以xmms能支持的格式, 主要差別在於兩個播放器之間使用的插件.

10- Sonata:
Sonata另一優雅的基於GTK + MPD前端音樂播放器(MPD:音樂播放器守護進程).


視頻播放器(也可以播放音頻)十個:

  1. VLC多媒體播放器
    VLC多媒體播放器(最初命名為VideoLAN客戶端)是VideoLAN計劃的多媒體播放器。它支持眾多音頻與視頻解碼器及檔案格式,並支持DVD、VCD的播放及各類串流協議。它亦能作為unicast和multicast的串流伺服器在IPv4以及IPv6的高速網路連線下使用。它融合了FFmpeg出品的解碼器與libdvdcss程序庫,這更使其增添了播放多媒體檔案及加密DVD影碟的功能。
    VLC多媒體播放器具有跨平台的持性,分別有Linux、Microsoft Windows、Mac OS X、BeOS、BSD、Pocket PC及Solaris等版本。


2.Mplayer
MPlayer是一款開源多媒體播放器,以GNU通用公共許可證發布。此款軟體可在各主流作業系統使用,例如Linux和其他類Unix系統、微軟的視窗系統及蘋果電腦的Mac OS X系統。MPlayer是建基於命令行界面,在各作業系統可選擇安裝不同的圖形界面。


3.Rhythmbox
Rhythmbox是一個偉大的linux版本的音樂播放器。它可以容易的幫你組織音樂內容,並且是免費的。它的靈感來自於蘋果的iTunes,它使用GStreamer多媒體庫開發,在GNOME桌面環境中執行結果和效果者讓人感到驚艷。


4.Audacious

Audacious是基於Beep-media-player和XMMS的播放器,由於BMP的開發者現在集中精力開發bmpx, BMP的開發已經停止, 不過Audacious的開發者繼承了BMP的源碼, 在BMP-0.9.7.1的基礎上fork了一個新的mediaplayer --- Audacious。Audacious和Beep- media-player很象,並且兼容它們的皮膚。而且它依賴的東西很少,就一個包。它的設置選項跟Beep-media-player基本一樣,但是比XMMS的簡單多了,只要設定了標題編碼 UTF-8 碼轉換,也沒有所謂的中文問題。
5.XMMS
XMMS(X多媒體系統) 是一個偉大的多媒體播放器,幾乎可以運行於所有的系統,但在linux下卻有一些特殊的地方。XMMS可以播放的多媒體文件有MP3,MOD,WAV和其它的一些輸入插件。它是一個運行在許多類UNIX系統上的有點類似Winamp但又小於它的免費音頻播放器。

6.Amarok
Amarok是一款在LINUX或其他類UNIX操作系統中運行的音頻播放器軟體。它是以自由軟體的形式推出。Amarok 在播放音樂檔案以外還提供了很多功能。例如Amarok可以根據音樂類型、歌手和專輯來管理音樂集,也可以為眾多的音樂格式加入標簽,加入歌詞、唱片封面,也會自動按所播放的音樂評分。也因此,第一次執行Amarok可以嚇退一些用戶。一些用家覺得Amarok的介面不易使用而使用較簡單的音樂播放軟體,因為很多功能會隱藏其他功能。大量的功能也招致消耗大量資源或是擁腫的批評。

7. Banshee

Banshee是Gnome官方的播放器,是一個功能非常全的音樂播放器,能夠支持各種格式文件。甚至能夠支持視頻文件的播放,Banshee也有MacOS和Windows版本,但是最穩定的版本,是運行在Linux上的版本,目前最新版本為2.4.0,是上個月發布的。這個版本現在深受很多Linux愛好者的喜好,可以說是Linux愛好者的接觸的最早的播放器。


8.Clementine

Clementine
Clementine是簡單跨平台的音樂播放軟體,界面設計源於KDE Amarok 1.4的多標簽設計。自然,軟體支持音樂庫播放列表的搜索管理,整合了Spotify,Grooveshark,Last.fm,SomaFM,Magnatune, Jamendo,SKY.fm,Digitally Imported和Icecast網路收音服務,支持 M3U,XSPF,PLS和ASX列表格式,支持CUE,MP3,FLAC,CD,AAC,OGG 格式互轉,支持歌詞、封面、樂手介紹等等等等,還能自動補全封面神馬的。總之就是常用的都有了,聽上去很強大。並且在之前發布了適用所有平台的1.0.1版本。
9.Tomahawk

Tomahawk
Tomahawk則是這三個當中名氣最小的,畢竟他僅僅才出現不到一年的時間,但是Tomahawk能夠代表音樂播放器的趨勢,旨在提供一個完全自由的互聯網協作的音樂平板,我用的版本就是最新版本0.4.2,覺得效果非常不錯(可能我喜歡支持弱者的緣故吧)!
10.SongBird
SongBird給我的第一印象是很「蘋果」,很iTune。它不但有linux版本,還有windows和Mac版本。

相對於其它音樂播放器,Songbird可以說是最不像音樂播放器的,它集成web瀏覽器,也就是說你可以在songbird里一邊上網一邊瀏覽網頁,當網頁中出現音樂時,你可以用songbird將其捕抓下來。

④ 如何獲得android armv-7版libvlc.so libvlccore.so,編譯vlc.tar.gz源碼包還是編譯vlc for android.tar.gz

一: 安裝android SDK, NDK, JDK三個工具,SDK是android系統用的,有些SDK還包含了eclipse,
NDK是用來編譯C/C++代碼的,這樣使得android應用程序可能通過java來調用c/c++程序、JDK不用說,是java運行必須的環境。
二: 根據第一步解壓的三個工具,配置這三個工具的環境變數(PATH),方法很多,可以修改~/.bashrc /etc/profile等等,這一步一定要正確,否則系統會找不到這三個工具,後面的編譯會用到這幾個工具,當然也就會出錯了,因為系統默認不知道這幾個程序的位置,這跟windows下的環境變數一個道理。為了驗證環境變數是否配置正確,可以到別的目錄下運行這幾個程序,比如到根目錄下看能否運行ndk-build adb等程序,或者echo $PATH列印一下當前的環境變數並驗證。

⑤ 如何在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

⑥ 如果我想在iOS中使用vlc,需要編譯什麼源代碼

你有兩種選擇:
選擇一:你可以編譯VLC(iOS)的源代碼。VLC(iOS)調用了libVLC。
選擇二:你也可以只編譯libVLC的源代碼。
如果你選擇編譯VLC(iOS),那麼請參考下面的網站:

⑦ easydarwin支持什麼格式

1 配置環境

1、系統:Windows 10
Easydarwin版本:官方最新版本
本配置為非web配置,在官方文檔中有提供web配置攻略
2、 安裝步驟

1
獲取最新版本
在Github 中下圖第一個鏈接獲取最新的EasyDarwin版本源碼,自行編譯成需要的可執行文件,也可以直接在下圖第二個鏈接中下載已經歸檔的相應版本進行部署;

2
編譯最新版本(可選)
【如果直接下載已編譯好的Release歸檔版本,可跳過此步驟】
Windows版本編譯,可以直接用Visual Studio 2010打開源碼文件中的:/EasyDarwin-master/EasyDarwin/WinNTSupport/EasyDarwin.sln解決方案文件,直接編譯出exe可執行文件EasyDarwin.exe;
注意:在編譯運行過程中會出現libEasyHLS.dll,libEasyPusher.dll,libEasyRTSPClient.dll,libEasyAACEncoder.dll不存在的問題,在這里只需要把下圖lib文件中的幾個.dll文件復制黏貼到WinNTSupport/Debug文件夾中即可,再重新編譯運行Easydarwin的項目即可。

3
此時此刻,在WinNTSupport/Debug文件夾下,就存在正確無誤的EasyDarwin.exe可執行文件。

4
移動Moives文件夾
把EasyDarwin-master\EasyDarwin\WinNTSupport文件夾下的Movies文件夾Copy一份到Debug文件夾下,其他可暫時不動。
注意:這里的Movies文件夾是Copy,不是在Debug下新建Movies文件夾,因為Movies文件夾內還有.xml的配置文件,如果是新建的文件夾,請記得把Movies下的.xml文件Copy到新的Movies文件夾下。

5
相關配置
所有的配置信息都存放在EasyDarwin-master\EasyDarwin\WinNTSupport\easydarwin.xml文件中,相關重要配置說明:
rtsp_port:EasyDarwin RTSP服務監聽的埠;
movie_folder:媒體文件存儲的路徑,包括點播文件、直播切片生成的hls文件;(注意在這里必須要求Movies文件夾是在Debug下的路徑)
local_ip_address:配置EasyRelayMole對外服務的ip地址,因為可能會有多網卡或者內網映射,所以需要手動配置;
RTSP_debug_printfs:將easydarwin.xml中輸出列印配置為true,這樣就能在調試模式中看是否有報文發來,也可以在easydarwin.xml中配置log輸出的目錄和文件名稱,再根據log確定問題(具體個性化log,需要自己添加代碼,編譯部署);
6
啟動Easydarwin服務
Windows版本運行(控制台調試運行):win+R-》調出運行-》命令提示符-》找到Easydarwin.exe文件路徑,輸入以下指令:
EasyDarwin.exe -c ./easydarwin.xml -d
出現如下結果,表示伺服器已經成功開啟。

7
說明,官方文檔中給出了製作.bat快捷運行的方法。具體如下:
將這段腳本做成bat。
製作方法如下:
首先在EasyDarwin-master\EasyDarwin\WinNTSupport\Debug文件下創建一個Startup.bat.txt(名字隨便取)的文本文件,然後把上面的腳本指令Copy進到文本中,保存後重命名Startup.bat,之後單擊.bat文件即可運行伺服器。

8
注意:筆者在使用這個方法的過程中,在自己win 10 機上沒有成功,筆者使用的腳本指令是

END
3 測試流媒體伺服器

1
首先,在網上下載一個MP4視頻文件,之後放置到EasyDarwin-master\EasyDarwin\WinNTSupport\Debug\Movies\路徑下。之後使用6中的說明開啟伺服器,在之後就可以使用相關播放器進行播放啦。
END
4 EasyDarwin視頻支持格式說明

1
說明:EasyDarwin 支持MPEG-1、MPEG-2、MPEG-4、H.264、VC-1等多種標准編碼格式的眾多主流媒體格式及avi、asf、 wmv、mp4、mov、rm、rmvb、flv、3GP等等全格式的文件Container容器,更加詳細的請參考官方文檔說明。
END
5 播放器推薦

1
推薦使用的播放器有:ffplay,vlc等開源播放器進行測試,重點推薦VLC播放器,使用非常簡單。
END
6 可能會遇到的問題

1
在測試過程中要關注播放器和控制台兩方,播放器不播放控制台無消息,表示沒有連接上伺服器,查看自己的url是否正確;播放器不播放控制台有消息,可細細查看錯誤所在。
2
首次使用推薦使用mp4格式視頻,如在使用中出現415 Unsupported Media Type問題,可以用以下辦法解決。
MP4點播返回415錯誤(Requested movie hasn't been hinted)EasyDarwin點播要求mp4文件需要先經過RTSP/RTP HINT處理,具體方法(用mp4box GUI、MediaCoder等工具):

⑧ centos 7 怎麼安裝mp3解碼以及怎麼安裝vlc

CentOS 7音樂播放器主要為Rhythmbox
可以在網站上搜索下載:gst-fluendo-mp3-0.10.32.tar.gz這個文件,如果有更新版本的可以用更新版本。具體自己找,網路不讓我發地址。
下載後解壓,進入目錄按照源代碼的編譯方式進行安裝:
$ ./configure
$ make
$ sudo make install
安裝完畢後,搜索「gstream」,安裝好後的插件名字叫:「libgstflump3dec.so」
,大致上位於:「/usr/local/lib/gstreamer-1.0/」下(對於CentOS7.0而言),需要手動將此文件復制到系統原來自帶的GStreamer部分插件的位置,也就是/usr/lib64/gstreamer-1.0(對於CentOS7.0而言),可以執行以下的復制命令:
$ sudo cp /usr/local/lib/gstreamer-1.0/libgstflump3dec.so/usr/lib64/gstreamer-1.0
完畢後Rhythmbox就可以調用mp3插件而播放MP3文件了。
另外對於VLC,不建議在centos7.0里安裝,需要的依賴包太多,很麻煩,不如安裝mplayer相對簡單一些。
還有,音樂播放器與其用Rhythmbox,你就不如去下一個deadbeef,解壓開後就可以運行。支持很多的音頻格式,音質還可以,一般的音響是聽不出來的。

⑨ 在編譯vc6.0時出現錯誤'p_media_player' : undeclared identifier

首先可以看到,在這個按鈕2響應函數中,並沒有定義p_media_player,如果要讓編譯器識別,那麼p_media_player必須在指定作用域生效。

MFC模式下,p_media_player應該是CMFCVLCDlg對話框類成員變數,你檢查一下,是不是前面使用p_media_player是臨時聲明的,而不是類成員,或者是其它類成員變數。

⑩ vlc-android要怎麼用

一.認識android的架構
Android其本質就是在標準的Linux系統上增加了Java虛擬機Dalvik,並在Dalvik虛擬機上搭建了一個JAVA的application framework,所有的應用程序都是基於JAVA的application framework之上。
android分為四個層,從高層到低層分別是應用程序層、應用程序框架層、系統運行庫層和linux核心層。

二.搭建環境
搭建開發環境
對國內的開發者來說最痛苦的是無法去訪問android開發網站。為了更好的認識世界,對程序員來說,會翻牆也是的一門技術,帶你去領略牆外的世界,好了,不廢話了, 國內開發者訪問(androiddevtools) 上面已經有了所有你要的資源,同時可以下載到我們的主角framework

但是這樣的搭建只能去閱讀源代碼,我們無法去更進一步去實現自己的rom,我們看到錘子的系統在早期的開放rom是自己從新實現了framework的代碼,現在看起來他成功了,所以我們還要去搭建android系統的源碼編譯環境。

搭建源碼編譯環境
http://www.cnblogs.com/bluestorm/p/4419135.html
https://source.android.com/source/downloading.html(這里詳細的介紹了如何下載編譯)
三.開始主題

在一開始寫c程序的時候都有一個運行的入口,比如
#include <iostream>
#include <cmath>
#include <algorithm>
using namespace std;

//這里的main就是應用的入口
int main(int argc, const char * argv[]){
return 0;
}

在計算機網路原理中我們用socket實現一個伺服器端,不斷的接聽客戶端的訪問,而且他的代碼是這樣實現的:
#include <winsock2.h>
#pragma comment(lib, "WS2_32.lib")

#include <stdio.h>
void main()
{
WORD wVersionRequested;//版本號
WSADATA wsaData;
int err;

wVersionRequested = MAKEWORD(2, 2);//2.2版本的套接字
//載入套接字型檔,如果失敗返回
err = WSAStartup(wVersionRequested, &wsaData);
if (err != 0)
{
return;
}

//判斷高低位元組是不是2,如果不是2.2的版本則退出
if (LOBYTE(wsaData.wVersion) != 2 ||

HIBYTE(wsaData.wVersion) != 2)

{
return;
}

//創建流式套接字,基於TCP(SOCK_STREAM)

SOCKET socSrv = socket(AF_INET, SOCK_STREAM, 0);

//Socket地址結構體的創建

SOCKADDR_IN addrSrv;

addrSrv.sin_addr.S_un.S_addr = htonl(INADDR_ANY);//轉換Unsigned long型為網路位元組序格
addrSrv.sin_family = AF_INET;//指定地址簇
addrSrv.sin_port = htons(6000);
//指定埠號,除sin_family參數外,其它參數都是網路位元組序,因此需要轉換

//將套接字綁定到一個埠號和本地地址上
bind(socSrv, (SOCKADDR*)&addrSrv, sizeof(SOCKADDR));//必須用sizeof,strlen不行

listen(socSrv, 5);

SOCKADDR_IN addrClient;//字義用來接收客戶端Socket的結構體

int len = sizeof(SOCKADDR);//初始化參數,這個參數必須進行初始化,sizeof

//循環等待接受客戶端發送請求

while (1)
{
//等待客戶請求到來;當請求到來後,接受連接請求,

//返回一個新的對應於此次連接的套接字(accept)。
//此時程序在此發生阻塞

SOCKET sockConn = accept(socSrv, (SOCKADDR*)&addrClient, &len);

char sendBuf[100];

sprintf(sendBuf, "Welcome %s to JoyChou",

inet_ntoa(addrClient.sin_addr));//格式化輸出

//用返回的套接字和客戶端進行通信

send(sockConn, sendBuf, strlen(sendBuf)+1, 0);//多發送一個位元組

//接收數據

char recvBuf[100];

recv(sockConn, recvBuf, 100, 0);

printf("%s\\n", recvBuf);
closesocket(sockConn);

}
}

他採用了一個while死循環去監聽客戶端的請求。
在一遍啰嗦之後,主角終於閃亮的登場了。

先上源代碼
public final class ActivityThread {

public static void main(String[] args) {
SamplingProfilerIntegration.start();

CloseGuard.setEnabled(false);

Environment.initForCurrentUser();

EventLogger.setReporter(new EventLoggingReporter());

Security.addProvider(new AndroidKeyStoreProvider());

final File configDir = Environment.getUserConfigDirectory(UserHandle.myUserId());
TrustedCertificateStore.setDefaultUserDirectory(configDir);

Process.setArgV0("<pre-initialized>");

Looper.prepareMainLooper();

//從中可以看到為app開辟了一個線程進入了looper之中

ActivityThread thread = new ActivityThread();
thread.attach(false);

if (sMainThreadHandler == null) {
sMainThreadHandler = thread.getHandler();
}

AsyncTask.init();

if (false) {
Looper.myLooper().setMessageLogging(new
LogPrinter(Log.DEBUG, "ActivityThread"));
}

Looper.loop();

throw new RuntimeException("Main thread loop unexpectedly exited");
}

}

看到源碼失望了,沒有一個while循環啊,其實用了他方法實現
//用一個looper的機制循環監聽響應
Looper.prepareMainLooper();

Looper.loop();

進一步深入代碼
public static void loop() {
final Looper me = myLooper();
if (me == null) {
throw new RuntimeException("No Looper; Looper.prepare() wasn't called on this thread.");
}
final MessageQueue queue = me.mQueue;

Binder.clearCallingIdentity();
final long ident = Binder.clearCallingIdentity();

// 在這里看到了一個循環監聽消息

for (;;) {
Message msg = queue.next(); // might block
if (msg == null) {
// No message indicates that the message queue is quitting.
return;
}

Printer logging = me.mLogging;
if (logging != null) {
logging.println(">>>>> Dispatching to " + msg.target + " " +
msg.callback + ": " + msg.what);
}

msg.target.dispatchMessage(msg);

if (logging != null) {
logging.println("<<<<< Finished to " + msg.target + " " + msg.callback);
}

// Make sure that ring the course of dispatching the
// identity of the thread wasn't corrupted.
final long newIdent = Binder.clearCallingIdentity();
if (ident != newIdent) {
Log.wtf(TAG, "Thread identity changed from 0x"
+ Long.toHexString(ident) + " to 0x"
+ Long.toHexString(newIdent) + " while dispatching to "
+ msg.target.getClass().getName() + " "
+ msg.callback + " what=" + msg.what);
}

msg.recycleUnchecked();
}
}

熱點內容
內置存儲卡可以拆嗎 發布:2025-05-18 04:16:35 瀏覽:333
編譯原理課時設置 發布:2025-05-18 04:13:28 瀏覽:374
linux中進入ip地址伺服器 發布:2025-05-18 04:11:21 瀏覽:609
java用什麼軟體寫 發布:2025-05-18 03:56:19 瀏覽:30
linux配置vim編譯c 發布:2025-05-18 03:55:07 瀏覽:105
砸百鬼腳本 發布:2025-05-18 03:53:34 瀏覽:940
安卓手機如何拍視頻和蘋果一樣 發布:2025-05-18 03:40:47 瀏覽:736
為什麼安卓手機連不上蘋果7熱點 發布:2025-05-18 03:40:13 瀏覽:800
網卡訪問 發布:2025-05-18 03:35:04 瀏覽:507
接收和發送伺服器地址 發布:2025-05-18 03:33:48 瀏覽:369