多媒体框架移植android_如何移植android移植到开发板 - CSDN
  • 基于移动平台的多媒体框架——移植播放器到Android上 今天很成功地将我们自己开发的基于ffmpeg播放器移植到了Android上,并且在tablet上面测试成功。按照本文提供的思路,可以移植所有基于ffmpeg的播放器到...
    
    

    基于移动平台的多媒体框架——移植播放器到Android上


    今天很成功地将我们自己开发的基于ffmpeg播放器移植到了Android上,并且在tablet上面测试成功。按照本文提供的思路,可以移植所有基于ffmpeg的播放器到Android上。


    准备工作:

    需要的两个库,ffmpeg和SDL,其编译方法在前文中都有叙述。

    在开发时,需要把这两个编译好的库文件:libffmpeg.so和libSDL.so放入<ndk-path>/platforms/android-8/arch-arm/usr/lib/下面;在调试和运行时,需要用adb push到Android的/system/lib/下面。

    (本文所述的项目版本有所出入,并且很长时间没有维护过。再次强烈推荐各位只是当作参考,领略大意。建议用vlc官方的android版本进行尝试,与本文思想相同,却可以省掉很多不必要的麻烦。)

    本文示例的播放器下载地址是https://github.com/pkuembedded/TVplayer。这个播放器是我们实验室自己开发的,目前尚不完善在不断更新中,但是基本的播放功能都有了。读者可以根据自己的兴趣按照本文思路移植其他功能强大的开源播放器,包括自己开发的播放器。


    第一步:eclipse中新建一个Android工程。

    为了与PC Linux版的TVplayer区分,该工程名为TVplayer_Android。包名为com.player,类名为TVplayer。

    新建工程时,要选择和编译ffmpeg和SDL一致的Android的版本以及ndk、sdk版本。

    第二步:将待移植的播放器导入该工程。

    在TVplayer_Android目录下新建jni/src.将TVplayer下的src中所有c文件与h文件复制到TVplayer_Android/jni/src中,以准备用NDK编译。
    新建TVplayer_Android/jni/Android.mk。内容为:

    LOCAL_PATH := $(call my-dir)/src
    
    
    include $(CLEAR_VARS)
    
    
    LOCAL_MODULE    := TVplayer
    LOCAL_SRC_FILES := \
    audio.c \
    display.c \
    file.c \
    queue.c \
    sync.c \
    TVplayer.c \
    video.c
    
    
    LOCAL_C_INCLUDES += /home/baby/workspace/SDL-1.3.0-6050/include/
    LOCAL_C_INCLUDES += /home/baby/workspace/avs/ffmpeg-0.8.7/
    
    
    LOCAL_LDLIBS += -L$(SYSROOT)/usr/lib -lffmpeg -lSDL -llog
    
    
    include $(BUILD_SHARED_LIBRARY)
    其中:
    LOCAL_SRC_FILES开头的一行后面加入需要编译的源文件。
    LOCAL_C_INCLUDES开头的两行用来包含c库的头文件,将你的ffmpeg和SDL的头文件目录加在此处。
    LOCAL_LDLIBS开头的一行中,加-llog便于调试。

    第三步:实现java类。

    为了让Android支持SDL,需要SDL源文件中的SDLActivity.java文件。将SDLActivity.java复制到与我们自己的TVplayer.java同级目录。
    修改TVplayer.java为:

    public class TVplayer extends SDLActivity {
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
        }
    }
    
    这里采用的方法是用自己的类继承SDLActivity类,在onCreate方法中调用父类方法。简单起见也可以直接把SDLActivity类改名为TVplayer,为了以后方面添加其他类而不至于太臃肿,没有采用这种方法。SDLActivity.java要稍作修改:将原来的System.loadLibrary函数全部注释,然后在原位置添加一句System.loadLibrary("TVplayer");结果如下:
    static {
        //System.loadLibrary("SDL");
        //System.loadLibrary("SDL_image");
        //System.loadLibrary("SDL_mixer");
        //System.loadLibrary("SDL_ttf");
        //System.loadLibrary("main");
        System.loadLibrary("TVplayer");
    }
    

    第四步:修改c文件。

    TVplayer_Android/jni/src/TVplayer.c文件也要修改:
    实现java中的native函数,如下:
    void Java_com_player_SDLActivity_nativeInit(JNIEnv* env, jclass cls, jobject obj){
        /* This interface could expand with ABI negotiation, calbacks, etc. */
        SDL_Android_Init(env, cls);
    
        /* Run the application code! */
        int status;
        char *argv[2];
        argv[0] = strdup("SDL_app");
        argv[1] = NULL;
        //status = main(1, argv);
        status = main(2, argv);
        /* We exit here for consistency with other platforms. */
        exit(status);
    
    //  Java_org_libsdl_app_SDLActivity_nativeInit(env, cls, obj);
    }
    
    void Java_com_player_SDLActivity_nativeQuit(JNIEnv* env, jclass cls, jobject obj){
        Java_org_libsdl_app_SDLActivity_nativeQuit(env, cls, obj);
    }
    
    void Java_com_player_SDLActivity_onNativeResize(JNIEnv* env, jclass cls, jobject obj, int x, int y, int format){
        Java_org_libsdl_app_SDLActivity_onNativeResize(env, cls, obj, x, y, format);
    }
    void Java_com_player_SDLActivity_onNativeAccel(JNIEnv* env, jclass cls, jobject obj, float x, float y, float z){
        Java_org_libsdl_app_SDLActivity_onNativeAccel(env, cls, obj, x, y, z);
    }
    

    实现方法其实就是调用SDL原来的实现方法。如果你运行过上一篇的移植SDL的例子,了解整个流程,就可以在SDL中找到这些相应的函数。

    添加完这些函数之后,java就会调用SDL为Android设计的初始化方法,就可以把原来main函数中调用的SDL_Init函数删去了。

    第五步:编译运行:

    首先在工程目录下ndk-build,生成libTVplayer.so。
    然后在eclipse中编译运行。















    展开全文
  • 基于移动平台的多媒体框架——移植Live555到Android上 live555是一个处理流媒体传输对c++库,再Mplayer与vlc中都有用到。我们计划将其加入到自己编写对Android上的播放器中作为流媒体模块,首先就需要将这个...

    基于移动平台的多媒体框架——移植Live555到Android上



    live555是一个处理流媒体传输对c++库,再Mplayer与vlc中都有用到。我们计划将其加入到自己编写对Android上的播放器中作为流媒体模块,首先就需要将这个库移植到Android上。

    1. 首先在官网下载live555对源码并解压。
    2. 新建一个Android工程,将源码文件放到一个该工程的jni目录下,如:jni/live。
    3. 新建jni/Android.mk文件作为Makefile。将需要编译对源文件加入到LOCAL_SRC_FILES变量,将需要引用对头文件加入到LOCAL_C_INCLUDES,编译过程中会提示需要参数:-fexceptions,于是加入参数LOCAL_CPPFLAGS += -fexceptions。

    内容如下:

    4. 新建jni/Application.mk文件。由于live555需要引用stl,所以加入:
    APP_STL := gnustl_shared

    5. 运行ndk-build就可以得到live555.so文件啦。


    后记:

    至今为止,我们已经向Android上移植了三个c/c++的库了(ffmpeg、sdl、live555)。如果有按着步骤一步步的做过,相信大家已经很熟悉如何向Android上移植一个c/c++库里。举一反三,融会贯通,相信以后遇到一个新的c/c++工程,你也会觉得轻而易举手到擒来啦!


    补充:

    本来打算把自己移植好的src发给在回复中留言的几位朋友的,但查了一下发现硬盘坑爹地被我格过几次,东西早就没有了。鉴于这个工作不那么复杂,我索性再做一遍,顺便把移植的过程写的详细点,便于他人参考。

    1. 下载了最新的live555源码,日期是12/04/04,用的ndk版本是r7b。

    2.预备工作,先用标准的方法make一下,确定你的源码是可以编译过的。

    ./genMakefiles linux
    make
    马上就看到成功的结果了,这时不要急得移植。移植是交叉编译了,咱们先不用交叉编译,用gcc编译看看会不会。

    了解live555的基本结构之后就可以执行:

    g++ BasicUsageEnvironment/*.cpp liveMedia/*.cpp mediaServer/*.cpp UsageEnvironment/*.cpp ./groupsock/*cpp -IBasicUsageEnvironment/include -IliveMedia/include -IBasicUsageEnvironment/include -Igroupsock/include/ -IUsageEnvironment/include -DSOCKLEN_T=socklen_t -shared -o live555.so
    这样在本地就生成一个so了。

    3. 跟本地一样,如果你了解了ndk的用法,写个简单的mk文件就可以移植了。建工程什么的在上面说了,我就把mk文件贴出来给大家参考一下好了。为了省事,我就建了一个Android.mk文件。写的过程就是碰到什么问题,就改改加加什么参数。(这次连Application.mk都没有加就过了。。。)

    LOCAL_PATH := $(call my-dir)
    
    include $(CLEAR_VARS)
    
    LOCAL_MODULE := live555
    
    LOCAL_SRC_FILES :=\
    ./live/groupsock/GroupEId.cpp \
    ./live/groupsock/IOHandlers.cpp \
    ./live/groupsock/NetInterface.cpp \
    ./live/groupsock/NetAddress.cpp \
    ./live/groupsock/GroupsockHelper.cpp \
    ./live/groupsock/Groupsock.cpp \
    ./live/groupsock/inet.c \
    ./live/BasicUsageEnvironment/DelayQueue.cpp \
    ./live/BasicUsageEnvironment/BasicHashTable.cpp \
    ./live/BasicUsageEnvironment/BasicUsageEnvironment.cpp \
    ./live/BasicUsageEnvironment/BasicUsageEnvironment0.cpp \
    ./live/BasicUsageEnvironment/BasicTaskScheduler.cpp \
    ./live/BasicUsageEnvironment/BasicTaskScheduler0.cpp \
    ./live/UsageEnvironment/HashTable.cpp \
    ./live/UsageEnvironment/strDup.cpp \
    ./live/UsageEnvironment/UsageEnvironment.cpp \
    ./live/liveMedia/MP3Internals.cpp \
    ./live/liveMedia/StreamReplicator.cpp \
    ./live/liveMedia/MPEG4GenericRTPSource.cpp \
    ./live/liveMedia/BitVector.cpp \
    ./live/liveMedia/MatroskaFileParser.cpp \
    ./live/liveMedia/ADTSAudioFileServerMediaSubsession.cpp \
    ./live/liveMedia/H264VideoRTPSink.cpp \
    ./live/liveMedia/MP3StreamState.cpp \
    ./live/liveMedia/RTSPServerSupportingHTTPStreaming.cpp \
    ./live/liveMedia/MP3AudioMatroskaFileServerMediaSubsession.cpp \
    ./live/liveMedia/InputFile.cpp \
    ./live/liveMedia/MPEGVideoStreamParser.cpp \
    ./live/liveMedia/AMRAudioFileSource.cpp \
    ./live/liveMedia/Locale.cpp \
    ./live/liveMedia/T140TextRTPSink.cpp \
    ./live/liveMedia/MediaSink.cpp \
    ./live/liveMedia/QuickTimeFileSink.cpp \
    ./live/liveMedia/RTPSink.cpp \
    ./live/liveMedia/VorbisAudioRTPSink.cpp \
    ./live/liveMedia/AMRAudioFileSink.cpp \
    ./live/liveMedia/MP3ADUTranscoder.cpp \
    ./live/liveMedia/VorbisAudioMatroskaFileServerMediaSubsession.cpp \
    ./live/liveMedia/H264VideoFileServerMediaSubsession.cpp \
    ./live/liveMedia/H263plusVideoRTPSource.cpp \
    ./live/liveMedia/RTSPClient.cpp \
    ./live/liveMedia/DVVideoRTPSource.cpp \
    ./live/liveMedia/H264VideoStreamFramer.cpp \
    ./live/liveMedia/DVVideoStreamFramer.cpp \
    ./live/liveMedia/MultiFramedRTPSink.cpp \
    ./live/liveMedia/BasicUDPSink.cpp \
    ./live/liveMedia/Base64.cpp \
    ./live/liveMedia/H261VideoRTPSource.cpp \
    ./live/liveMedia/MP3InternalsHuffman.cpp \
    ./live/liveMedia/MPEG2TransportStreamMultiplexor.cpp \
    ./live/liveMedia/MP3AudioFileServerMediaSubsession.cpp \
    ./live/liveMedia/MPEG1or2AudioRTPSource.cpp \
    ./live/liveMedia/H263plusVideoFileServerMediaSubsession.cpp \
    ./live/liveMedia/MP3Transcoder.cpp \
    ./live/liveMedia/H263plusVideoStreamParser.cpp \
    ./live/liveMedia/AudioInputDevice.cpp \
    ./live/liveMedia/MP3FileSource.cpp \
    ./live/liveMedia/MPEG4LATMAudioRTPSource.cpp \
    ./live/liveMedia/MPEG2TransportStreamFromPESSource.cpp \
    ./live/liveMedia/AACAudioMatroskaFileServerMediaSubsession.cpp \
    ./live/liveMedia/WAVAudioFileServerMediaSubsession.cpp \
    ./live/liveMedia/MP3ADURTPSource.cpp \
    ./live/liveMedia/FileSink.cpp \
    ./live/liveMedia/MPEG1or2DemuxedServerMediaSubsession.cpp \
    ./live/liveMedia/MP3InternalsHuffmanTable.cpp \
    ./live/liveMedia/TCPStreamSink.cpp \
    ./live/liveMedia/MediaSource.cpp \
    ./live/liveMedia/MPEG2TransportStreamFramer.cpp \
    ./live/liveMedia/JPEGVideoRTPSink.cpp \
    ./live/liveMedia/JPEGVideoSource.cpp \
    ./live/liveMedia/AC3AudioFileServerMediaSubsession.cpp \
    ./live/liveMedia/AMRAudioRTPSink.cpp \
    ./live/liveMedia/MPEG4VideoFileServerMediaSubsession.cpp \
    ./live/liveMedia/AMRAudioFileServerMediaSubsession.cpp \
    ./live/liveMedia/H264VideoMatroskaFileServerMediaSubsession.cpp \
    ./live/liveMedia/MPEG2IndexFromTransportStream.cpp \
    ./live/liveMedia/MPEG1or2FileServerDemux.cpp \
    ./live/liveMedia/GSMAudioRTPSink.cpp \
    ./live/liveMedia/MPEG1or2VideoStreamFramer.cpp \
    ./live/liveMedia/AMRAudioRTPSource.cpp \
    ./live/liveMedia/EBMLNumber.cpp \
    ./live/liveMedia/MP3ADUinterleaving.cpp \
    ./live/liveMedia/SimpleRTPSink.cpp \
    ./live/liveMedia/MPEG1or2VideoRTPSink.cpp \
    ./live/liveMedia/MPEG2TransportStreamTrickModeFilter.cpp \
    ./live/liveMedia/AC3AudioRTPSource.cpp \
    ./live/liveMedia/MultiFramedRTPSource.cpp \
    ./live/liveMedia/ServerMediaSession.cpp \
    ./live/liveMedia/JPEGVideoRTPSource.cpp \
    ./live/liveMedia/MP3ADU.cpp \
    ./live/liveMedia/FileServerMediaSubsession.cpp \
    ./live/liveMedia/DVVideoFileServerMediaSubsession.cpp \
    ./live/liveMedia/DarwinInjector.cpp \
    ./live/liveMedia/OnDemandServerMediaSubsession.cpp \
    ./live/liveMedia/H263plusVideoRTPSink.cpp \
    ./live/liveMedia/TextRTPSink.cpp \
    ./live/liveMedia/MPEG1or2VideoStreamDiscreteFramer.cpp \
    ./live/liveMedia/MediaSession.cpp \
    ./live/liveMedia/AC3AudioStreamFramer.cpp \
    ./live/liveMedia/QuickTimeGenericRTPSource.cpp \
    ./live/liveMedia/SimpleRTPSource.cpp \
    ./live/liveMedia/FramedFileSource.cpp \
    ./live/liveMedia/T140TextMatroskaFileServerMediaSubsession.cpp \
    ./live/liveMedia/PassiveServerMediaSubsession.cpp \
    ./live/liveMedia/ByteStreamMemoryBufferSource.cpp \
    ./live/liveMedia/RTCP.cpp \
    ./live/liveMedia/MP3ADURTPSink.cpp \
    ./live/liveMedia/ADTSAudioFileSource.cpp \
    ./live/liveMedia/MPEG1or2VideoRTPSource.cpp \
    ./live/liveMedia/MPEG1or2VideoFileServerMediaSubsession.cpp \
    ./live/liveMedia/MPEG4ESVideoRTPSink.cpp \
    ./live/liveMedia/RTPSource.cpp \
    ./live/liveMedia/H264VideoStreamDiscreteFramer.cpp \
    ./live/liveMedia/AVIFileSink.cpp \
    ./live/liveMedia/StreamParser.cpp \
    ./live/liveMedia/MPEG2TransportStreamFromESSource.cpp \
    ./live/liveMedia/VP8VideoRTPSink.cpp \
    ./live/liveMedia/FramedFilter.cpp \
    ./live/liveMedia/VideoRTPSink.cpp \
    ./live/liveMedia/MPEG4VideoStreamDiscreteFramer.cpp \
    ./live/liveMedia/QCELPAudioRTPSource.cpp \
    ./live/liveMedia/MPEG4VideoStreamFramer.cpp \
    ./live/liveMedia/Media.cpp \
    ./live/liveMedia/ByteStreamMultiFileSource.cpp \
    ./live/liveMedia/MPEG2TransportUDPServerMediaSubsession.cpp \
    ./live/liveMedia/H263plusVideoStreamFramer.cpp \
    ./live/liveMedia/VorbisAudioRTPSource.cpp \
    ./live/liveMedia/RTSPCommon.cpp \
    ./live/liveMedia/FramedSource.cpp \
    ./live/liveMedia/MatroskaDemuxedTrack.cpp \
    ./live/liveMedia/MPEG1or2AudioStreamFramer.cpp \
    ./live/liveMedia/VP8VideoMatroskaFileServerMediaSubsession.cpp \
    ./live/liveMedia/MPEG1or2Demux.cpp \
    ./live/liveMedia/AudioRTPSink.cpp \
    ./live/liveMedia/DeviceSource.cpp \
    ./live/liveMedia/MPEG1or2AudioRTPSink.cpp \
    ./live/liveMedia/ByteStreamFileSource.cpp \
    ./live/liveMedia/WAVAudioFileSource.cpp \
    ./live/liveMedia/uLawAudioFilter.cpp \
    ./live/liveMedia/RTSPServer.cpp \
    ./live/liveMedia/VP8VideoRTPSource.cpp \
    ./live/liveMedia/H264VideoRTPSource.cpp \
    ./live/liveMedia/MatroskaFileServerDemux.cpp \
    ./live/liveMedia/MPEG4LATMAudioRTPSink.cpp \
    ./live/liveMedia/MPEG2TransportStreamIndexFile.cpp \
    ./live/liveMedia/SIPClient.cpp \
    ./live/liveMedia/MP3HTTPSource.cpp \
    ./live/liveMedia/BasicUDPSource.cpp \
    ./live/liveMedia/AC3AudioMatroskaFileServerMediaSubsession.cpp \
    ./live/liveMedia/H264VideoFileSink.cpp \
    ./live/liveMedia/MPEG2TransportFileServerMediaSubsession.cpp \
    ./live/liveMedia/DigestAuthentication.cpp \
    ./live/liveMedia/MPEG4ESVideoRTPSource.cpp \
    ./live/liveMedia/MatroskaFile.cpp \
    ./live/liveMedia/MP3ADUdescriptor.cpp \
    ./live/liveMedia/AMRAudioSource.cpp \
    ./live/liveMedia/MPEG4GenericRTPSink.cpp \
    ./live/liveMedia/MPEGVideoStreamFramer.cpp \
    ./live/liveMedia/AC3AudioRTPSink.cpp \
    ./live/liveMedia/DVVideoRTPSink.cpp \
    ./live/liveMedia/OutputFile.cpp \
    ./live/liveMedia/MPEG1or2DemuxedElementaryStream.cpp \
    ./live/liveMedia/RTPInterface.cpp \
    ./live/liveMedia/our_md5hl.c \
    ./live/liveMedia/our_md5.c \
    ./live/liveMedia/rtcp_from_spec.c 
    
    
    LOCAL_C_INCLUDES := \
    ./live/BasicUsageEnvironment/include \
    ./live/liveMedia/include \
    ./live/BasicUsageEnvironment/include \
    ./live/groupsock/include \
    ./live/UsageEnvironment/include
    
    LOCAL_CPPFLAGS += -fexceptions -DXLOCALE_NOT_USED=1 -DNULL=0 -DNO_SSTREAM=1 -UIP_ADD_SOURCE_MEMBERSHIP
    
    include $(BUILD_SHARED_LIBRARY)


    (有关in_addr的地方编译不过的,稍微修改下源码,去掉s_addr即可。

    展开全文
  • Android最早采用的多媒体框架是OpenCore(PacketVideo)。 1. OpenCore概述 OpenCore的代码非常的庞大,它是一个基于C++的实现,定义了全功能的操作系统移植层,各种基本的功能均被封装成类的形式,各层次之间的...

    Android最早采用的多媒体框架是OpenCore(PacketVideo)。

    1. OpenCore概述

    OpenCore的代码非常的庞大,它是一个基于C++的实现,定义了全功能的操作系统移植层,各种基本的功能均被封装成类的形式,各层次之间的接口多使用继承等方式。OpenCore是一个多媒体的框架,从宏观上来看,它主要包含了两大方面的内容:

    * PVPlayer:提供媒体播放器的功能,完成各种音频(Audio)、视频(Video)流的回放(Playback)功能。

    * PVAuthor:提供媒体流记录的功能,完成各种音频(Audio)、视频(Video)流的以及静态图像捕获功能。

    PVPlayer和PVAuthor以SDK的形式提供给开发者,可以在这个SDK之上构建多种应用程序和服务。在移动终端中常常使用的多媒体应用程序,例如媒体播放器、照相机、录像机、录音机等等。

    为了更好的组织整体的架构,OpenCore在软件层次在宏观上分成几个层次:

    * OSCL:Operating System Compatibility Library(操作系统兼容库),包含了一些操作系统底层的操作,为了更好地在不同操作系统移植。包含了基本数据类型、配置、字符串工具、IO、错误处理、线程等内容,类似一个基础的C++库。
    * PVMF:PacketVideo Multimedia Framework(PV多媒体框架),在框架内实现一个文件解析(parser)和组成(composer)、编解码的NODE,也可以继承其通用的接口,在用户层实现一些NODE。
    * PVPlayer Engine:PVPlayer引擎。
    * PVAuthor Engine:PVAuthor引擎。

    事实上,OpenCore中包含的内容非常多:从播放的角度,PVPlayer的输入的(Source)是文件或者网络媒体流,输出(Sink)是音频视频的输出设备,其基本功能包含了媒体流控制、文件解析、音频视频流的解码(Decode)等方面的内容。除了从文件中播放媒体文件之外,还包含了与网络相关的RTSP流(Real Time StreamProtocol,实时流协议)。在媒体流记录的方面,PVAuthor的输入的(Source)是照相机、麦克风等设备,输出(Sink)是各种文件,包含了流的同步、音频视频流的编码(Encode)以及文件的写入等功能。

    在使用OpenCore的SDK的时候,有可能需要在应用程序层实现一个适配器(Adaptor),然后在适配器之上实现具体的功能,对于PVMF的NODE也可以基于通用的接口,在上层实现,以插件的形式使用。

    2. OpenCore的代码结构

    以开源Android的代码为例,OpenCore的代码在以下目录中:external/opencore/。这个目录是OpenCore的根目录,其中包含的子目录如下所示:

        * android:这里面是一个上层的库,它基于PVPlayer和PVAuthor的SDK实现了一个为Android使用的Player和Author。
        * baselibs:包含数据结构和线程安全等内容的底层库
        * codecs_v2:这是一个内容较多的库,主要包含编解码的实现,以及一个OpenMAX的实现
        * engines:包含PVPlayer和PVAuthor引擎的实现
        * extern_libs_v2:包含了khronos的OpenMAX的头文件
        * fileformats:文件格式的解析(parser)工具
        * nodes:提供一些PVMF的NODE,主要是编解码和文件解析方面的。
        * oscl:操作系统兼容库
        * pvmi: 输入输出控制的抽象接口
        * protocols:主要是与网络相关的RTSP、RTP、HTTP等协议的相关内容
        * pvcommon:pvcommon库文件的Android.mk文件,没有源文件。
        * pvplayer:pvplayer库文件的Android.mk文件,没有源文件。
        * pvauthor:pvauthor库文件的Android.mk文件,没有源文件。
        * tools_v2:编译工具以及一些可注册的模块。

        在external/opencore/目录中还有2个文件,如下
    所示:

        * Android.mk:全局的编译文件
        * pvplayer.conf:配置文件

        在external/opencore/的各个子文件夹中包含了众多的Android.mk文件,它们之间还存在着“递归”的关系。例如根目录下的Android.mk,就包含了如下的内容片断:
    include $(PV_TOP)/pvcommon/Android.mk
    include $(PV_TOP)/pvplayer/Android.mk
    include $(PV_TOP)/pvauthor/Android.mk
        这表示了要引用pvcommon,pvplayer和pvauthor等文件夹下面的Android.mk文件。
    external/opencore/的各个Android.mk文件可以按照排列组合进行使用,将几个Android.mk内容合并在一个库当中。

    库的层次关系:在Android的开源版本中编译出来的内容,OpenCore编译出来的各个库如下所示:

        * libopencoreauthor.so:OpenCore的Author库
        * libopencorecommon.so:OpenCore底层的公共库
        * libopencoredownloadreg.so :下载注册库
        * libopencoredownload.so:下载功能实现库
        * libopencoremp4reg.so:MP4注册库
        * libopencoremp4.so:MP4功能实现库
        * libopencorenet_support.so:网络支持库
        * libopencoreplayer.so:OpenCore的Player库
        * libopencorertspreg.so:RTSP注册库
        * libopencorertsp.so:RTSP功能实现库



    展开全文
  • 如何把ffmpeg移植Android上? 今天用NDK-BUILD成功编译了ffmpeg,为我们小组下一步开发Android上的播放器以及播放框架的工作打好了基础。 编译的方法参考的这个博客: ...

    如何把ffmpeg移植到Android上?

    今天用NDK-BUILD成功编译了ffmpeg,为我们小组下一步开发Android上的播放器以及播放框架的工作打好了基础。

    编译的方法参考的这个博客:

    http://abitno.me/compile-ffmpeg-android-ndk

    读了博客中的几篇文章,感觉很佩服。写的东西都很不错,水平高而又通俗易懂。

    我用的ffmpeg最新的0.8.6版本替换了原文中的0.6版,基本原封不动就可成功。只是在编译的过程中会报几条c语言规范相关的错误,简单的改动一下就可以了。

    编译成功,颇为欣喜,简记短述,聊以自慰。微笑


    编译脚本:

    为了使大家方便更加方便地编译出Android上的ffmpeg,我写了一个简单的shell脚本。经测试在Ubuntu11.10上用android-ndk-r6b编译ffmpeg0.8.x成功。

    脚本地址:https://github.com/baby313/gen_Android_ffmpeg/blob/master/gen_player.sh

    只需执行一个命令,就可有得到Android上的ffmpeg啦!

    展开全文
  • 嵌入式系统多媒体框架分析

    千次阅读 2014-08-07 16:39:29
    Google正式对外发布的Android版本,在Android2.3版本之前,使用的是Opencore多媒体框架Android2.3版本及之后的Android系统,以Stagefright多媒体框架取代Opencore多媒体框架。Opencore多媒体框架结构过于庞大复杂...
  • SDL-1.3版开始官方支持Android。本文记录了移植1.3以上的版本的简单过程。 要做一个完整的播放器,只有ffmpeg解码还不够,还需要一个显示视频播放音频的库,SDL是它的完美搭档。如何结合ffmpeg和SDL写一个播放器,...
  • OpenCore是android多媒体框架的核心,所有Android平台的音视频采集,播放的操作都是通过它来实现。通过Open Core程序员可以方便快速的开发出想要的多媒体应用程序,例如:音视频的采集,回放,视频会议,实时的流...
  • Android多媒体框架OpenCore介绍

    千次阅读 2013-07-16 10:21:08
    网上资料很少, ... 1、整个Android多媒体框架OpenCore  2、Player和Author的详细介绍  2、OpenCore和Android其他部分的集成  第一部分 OpenCore概述:  OpenCore的另外一个常用的称呼是PacketV
  • 先测试占座
  • Android开发常用开源框架

    万次阅读 2018-08-22 11:37:41
    Android开源框架系列 Android开源项目 Android开发常用开源框架2 Android开发常用开源框架3 GitHub上最火的Android开源项目,所有开源项目都有详细资料和配套视频 2017年伊始,你需要尝试的25...
  • PacketVideo是一家公司的名称,OpenCore是这套多媒体框架的软件层的名称。在Android的开发者层次看,二者的含义基本相同。对比Android的其它程序库,OpenCore的代码非常庞大,它是一个基于C++的实现,定义了全功能的...
  • Android驱动开发与移植实战详解,完整扫描版

    千次下载 热门讨论 2020-07-30 23:33:34
    李骏、陈小玉编著的《Android驱动开发与移植实战详解》分为18章,依次讲解了Android系统的基本知识, Linux内核的基本知识,分析了Android系统的源码,深入分析HAL层的基本知识,GoldFish下的驱动、MSM内核和驱动、...
  • 事实上,PacketVideo是一家公司的名称,而OpenCore是这套多媒体框架的软件层的名称。在Android的开发者中间,二者的含义基本相同。对比Android的其它程序库,OpenCore的代码非常庞大,它是一个基于C++的实现,定义了...
1 2 3 4 5 ... 20
收藏数 3,753
精华内容 1,501
关键字:

多媒体框架移植android