Vlc for Android 全面阐述

简介Vlc for android是一款开源安卓播放器,具备播放多媒体文件、光盘、设备以及网络流媒体协议等功能,,支持ARMv7 CPU或一个x86 CPU的设备,所有播放控制特性都已经开发完整。

下面将介绍如何获取代码、编译、vlc原理、缩小延迟、添加截图和录制视频、多路播放等。

详解1、获取代码

官网源码下载:

git获取:clone from git://git.videolan.org/vlc-ports/android.git

补丁:https://patches.videolan.org/

2、编译

1、搭配环境AndroidSDK:adt-bundle-linux-x86-20130522JDK:jdk-7u25-linux-i586NDK:android-ndk-r8e-linux-x86

2、安装工具apt-get install gccapt-get install g++apt-get build-dep vlcapt-get install gitapt-get install wgetapt-get install autoconfapt-get install libtoolapt-get install subversionapt-get install cmakeapt-get install ant

3、配置信息

export ANDROID_NDK=/home/mythou/android-dev/android-ndk-r8eexport NDKR5C=/home/mythou/ndkr5cexport NDKR6B=/home/mythou/ndkr6bPATH=$PATH:$NDKR6B:$ANDROID_NDKexport ANDROID_ABI=armeabi-v7aexport JAVA_HOME=/home/mythou/android-dev/jdk/jdk1.7.0_25export JRE_HOME=/home/mythou/android-dev/jdk/jdk1.7.0_25/jreexport CLASSPATH=.:$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/libexport ANT_HOME=/home/mythou/android-dev/apache-ant-1.8.0export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH:$HOME/bin:$ANT_HOMEexport ANDROID_SDK=/home/mythou/android-dev/adt-bundle-linux-x86-20130522/sdkPATH=$PATH:$ANDROID_SDK/tools:$ANDROID_SDK/platform-tools

4、编译

sh compile.sh or sh compile.sh release

5、辅助库

由于某些原因,有些库无法获得,请手动下载放入便可。

3、vlc播放原理

视频播放的基本步骤: 1、acess 访问(获取视频数据) 2、demux 解复用(音频、视频分离) 3、decode 解码(音频和视频的解码) 4、output 输出(音频和视频的输出(aout和vout)如图:

4、缩小延迟

修改延迟的方法有两种:1、直接用Java代码实现;2、在vlc库中修改。

涉及延迟的参数有:file-caching(文件缓存)、live-caching(直播缓存)、network-caching(网络缓存)、sout-mux-caching(输出缓存)。

Java代码实现如下:

options.add(":file-caching=1500");//文件缓存options.add(":network-caching=1500");//网络缓存options.add(":live-caching=1500");//直播缓存options.add(":sout-mux-caching=1500");//输出缓存options.add(":codec=mediacodec,iomx,all");vlc库实现如下:

查找目标文件vlc/src/libvlc-module.c 修改对应的参数

add_integer( "file-caching", DEFAULT_PTS_DELAY / 3000,CACHING_TEXT, CACHING_LONGTEXT, true )add_integer( "live-caching", DEFAULT_PTS_DELAY / 3000,CAPTURE_CACHING_TEXT, CAPTURE_CACHING_LONGTEXT, true )add_integer( "network-caching", CLOCK_FREQ / 3000,NETWORK_CACHING_TEXT, NETWORK_CACHING_LONGTEXT, true )add_integer( "sout-mux-caching", 1000, SOUT_MUX_CACHING_TEXT,SOUT_MUX_CACHING_LONGTEXT, true )

FFMPEGCONF += –disable-encoders –disable-muxers 改成FFMPEGCONF += –disable-encoders –enable-encoder=png –disable-muxers源码重新编译便可

编译过程中可能会出现如下问题:

./vlc/android/modules/.libs/libvorbis_plugin.a(libvorbis_plugin_la-vorbis.o): in function OpenEncoder:../../modules/codec/vorbis.c:758: error: undefined reference to ‘vorbis_encode_setup_vbr‘解决方法:修改文件vlc-android/jni/Android.mk LOCAL_LDLIBS := -L$(VLC_CONTRIB)/lib \$(VLC_MODULES) \$(VLC_BUILD_DIR)/lib/.libs/libvlc.a \$(VLC_BUILD_DIR)/src/.libs/libvlccore.a \$(VLC_BUILD_DIR)/compat/.libs/libcompat.a \-ldl -lz -lm -llog \-ldvbpsi -lebml -lmatroska -ltag \-logg -lFLAC -ltheora -lvorbis -lvorbisfile -lvorbisenc \-lmpeg2 -la52 \-lavformat -lavcodec -lswscale -lavutil -lpostproc -lgsm -lopenjpeg \-lliveMedia -lUsageEnvironment -lBasicUsageEnvironment -lgroupsock \-lspeex -lspeexdsp \-lxml2 -lpng -lgnutls -lgcrypt -lgpg-error \-lnettle -lhogweed -lgmp \-lfreetype -liconv -lass -lfribidi -lopus \-lEGL -lGLESv2 -ljpeg \$(CPP_STATIC) 在-logg -lFLAC -ltheora -lvorbis 后添加-lvorbisfile -lvorbisenc error: undefined reference to ‘vlc_entry__access_output_udp’解决方法:修改文件:/vlc/modules/access_output/Modules.amSOURCES_access_output_dummy = dummy.cSOURCES_access_output_file = file.cSOURCES_access_output_udp = udp.cSOURCES_access_output_http = http.c bonjour.c bonjour.hSOURCES_access_output_shout = shout.caccess_output_LTLIBRARIES += \libaccess_output_dummy_plugin.la \libaccess_output_file_plugin.la \libaccess_output_udp_plugin.la \libaccess_output_http_plugin.la#libaccess_output_udp_plugin_la_SOURCES = udp.c#libaccess_output_udp_plugin_la_LIBADD = $(SOCKET_LIBS) $(LIBPTHREAD)#access_output_LTLIBRARIES += libaccess_output_udp_plugin.lalibaccess_output_livehttp_plugin_la_SOURCES = livehttp.clibaccess_output_livehttp_plugin_la_CFLAGS = $(AM_CFLAGS) $(GCRYPT_CFLAGS)libaccess_output_livehttp_plugin_la_LIBADD = $(GCRYPT_LIBS) -lgpg-errorif HAVE_GCRYPTaccess_output_LTLIBRARIES += libaccess_output_livehttp_plugin.laendif 内容覆盖便可

相关源码添加:

每一发奋努力的背后,必有加倍的赏赐。

Vlc for Android 全面阐述

相关文章:

你感兴趣的文章:

标签云: