Live555在Amlogic系列芯片上的移植

本文详细记录了在Amlogic系列芯片上移植Live555的过程,包括获取源码、解压、修改文件权限、创建Android.mk文件、解决编译错误以及最终的部署步骤。

    近期因为工作的原因,需要用到Live555,之前在工作之余玩过它,但没有记录移植过程,这次在往Amlogic系列平台上移植的时候,遇到了些小麻烦,所以这次决定记录下这个过程。

    一,获取Live555的最新源码。地址:http://www.live555.com/liveMedia/public/live.2015.04.22.tar.gz。(这个代码的日期会随时更新,这是我下载时最近的版本)。

    二、解压源码并把代码copy到Amlogic系统平台的external目录下,并命名为Live555。修改整个Live555目录的文件权限属性,因为有些文件是只有读权限的,我们没办法修改。

    三、在Live555目录下和mediaServer目录下分别增加一个Android.mk文件。

    四、填写如下内容:

    1.***/live555/Android.mk

LOCAL_PATH := $(call my-dir)
LIVE_PATH := $(LOCAL_PATH)

include $(CLEAR_VARS)

LOCAL_C_INCLUDES := \
	$(LOCAL_PATH) \
	$(LOCAL_PATH)/BasicUsageEnvironment \
	$(LOCAL_PATH)/BasicUsageEnvironment/include \
	$(LOCAL_PATH)/groupsock \
	$(LOCAL_PATH)/groupsock/include \
	$(LOCAL_PATH)/liveMedia \
	$(LOCAL_PATH)/liveMedia/include \
	$(LOCAL_PATH)/UsageEnvironment \
	$(LOCAL_PATH)/UsageEnvironment/include

basicusage_src_files := \
	BasicUsageEnvironment/BasicHashTable.cpp \
	BasicUsageEnvironment/BasicTaskScheduler0.cpp \
	BasicUsageEnvironment/BasicTaskScheduler.cpp \
	BasicUsageEnvironment/BasicUsageEnvironment0.cpp \
	BasicUsageEnvironment/BasicUsageEnvironment.cpp \
	BasicUsageEnvironment/DelayQueue.cpp

groupsock_src_files := \
	groupsock/GroupEId.cpp \
	groupsock/Groupsock.cpp \
	groupsock/GroupsockHelper.cpp \
	groupsock/inet.c \
	groupsock/IOHandlers.cpp \
	groupsock/NetAddress.cpp \
	groupsock/NetInterface.cpp

