From 5a68fc340e5b61ec29d8283433ddb003d6871abc Mon Sep 17 00:00:00 2001 From: Li Sun Date: Fri, 3 Jul 2015 15:13:43 +0800 Subject: RTSP: add RTSP extensions for IPV6 support Change access modifiers and add overridables in rtsp stack. Make ARTSPConnection/ARTPConnection extensible for IPV6 support. Provide default implementations in AVMediaServiceExensions and AVMediaServiceFactory. Change-Id: Iaa67070d1832d56e0569dabfd8327c1998f04493 --- media/libavextensions/Android.mk | 2 ++ .../mediaplayerservice/AVMediaServiceExtensions.h | 16 ++++++++++++++++ .../mediaplayerservice/AVMediaServiceFactory.cpp | 11 +++++++++++ .../mediaplayerservice/AVMediaServiceUtils.cpp | 20 ++++++++++++++++++++ 4 files changed, 49 insertions(+) (limited to 'media/libavextensions') diff --git a/media/libavextensions/Android.mk b/media/libavextensions/Android.mk index 391edcb..511f13f 100644 --- a/media/libavextensions/Android.mk +++ b/media/libavextensions/Android.mk @@ -67,6 +67,8 @@ LOCAL_C_INCLUDES:= \ $(TOP)/frameworks/av/include/media/ \ $(TOP)/frameworks/av/media/libmediaplayerservice \ $(TOP)/frameworks/av/media/libavextensions \ + $(TOP)/frameworks/av/media/libstagefright/include \ + $(TOP)/frameworks/av/media/libstagefright/rtsp \ $(TOP)/frameworks/native/include/media/hardware \ $(TOP)/frameworks/native/include/media/openmax \ $(TOP)/external/flac/include \ diff --git a/media/libavextensions/mediaplayerservice/AVMediaServiceExtensions.h b/media/libavextensions/mediaplayerservice/AVMediaServiceExtensions.h index 327e0a0..5c31fad 100644 --- a/media/libavextensions/mediaplayerservice/AVMediaServiceExtensions.h +++ b/media/libavextensions/mediaplayerservice/AVMediaServiceExtensions.h @@ -31,11 +31,16 @@ #include +#include #include namespace android { struct StagefrightRecorder; +struct ARTSPConnection; +struct ARTPConnection; +struct AString; +struct MyHandler; /* * Factory to create objects of base-classes in libmediaplayerservice @@ -43,6 +48,10 @@ struct StagefrightRecorder; struct AVMediaServiceFactory { virtual StagefrightRecorder *createStagefrightRecorder(const String16 &); + // RTSP extensions + virtual sp createARTSPConnection(bool uidValid, uid_t uid); + virtual sp createARTPConnection(); + // ----- NO TRESSPASSING BEYOND THIS LINE ------ DECLARE_LOADABLE_SINGLETON(AVMediaServiceFactory); }; @@ -52,6 +61,13 @@ struct AVMediaServiceFactory { */ struct AVMediaServiceUtils { + // RTSP IPV6 utils + virtual bool pokeAHole(sp handler, int rtpSocket, int rtcpSocket, + const AString &transport, const AString &sessionHost); + virtual void makePortPair(int *rtpSocket, int *rtcpSocket, unsigned *rtpPort, + bool isIPV6); + virtual const char* parseURL(AString *host); + // ----- NO TRESSPASSING BEYOND THIS LINE ------ DECLARE_LOADABLE_SINGLETON(AVMediaServiceUtils); }; diff --git a/media/libavextensions/mediaplayerservice/AVMediaServiceFactory.cpp b/media/libavextensions/mediaplayerservice/AVMediaServiceFactory.cpp index eb0ebb7..10b66f5 100644 --- a/media/libavextensions/mediaplayerservice/AVMediaServiceFactory.cpp +++ b/media/libavextensions/mediaplayerservice/AVMediaServiceFactory.cpp @@ -32,6 +32,8 @@ #include #include +#include "ARTPConnection.h" +#include "ARTSPConnection.h" #include "MediaRecorderClient.h" #include "MediaPlayerService.h" @@ -46,6 +48,15 @@ StagefrightRecorder *AVMediaServiceFactory::createStagefrightRecorder( return new StagefrightRecorder(opPackageName); } +sp AVMediaServiceFactory::createARTSPConnection( + bool uidValid, uid_t uid) { + return new ARTSPConnection(uidValid, uid); +} + +sp AVMediaServiceFactory::createARTPConnection() { + return new ARTPConnection(); +} + // ----- NO TRESSPASSING BEYOND THIS LINE ------ AVMediaServiceFactory::AVMediaServiceFactory() { } diff --git a/media/libavextensions/mediaplayerservice/AVMediaServiceUtils.cpp b/media/libavextensions/mediaplayerservice/AVMediaServiceUtils.cpp index a3da1df..705ce8a 100644 --- a/media/libavextensions/mediaplayerservice/AVMediaServiceUtils.cpp +++ b/media/libavextensions/mediaplayerservice/AVMediaServiceUtils.cpp @@ -31,11 +31,31 @@ #include #include +#include "ARTPConnection.h" +#include "MyHandler.h" + #include "common/ExtensionsLoader.hpp" #include "mediaplayerservice/AVMediaServiceExtensions.h" namespace android { +bool AVMediaServiceUtils::pokeAHole(sp handler, int rtpSocket, int rtcpSocket, + const AString &transport, const AString &/*sessionHost*/) { + if (handler == NULL) { + ALOGW("MyHandler is NULL"); + return false; + } + return handler->pokeAHole(rtpSocket, rtcpSocket, transport); +} + +void AVMediaServiceUtils::makePortPair(int *rtpSocket, int *rtcpSocket, unsigned *rtpPort, + bool /*isIPV6*/) { + return ARTPConnection::MakePortPair(rtpSocket, rtcpSocket, rtpPort); +} + +const char* AVMediaServiceUtils::parseURL(AString *host) { + return strchr(host->c_str(), ':'); +} // ----- NO TRESSPASSING BEYOND THIS LINE ------ AVMediaServiceUtils::AVMediaServiceUtils() { -- cgit v1.1