当前位置:首页 » 操作系统 » 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 浏览:377
linux中进入ip地址服务器 发布:2025-05-18 04:11:21 浏览:611
java用什么软件写 发布:2025-05-18 03:56:19 浏览:31
linux配置vim编译c 发布:2025-05-18 03:55:07 浏览:107
砸百鬼脚本 发布:2025-05-18 03:53:34 浏览:942
安卓手机如何拍视频和苹果一样 发布:2025-05-18 03:40:47 浏览:739
为什么安卓手机连不上苹果7热点 发布:2025-05-18 03:40:13 浏览:802
网卡访问 发布:2025-05-18 03:35:04 浏览:510
接收和发送服务器地址 发布:2025-05-18 03:33:48 浏览:371