mplayer: add patch to fix building with modern versions of live555
Patch taken from: https://raw.github.com/sherpya/mplayer-be/master/patches/mp/0025-mpdemux-live555-async-interface.patch At the same time rename patches to follow the new convention. Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
This commit is contained in:
parent
02e51ba864
commit
1a8d62cde9
@ -0,0 +1,126 @@
|
||||
From d3195ea13f4a9aae546ff996e53681349a1a3cdb Mon Sep 17 00:00:00 2001
|
||||
From: sherpya <sherpya@netfarm.it>
|
||||
Date: Fri, 14 Jun 2013 05:25:38 +0200
|
||||
Subject: [PATCH 25/27] mpdemux: live555 async interface
|
||||
|
||||
From: https://raw.github.com/sherpya/mplayer-be/master/patches/mp/0025-mpdemux-live555-async-interface.patch
|
||||
|
||||
Adjust live555 interface code for modern versions of live555.
|
||||
|
||||
Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
|
||||
---
|
||||
libmpdemux/demux_rtp.cpp | 51 ++++++++++++++++++++++++++++++++----------------
|
||||
2 files changed, 35 insertions(+), 22 deletions(-)
|
||||
|
||||
diff --git a/libmpdemux/demux_rtp.cpp b/libmpdemux/demux_rtp.cpp
|
||||
index ad7a7f1..05d06e0 100644
|
||||
--- a/libmpdemux/demux_rtp.cpp
|
||||
+++ b/libmpdemux/demux_rtp.cpp
|
||||
@@ -19,8 +19,6 @@
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*/
|
||||
|
||||
-#define RTSPCLIENT_SYNCHRONOUS_INTERFACE 1
|
||||
-
|
||||
extern "C" {
|
||||
// on MinGW, we must include windows.h before the things it conflicts
|
||||
#ifdef __MINGW32__ // with. they are each protected from
|
||||
@@ -94,15 +92,6 @@ struct RTPState {
|
||||
|
||||
extern "C" char* network_username;
|
||||
extern "C" char* network_password;
|
||||
-static char* openURL_rtsp(RTSPClient* client, char const* url) {
|
||||
- // If we were given a user name (and optional password), then use them:
|
||||
- if (network_username != NULL) {
|
||||
- char const* password = network_password == NULL ? "" : network_password;
|
||||
- return client->describeWithPassword(url, network_username, password);
|
||||
- } else {
|
||||
- return client->describeURL(url);
|
||||
- }
|
||||
-}
|
||||
|
||||
static char* openURL_sip(SIPClient* client, char const* url) {
|
||||
// If we were given a user name (and optional password), then use them:
|
||||
@@ -118,6 +107,19 @@ static char* openURL_sip(SIPClient* client, char const* url) {
|
||||
extern AVCodecContext *avcctx;
|
||||
#endif
|
||||
|
||||
+static char fWatchVariableForSyncInterface;
|
||||
+static char* fResultString;
|
||||
+static int fResultCode;
|
||||
+
|
||||
+static void responseHandlerForSyncInterface(RTSPClient* rtspClient, int responseCode, char* responseString) {
|
||||
+ // Set result values:
|
||||
+ fResultCode = responseCode;
|
||||
+ fResultString = responseString;
|
||||
+
|
||||
+ // Signal a break from the event loop (thereby returning from the blocking command):
|
||||
+ fWatchVariableForSyncInterface = ~0;
|
||||
+}
|
||||
+
|
||||
extern "C" int audio_id, video_id, dvdsub_id;
|
||||
extern "C" demuxer_t* demux_open_rtp(demuxer_t* demuxer) {
|
||||
Boolean success = False;
|
||||
@@ -146,13 +148,19 @@ extern "C" demuxer_t* demux_open_rtp(demuxer_t* demuxer) {
|
||||
rtsp_transport_http = demuxer->stream->streaming_ctrl->url->port;
|
||||
rtsp_transport_tcp = 1;
|
||||
}
|
||||
- rtspClient = RTSPClient::createNew(*env, verbose, "MPlayer", rtsp_transport_http);
|
||||
+ rtspClient = RTSPClient::createNew(*env, url, verbose, "MPlayer", rtsp_transport_http);
|
||||
if (rtspClient == NULL) {
|
||||
fprintf(stderr, "Failed to create RTSP client: %s\n",
|
||||
env->getResultMsg());
|
||||
break;
|
||||
}
|
||||
- sdpDescription = openURL_rtsp(rtspClient, url);
|
||||
+ fWatchVariableForSyncInterface = 0;
|
||||
+ rtspClient->sendDescribeCommand(responseHandlerForSyncInterface);
|
||||
+ env->taskScheduler().doEventLoop(&fWatchVariableForSyncInterface);
|
||||
+ if (fResultCode == 0)
|
||||
+ sdpDescription = fResultString;
|
||||
+ else
|
||||
+ delete[] fResultString;
|
||||
} else { // SIP
|
||||
unsigned char desiredAudioType = 0; // PCMU (use 3 for GSM)
|
||||
sipClient = SIPClient::createNew(*env, desiredAudioType, NULL,
|
||||
@@ -236,8 +244,12 @@ extern "C" demuxer_t* demux_open_rtp(demuxer_t* demuxer) {
|
||||
|
||||
if (rtspClient != NULL) {
|
||||
// Issue a RTSP "SETUP" command on the chosen subsession:
|
||||
- if (!rtspClient->setupMediaSubsession(*subsession, False,
|
||||
- rtsp_transport_tcp)) break;
|
||||
+ fWatchVariableForSyncInterface = 0;
|
||||
+ rtspClient->sendSetupCommand(*subsession, responseHandlerForSyncInterface, False, rtsp_transport_tcp);
|
||||
+ env->taskScheduler().doEventLoop(&fWatchVariableForSyncInterface);
|
||||
+ delete[] fResultString;
|
||||
+ if (fResultCode != 0) break;
|
||||
+
|
||||
if (!strcmp(subsession->mediumName(), "audio"))
|
||||
audiofound = 1;
|
||||
if (!strcmp(subsession->mediumName(), "video"))
|
||||
@@ -248,7 +260,11 @@ extern "C" demuxer_t* demux_open_rtp(demuxer_t* demuxer) {
|
||||
|
||||
if (rtspClient != NULL) {
|
||||
// Issue a RTSP aggregate "PLAY" command on the whole session:
|
||||
- if (!rtspClient->playMediaSession(*mediaSession)) break;
|
||||
+ fWatchVariableForSyncInterface = 0;
|
||||
+ rtspClient->sendPlayCommand(*mediaSession, responseHandlerForSyncInterface);
|
||||
+ env->taskScheduler().doEventLoop(&fWatchVariableForSyncInterface);
|
||||
+ delete[] fResultString;
|
||||
+ if (fResultCode != 0) break;
|
||||
} else if (sipClient != NULL) {
|
||||
sipClient->sendACK(); // to start the stream flowing
|
||||
}
|
||||
@@ -637,7 +653,8 @@ static void teardownRTSPorSIPSession(RTPState* rtpState) {
|
||||
MediaSession* mediaSession = rtpState->mediaSession;
|
||||
if (mediaSession == NULL) return;
|
||||
if (rtpState->rtspClient != NULL) {
|
||||
- rtpState->rtspClient->teardownMediaSession(*mediaSession);
|
||||
+ fWatchVariableForSyncInterface = 0;
|
||||
+ rtpState->rtspClient->sendTeardownCommand(*mediaSession, NULL);
|
||||
} else if (rtpState->sipClient != NULL) {
|
||||
rtpState->sipClient->sendBYE();
|
||||
}
|
||||
--
|
||||
1.8.5.2
|
||||
|
Loading…
Reference in New Issue
Block a user