背景:
live555作为知名的流媒体开源框架,在实际项目中,经常使用到。在Android播放器中,可以使用其作为流媒体部分的拉流端,特别是对于RTSP及组播播放,live555相对还是很稳定的。
这次将其移植到Android SDK上,并完成RTSP及组播拉流小程序,权当玩乐及熟悉live555之用。
RTSP拉流小程序基本就是原来live555测试代码testRTSPClient.cpp,仅对其做了点小修改,让其能完成对电视节目RTSP流的获取,所以后面有机会再讲live555 RTSP内部实现流程吧。
这次就讲Android上移植live555及实现组播简单拉流代码。
Android移植live555
live555 Android平台移植方法优快云上很多可以参考,并不难,我简单说下我的移植方法
首先官网下载live555源码http://www.live555.com/liveMedia/public/
对于Android,可以删除不必要的目录,我仅保留如下目录:
编写Android.mk文件,如下,
将liveMedia目录中的CPP和C代码全部包含进来,另外其他几个目录需要用到的文件也添加进来。
指定LOCAL_CPPFLAGS 和LOCAL_LDFLAGS ,主要是对STL的支持。
这样编译即可,会在live555源码out目录下生成liblive555.so库。
编译过程中可能有些小错误,不同live555的错误可能略有不同,主要是对NDK的兼容问题,网上查查修改即可,比较简单。
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := liblive555
LOCAL_MODULE_PATH := $(LOCAL_PATH)/out
LOCAL_C_INCLUDES := \
$(LOCAL_PATH) \
$(LOCAL_PATH)/BasicUsageEnvironment/include \
$(LOCAL_PATH)/BasicUsageEnvironment \
$(LOCAL_PATH)/UsageEnvironment/include \
$(LOCAL_PATH)/UsageEnvironment \
$(LOCAL_PATH)/groupsock/include \
$(LOCAL_PATH)/groupsock \
$(LOCAL_PATH)/liveMedia/include \
$(LOCAL_PATH)/liveMedia \
LOCAL_MODULE_TAGS := optional
prebuilt_stdcxx_PATH := prebuilts/ndk/current/sources/cxx-stl/gnu-libstdc++
SRC_LIST := $(wildcard $(LOCAL_PATH)/liveMedia/*.cpp)
SRC_LIST += $(wildcard $(LOCAL_PATH)/liveMedia/*.c)
LOCAL_SRC_FILES := $(SRC_LIST:$(LOCAL_PATH)/%=%)
LOCAL_SRC_FILES += \
groupsock/GroupsockHelper.cpp \
groupsock/GroupEId.cpp \
groupsock/inet.c \
groupsock/Groupsock.cpp \
groupsock/NetInterface.cpp \
groupsock/NetAddress.cpp \
groupsock/IOHandlers.cpp \
UsageEnvironm