livemedia_src_files := \
	liveMedia/AC3AudioFileServerMediaSubsession.cpp \
	liveMedia/AC3AudioRTPSink.cpp \
	liveMedia/AC3AudioRTPSource.cpp \
	liveMedia/AC3AudioStreamFramer.cpp \
	liveMedia/ADTSAudioFileServerMediaSubsession.cpp \
	liveMedia/ADTSAudioFileSource.cpp \
	liveMedia/AMRAudioFileServerMediaSubsession.cpp \
	liveMedia/AMRAudioFileSink.cpp \
	liveMedia/AMRAudioFileSource.cpp \
	liveMedia/AMRAudioRTPSink.cpp \
	liveMedia/AMRAudioRTPSource.cpp \
	liveMedia/AMRAudioSource.cpp \
	liveMedia/AudioInputDevice.cpp \
	liveMedia/AudioRTPSink.cpp \
	liveMedia/AVIFileSink.cpp \
	liveMedia/Base64.cpp \
	liveMedia/BasicUDPSink.cpp \
	liveMedia/BasicUDPSource.cpp \
	liveMedia/BitVector.cpp \
	liveMedia/ByteStreamFileSource.cpp \
	liveMedia/ByteStreamMemoryBufferSource.cpp \
	liveMedia/ByteStreamMultiFileSource.cpp \
	liveMedia/DarwinInjector.cpp \
	liveMedia/DeviceSource.cpp \
	liveMedia/DigestAuthentication.cpp \
	liveMedia/DVVideoFileServerMediaSubsession.cpp \
	liveMedia/DVVideoRTPSink.cpp \
	liveMedia/DVVideoRTPSource.cpp \
	liveMedia/DVVideoStreamFramer.cpp \
	liveMedia/EBMLNumber.cpp \
	liveMedia/FileServerMediaSubsession.cpp \
	liveMedia/FileSink.cpp \
	liveMedia/FramedFileSource.cpp \
	liveMedia/FramedFilter.cpp \
	liveMedia/FramedSource.cpp \
	liveMedia/GSMAudioRTPSink.cpp \
	liveMedia/H261VideoRTPSource.cpp \
	liveMedia/H263plusVideoFileServerMediaSubsession.cpp \
	liveMedia/H263plusVideoRTPSink.cpp \
	liveMedia/H263plusVideoRTPSource.cpp \
	liveMedia/H263plusVideoStreamFramer.cpp \
	liveMedia/H263plusVideoStreamParser.cpp \
	liveMedia/H264or5VideoFileSink.cpp \
	liveMedia/H264or5VideoRTPSink.cpp \
	liveMedia/H264or5VideoStreamDiscreteFramer.cpp \
	liveMedia/H264or5VideoStreamFramer.cpp \
	liveMedia/H264VideoFileServerMediaSubsession.cpp \
	liveMedia/H264VideoFileSink.cpp \
	liveMedia/H264VideoRTPSink.cpp \
	liveMedia/H264VideoRTPSource.cpp \
	liveMedia/H264VideoStreamDiscreteFramer.cpp \
	liveMedia/H264VideoStreamFramer.cpp \
	liveMedia/H265VideoFileServerMediaSubsession.cpp \
	liveMedia/H265VideoFileSink.cpp \
	liveMedia/H265VideoRTPSink.cpp \
	liveMedia/H265VideoRTPSource.cpp \
	liveMedia/H265VideoStreamDiscreteFramer.cpp \
	liveMedia/H265VideoStreamFramer.cpp \
	liveMedia/InputFile.cpp \
	liveMedia/JPEGVideoRTPSink.cpp \
	liveMedia/JPEGVideoRTPSource.cpp \
	liveMedia/JPEGVideoSource.cpp \
	liveMedia/Locale.cpp \
	liveMedia/MatroskaDemuxedTrack.cpp \
	liveMedia/MatroskaFile.cpp \
	liveMedia/MatroskaFileParser.cpp \
	liveMedia/MatroskaFileServerDemux.cpp \
	liveMedia/MatroskaFileServerMediaSubsession.cpp \
	liveMedia/Media.cpp \
	liveMedia/MediaSession.cpp \
	liveMedia/MediaSink.cpp \
	liveMedia/MediaSource.cpp \
	liveMedia/MP3ADU.cpp \
	liveMedia/MP3ADUdescriptor.cpp \
	liveMedia/MP3ADUinterleaving.cpp \
	liveMedia/MP3ADURTPSink.cpp \
	liveMedia/MP3ADURTPSource.cpp \
	liveMedia/MP3ADUTranscoder.cpp \
	liveMedia/MP3AudioFileServerMediaSubsession.cpp \
	liveMedia/MP3AudioMatroskaFileServerMediaSubsession.cpp \
	liveMedia/MP3FileSource.cpp \
	liveMedia/MP3Internals.cpp \
	liveMedia/MP3InternalsHuffman.cpp \
	liveMedia/MP3InternalsHuffmanTable.cpp \
	liveMedia/MP3StreamState.cpp \
	liveMedia/MP3Transcoder.cpp \
	liveMedia/MPEG1or2AudioRTPSink.cpp \
	liveMedia/MPEG1or2AudioRTPSource.cpp \
	liveMedia/MPEG1or2AudioStreamFramer.cpp \
	liveMedia/MPEG1or2Demux.cpp \
	liveMedia/MPEG1or2DemuxedElementaryStream.cpp \
	liveMedia/MPEG1or2DemuxedServerMediaSubsession.cpp \
	liveMedia/MPEG1or2FileServerDemux.cpp \
	liveMedia/MPEG1or2VideoFileServerMediaSubsession.cpp \
	liveMedia/MPEG1or2VideoRTPSink.cpp \
	liveMedia/MPEG1or2VideoRTPSource.cpp \
	liveMedia/MPEG1or2VideoStreamDiscreteFramer.cpp \
	liveMedia/MPEG1or2VideoStreamFramer.cpp \
	liveMedia/MPEG2IndexFromTransportStream.cpp \
	liveMedia/MPEG2TransportFileServerMediaSubsession.cpp \
	liveMedia/MPEG2TransportStreamFramer.cpp \
	liveMedia/MPEG2TransportStreamFromESSource.cpp \
	liveMedia/MPEG2TransportStreamFromPESSource.cpp \
	liveMedia/MPEG2TransportStreamIndexFile.cpp \
	liveMedia/MPEG2TransportStreamMultiplexor.cpp \
	liveMedia/MPEG2TransportStreamTrickModeFilter.cpp \
	liveMedia/MPEG2TransportUDPServerMediaSubsession.cpp \
	liveMedia/MPEG4ESVideoRTPSink.cpp \
	liveMedia/MPEG4ESVideoRTPSource.cpp \
	liveMedia/MPEG4GenericRTPSink.cpp \
	liveMedia/MPEG4GenericRTPSource.cpp \
	liveMedia/MPEG4LATMAudioRTPSink.cpp \
	liveMedia/MPEG4LATMAudioRTPSource.cpp \
	liveMedia/MPEG4VideoFileServerMediaSubsession.cpp \
	liveMedia/MPEG4VideoStreamDiscreteFramer.cpp \
	liveMedia/MPEG4VideoStreamFramer.cpp \
	liveMedia/MPEGVideoStreamFramer.cpp \
	liveMedia/MPEGVideoStreamParser.cpp \
	liveMedia/MultiFramedRTPSink.cpp \
	liveMedia/MultiFramedRTPSource.cpp \
	liveMedia/OggDemuxedTrack.cpp \
	liveMedia/OggFile.cpp \
	liveMedia/OggFileParser.cpp \
	liveMedia/OggFileServerDemux.cpp \
	liveMedia/OggFileServerMediaSubsession.cpp \
	liveMedia/OggFileSink.cpp \
	liveMedia/OnDemandServerMediaSubsession.cpp \
	liveMedia/ourMD5.cpp \
	liveMedia/OutputFile.cpp \
	liveMedia/PassiveServerMediaSubsession.cpp \
	liveMedia/ProxyServerMediaSession.cpp \
	liveMedia/QCELPAudioRTPSource.cpp \
	liveMedia/QuickTimeFileSink.cpp \
	liveMedia/QuickTimeGenericRTPSource.cpp \
	liveMedia/RTCP.cpp \
	liveMedia/rtcp_from_spec.c \
	liveMedia/RTPInterface.cpp \
	liveMedia/RTPSink.cpp \
	liveMedia/RTPSource.cpp \
	liveMedia/RTSPClient.cpp \
	liveMedia/RTSPCommon.cpp \
	liveMedia/RTSPRegisterSender.cpp \
	liveMedia/RTSPServer.cpp \
	liveMedia/RTSPServerSupportingHTTPStreaming.cpp \
	liveMedia/ServerMediaSession.cpp \
	liveMedia/SimpleRTPSink.cpp \
	liveMedia/SimpleRTPSource.cpp \
	liveMedia/SIPClient.cpp \
	liveMedia/StreamParser.cpp \
	liveMedia/StreamReplicator.cpp \
	liveMedia/T140TextRTPSink.cpp \
	liveMedia/TCPStreamSink.cpp \
	liveMedia/TextRTPSink.cpp \
	liveMedia/TheoraVideoRTPSink.cpp \
	liveMedia/TheoraVideoRTPSource.cpp \
	liveMedia/uLawAudioFilter.cpp \
	liveMedia/VideoRTPSink.cpp \
	liveMedia/VorbisAudioRTPSink.cpp \
	liveMedia/VorbisAudioRTPSource.cpp \
	liveMedia/VP8VideoRTPSink.cpp \
	liveMedia/VP8VideoRTPSource.cpp \
	liveMedia/VP9VideoRTPSink.cpp \
	liveMedia/VP9VideoRTPSource.cpp \
	liveMedia/WAVAudioFileSource.cpp \
	liveMedia/WAVAudioFileServerMediaSubsession.cpp
	
