Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 953fc3ad authored by Li Sun's avatar Li Sun Committed by Linux Build Service Account
Browse files

RTSP: add default implementations in NuPlayer for rtsp changes

Change access modifiers and qualify methods with virtual, to
allow extensions in RTSP. Add facility for loading customizations
(Extended classes) dynamically.

List of squashed changes:

rtsp: keep video damaged access unit to enhance fault tolerance
Change-Id: I3b7fb4b098aba5daf149cf36dab7e9380c6d2f69

rtsp: notify the client when receiving BYE message in RTCP
Change-Id: I461960f28610f998b71a6e1322fe79f9856c7a92

rtsp: do not drop early access units of seekable rtsp
Change-Id: I12793dbbf367650e66532195324adb5b5ad8fe85

NuPlayer: Fix ANR while resetting RTSP playback
Change-Id: I3f9efd9fefa66104ad452559ced5ff5218d73a66

RTSP: add RTSP extensions for customization support
Change-Id: I67adeb54b35d1f01911625bb9bad27e94ad0caf0

RTSP: add RTSP extensions for IPV6 support
Change-Id: Iaa67070d1832d56e0569dabfd8327c1998f04493

RTSP: add default implementations in NuPlayer for rtsp changes

Change-Id: I365cce317b4478cd1d12e458b5849ea842062a28
parent 15d5d7c1
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -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 \
+30 −0
Original line number Diff line number Diff line
@@ -32,11 +32,20 @@
#include <common/AVExtensionsCommon.h>
#include <MediaPlayerFactory.h>

#include <utils/List.h>
#include <utils/RefBase.h>
#include <utils/String16.h>

#include <media/Metadata.h>

namespace android {

struct StagefrightRecorder;
struct ARTSPConnection;
struct ARTPConnection;
struct AString;
struct MyHandler;
struct ABuffer;

/*
 * Factory to create objects of base-classes in libmediaplayerservice
@@ -44,6 +53,10 @@ struct StagefrightRecorder;
struct AVMediaServiceFactory {
    virtual StagefrightRecorder *createStagefrightRecorder(const String16 &);

    // RTSP extensions
    virtual sp<ARTSPConnection> createARTSPConnection(bool uidValid, uid_t uid);
    virtual sp<ARTPConnection> createARTPConnection();

    // ----- NO TRESSPASSING BEYOND THIS LINE ------
    DECLARE_LOADABLE_SINGLETON(AVMediaServiceFactory);
};
@@ -54,6 +67,23 @@ struct AVMediaServiceFactory {
struct AVMediaServiceUtils {
    virtual void getDashPlayerFactory(MediaPlayerFactory::IFactory *&, player_type ) {}

    // RTSP IPV6 utils
    virtual bool pokeAHole(sp<MyHandler> 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);
    // RTSP customization utils
    virtual bool parseTrackURL(AString url, AString val);
    virtual void appendRange(AString *request);
    virtual void setServerTimeoutUs(int64_t timeout);
    virtual void appendMeta(media::Metadata *meta);
    virtual bool checkNPTMapping(uint32_t *rtpInfoTime, int64_t *playTimeUs,
            bool *nptValid, uint32_t rtpTime);
    virtual void addH263AdvancedPacket(const sp<ABuffer> &buffer,
            List<sp<ABuffer>> *packets, uint32_t rtpTime);
    virtual bool parseNTPRange(const char *s, float *npt1, float *npt2);

    // ----- NO TRESSPASSING BEYOND THIS LINE ------
    DECLARE_LOADABLE_SINGLETON(AVMediaServiceUtils);
};
+11 −0
Original line number Diff line number Diff line
@@ -32,6 +32,8 @@

#include <media/stagefright/foundation/ADebug.h>
#include <media/stagefright/foundation/AMessage.h>
#include "ARTPConnection.h"
#include "ARTSPConnection.h"

#include "MediaRecorderClient.h"
#include "MediaPlayerService.h"
@@ -46,6 +48,15 @@ StagefrightRecorder *AVMediaServiceFactory::createStagefrightRecorder(
    return new StagefrightRecorder(opPackageName);
}

sp<ARTSPConnection> AVMediaServiceFactory::createARTSPConnection(
        bool uidValid, uid_t uid) {
    return new ARTSPConnection(uidValid, uid);
}

sp<ARTPConnection> AVMediaServiceFactory::createARTPConnection() {
    return new ARTPConnection();
}

// ----- NO TRESSPASSING BEYOND THIS LINE ------
AVMediaServiceFactory::AVMediaServiceFactory() {
}
+51 −0
Original line number Diff line number Diff line
@@ -32,12 +32,63 @@
#include <utils/Log.h>

#include <media/stagefright/foundation/ADebug.h>
#include "ARTPConnection.h"
#include "ASessionDescription.h"
#include "MyHandler.h"

#include "common/ExtensionsLoader.hpp"
#include "mediaplayerservice/AVMediaServiceExtensions.h"

namespace android {

bool AVMediaServiceUtils::pokeAHole(sp<MyHandler> 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(), ':');
}

bool AVMediaServiceUtils::parseTrackURL(AString /*url*/, AString /*val*/) {
    return false;
}

void AVMediaServiceUtils::appendRange(AString * /*request*/) {
    return;
}

void AVMediaServiceUtils::setServerTimeoutUs(int64_t /*timeout*/) {
    return;
}

void AVMediaServiceUtils::addH263AdvancedPacket(const sp<ABuffer> &/*buffer*/,
        List<sp<ABuffer>> * /*packets*/, uint32_t /*rtpTime*/) {
    return;
}

void AVMediaServiceUtils::appendMeta(media::Metadata * /*meta*/) {
    return;
}

bool AVMediaServiceUtils::checkNPTMapping(uint32_t * /*rtpInfoTime*/, int64_t * /*playTimeUs*/,
        bool * /*nptValid*/, uint32_t /*rtpTime*/) {
    return false;
}

bool AVMediaServiceUtils::parseNTPRange(const char *s, float *npt1, float *npt2) {
    return ASessionDescription::parseNTPRange(s, npt1, npt2);
}

// ----- NO TRESSPASSING BEYOND THIS LINE ------
AVMediaServiceUtils::AVMediaServiceUtils() {
}
+1 −0
Original line number Diff line number Diff line
@@ -58,6 +58,7 @@ struct AVNuUtils {

    virtual void printFileName(int fd);
    virtual bool dropCorruptFrame();
    virtual void addFlagsInMeta(const sp<ABuffer> &buffer, int32_t flags, bool isAudio);

    // ----- NO TRESSPASSING BEYOND THIS LINE ------
    DECLARE_LOADABLE_SINGLETON(AVNuUtils);
Loading