usageenv_src_files := \
	UsageEnvironment/HashTable.cpp \
	UsageEnvironment/strDup.cpp \
	UsageEnvironment/UsageEnvironment.cpp
	
LOCAL_SRC_FILES := \
	$(basicusage_src_files) \
	$(groupsock_src_files) \
	$(livemedia_src_files) \
	$(usageenv_src_files)

LOCAL_MODULE := liblive555
LOCAL_ARM_MODE := arm
LOCAL_PRELINK_MODULE := false
	LOCAL_MODULE_TAGS := optional

LOCAL_CPPFLAGS := \
	-DNO_SSTREAM \
	-fexceptions \
	-DXLOCALE_NOT_USED

NDK_PATH := $(LIVE_PATH)/../../prebuilts/ndk/8/sources/cxx-stl/gnu-libstdc++/libs/armeabi-v7a
LOCAL_LDFLAGS := \
    <span style="white-space:pre">	</span>-L$(NDK_PATH) \
	-lgnustl_static \
	-lsupc++

include $(BUILD_SHARED_LIBRARY)

#build mediaServer
include $(LIVE_PATH)/mediaServer/Android.mk

其中LOCAL_CPPFLAGS:

-DNO_SSTREAM --解决“fatal error: sstream: No such file or directory”

-fexceptions -- 解决“error: exception handling disabled, use -fexceptions to enable”

-DXLOCALE_NOT_USED -- 解决"xlocale.h: No such file or directory"

如果出现:

error: undefined reference to '__cxa_end_cleanup'

error: undefined reference to '__gxx_personality_v0'

等类似错误提示,增加:

NDK_PATH := $(LIVE_PATH)/../../prebuilts/ndk/8/sources/cxx-stl/gnu-libstdc++/libs/armeabi-v7a
LOCAL_LDFLAGS := \
    <span>	</span>-L$(NDK_PATH) \
	-lgnustl_static \
	-lsupc++

其中NDK_PATH 是你平台中NDK的路径,根据自己的实际情况修改。

2.***/live555/mediaServer/Android.mk

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)

LOCAL_MODULE:= mediaServer
LOCAL_PRELINK_MODULE := false

LOCAL_MODULE_TAGS := optional

LOCAL_SRC_FILES := \
    live555MediaServer.cpp \
    DynamicRTSPServer.cpp

LOCAL_SHARED_LIBRARIES := liblive555

LOCAL_C_INCLUDES := \
	$(LOCAL_PATH) \
	$(LOCAL_PATH)/../ \
	$(LOCAL_PATH)/../BasicUsageEnvironment \
	$(LOCAL_PATH)/../BasicUsageEnvironment/include \
	$(LOCAL_PATH)/../groupsock \
	$(LOCAL_PATH)/../groupsock/include \
	$(LOCAL_PATH)/../liveMedia \
	$(LOCAL_PATH)/../liveMedia/include \
	$(LOCAL_PATH)/../UsageEnvironment \
	$(LOCAL_PATH)/../UsageEnvironment/include 

五、进入Live555主目录,使用mm -B编译。

    看到这两句话就表示编译成功了:

Install: out/target/product/***/system/lib/liblive555.so

Install: out/target/product/***/system/bin/mediaServer

六、把liblive555.so copy到测试板中的/system/lib目录下,修改可读写权限,并把mediaServer copy到如:/data/tmp目录下。

七、执行./mediaServer

version 0.87 (LIVE555 Streaming Media library version 2015.04.16).
Play streams from this server using the URL
	rtsp://192.168.0.101/<filename>
where <filename> is a file present in the current directory.
Each file's type is inferred from its name suffix:
	".264" => a H.264 Video Elementary Stream file
	".265" => a H.265 Video Elementary Stream file
	".aac" => an AAC Audio (ADTS format) file
	".ac3" => an AC-3 Audio file
	".amr" => an AMR Audio file
	".dv" => a DV Video file
	".m4e" => a MPEG-4 Video Elementary Stream file
	".mkv" => a Matroska audio+video+(optional)subtitles file
	".mp3" => a MPEG-1 or 2 Audio file
	".mpg" => a MPEG-1 or 2 Program Stream (audio+video) file
	".ogg" or ".ogv" or ".opus" => an Ogg audio and/or video file
	".ts" => a MPEG Transport Stream file
		(a ".tsx" index file - if present - provides server 'trick play' support)
	".vob" => a VOB (MPEG-2 video with AC-3 audio) file
	".wav" => a WAV Audio file
	".webm" => a WebM audio(Vorbis)+video(VP8) file
See http://www.live555.com/mediaServer/ for additional documentation.
(We use port 80 for optional RTSP-over-HTTP tunneling, or for HTTP live streaming (for indexed Transport Stream files only).)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值