annotate libmpdemux/demux_rtp.cpp @ 36516:b726218447c9

Fully reinit audio chain on format change. This ensures that we insert all necessary filters like downmixing, but loses the current settings like volume or equalizer that were set at runtime.
author reimar
date Sat, 18 Jan 2014 20:41:46 +0000
parents dba1b5aa72c1
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
29238
d643e4643313 Add standard license header to all files in libmpdemux.
diego
parents: 27776
diff changeset
1 /*
d643e4643313 Add standard license header to all files in libmpdemux.
diego
parents: 27776
diff changeset
2 * routines (with C-linkage) that interface between MPlayer
d643e4643313 Add standard license header to all files in libmpdemux.
diego
parents: 27776
diff changeset
3 * and the "LIVE555 Streaming Media" libraries
d643e4643313 Add standard license header to all files in libmpdemux.
diego
parents: 27776
diff changeset
4 *
d643e4643313 Add standard license header to all files in libmpdemux.
diego
parents: 27776
diff changeset
5 * This file is part of MPlayer.
d643e4643313 Add standard license header to all files in libmpdemux.
diego
parents: 27776
diff changeset
6 *
d643e4643313 Add standard license header to all files in libmpdemux.
diego
parents: 27776
diff changeset
7 * MPlayer is free software; you can redistribute it and/or modify
d643e4643313 Add standard license header to all files in libmpdemux.
diego
parents: 27776
diff changeset
8 * it under the terms of the GNU General Public License as published by
d643e4643313 Add standard license header to all files in libmpdemux.
diego
parents: 27776
diff changeset
9 * the Free Software Foundation; either version 2 of the License, or
d643e4643313 Add standard license header to all files in libmpdemux.
diego
parents: 27776
diff changeset
10 * (at your option) any later version.
d643e4643313 Add standard license header to all files in libmpdemux.
diego
parents: 27776
diff changeset
11 *
d643e4643313 Add standard license header to all files in libmpdemux.
diego
parents: 27776
diff changeset
12 * MPlayer is distributed in the hope that it will be useful,
d643e4643313 Add standard license header to all files in libmpdemux.
diego
parents: 27776
diff changeset
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
d643e4643313 Add standard license header to all files in libmpdemux.
diego
parents: 27776
diff changeset
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
d643e4643313 Add standard license header to all files in libmpdemux.
diego
parents: 27776
diff changeset
15 * GNU General Public License for more details.
d643e4643313 Add standard license header to all files in libmpdemux.
diego
parents: 27776
diff changeset
16 *
d643e4643313 Add standard license header to all files in libmpdemux.
diego
parents: 27776
diff changeset
17 * You should have received a copy of the GNU General Public License along
d643e4643313 Add standard license header to all files in libmpdemux.
diego
parents: 27776
diff changeset
18 * with MPlayer; if not, write to the Free Software Foundation, Inc.,
d643e4643313 Add standard license header to all files in libmpdemux.
diego
parents: 27776
diff changeset
19 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
d643e4643313 Add standard license header to all files in libmpdemux.
diego
parents: 27776
diff changeset
20 */
9250
bb490ffeebf5 Restruct by Ross Finlayson <finlayson@live.com>
bertrand
parents: 8987
diff changeset
21
34712
6e0aeeb6cdc4 Fix compilation with new LIVE555 libraries.
cehoyos
parents: 34173
diff changeset
22 #define RTSPCLIENT_SYNCHRONOUS_INTERFACE 1
6e0aeeb6cdc4 Fix compilation with new LIVE555 libraries.
cehoyos
parents: 34173
diff changeset
23
6910
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
24 extern "C" {
12531
834e7844ab3b MinGW compilation fix from a patch by Joey Parrish, approved by Sascha
diego
parents: 12521
diff changeset
25 // on MinGW, we must include windows.h before the things it conflicts
834e7844ab3b MinGW compilation fix from a patch by Joey Parrish, approved by Sascha
diego
parents: 12521
diff changeset
26 #ifdef __MINGW32__ // with. they are each protected from
834e7844ab3b MinGW compilation fix from a patch by Joey Parrish, approved by Sascha
diego
parents: 12521
diff changeset
27 #include <windows.h> // windows.h, but not the other way around.
834e7844ab3b MinGW compilation fix from a patch by Joey Parrish, approved by Sascha
diego
parents: 12521
diff changeset
28 #endif
34173
a5d8b198c214 demux_rtp: Replace extern declarations by proper header #includes.
diego
parents: 33705
diff changeset
29 #include "mp_msg.h"
31483
a295c59e1a48 Move rtsp_port extern declaration to demuxer.h.
diego
parents: 31281
diff changeset
30 #include "demuxer.h"
6910
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
31 #include "demux_rtp.h"
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
32 #include "stheader.h"
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
33 }
9250
bb490ffeebf5 Restruct by Ross Finlayson <finlayson@live.com>
bertrand
parents: 8987
diff changeset
34 #include "demux_rtp_internal.h"
6910
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
35
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
36 #include "BasicUsageEnvironment.hh"
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
37 #include "liveMedia.hh"
9565
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
38 #include "GroupsockHelper.hh"
6910
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
39 #include <unistd.h>
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
40
9565
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
41 // A data structure representing input data for each stream:
6910
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
42 class ReadBufferQueue {
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
43 public:
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
44 ReadBufferQueue(MediaSubsession* subsession, demuxer_t* demuxer,
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
45 char const* tag);
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
46 virtual ~ReadBufferQueue();
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
47
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
48 FramedSource* readSource() const { return fReadSource; }
7534
0a936b10b3d8 passthrough timestamps to demuxer
arpi
parents: 7143
diff changeset
49 RTPSource* rtpSource() const { return fRTPSource; }
6910
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
50 demuxer_t* ourDemuxer() const { return fOurDemuxer; }
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
51 char const* tag() const { return fTag; }
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
52
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
53 char blockingFlag; // used to implement synchronous reads
9565
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
54
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
55 // For A/V synchronization:
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
56 Boolean prevPacketWasSynchronized;
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
57 float prevPacketPTS;
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
58 ReadBufferQueue** otherQueue;
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
59
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
60 // The 'queue' actually consists of just a single "demux_packet_t"
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
61 // (because the underlying OS does the actual queueing/buffering):
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
62 demux_packet_t* dp;
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
63
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
64 // However, we sometimes inspect buffers before delivering them.
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
65 // For this, we maintain a queue of pending buffers:
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
66 void savePendingBuffer(demux_packet_t* dp);
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
67 demux_packet_t* getPendingBuffer();
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
68
22852
d7f4da5e9ee4 Support h264 over rtsp
cehoyos
parents: 22851
diff changeset
69 // For H264 over rtsp using AVParser, the next packet has to be saved
d7f4da5e9ee4 Support h264 over rtsp
cehoyos
parents: 22851
diff changeset
70 demux_packet_t* nextpacket;
d7f4da5e9ee4 Support h264 over rtsp
cehoyos
parents: 22851
diff changeset
71
6910
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
72 private:
9565
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
73 demux_packet_t* pendingDPHead;
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
74 demux_packet_t* pendingDPTail;
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
75
6910
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
76 FramedSource* fReadSource;
7534
0a936b10b3d8 passthrough timestamps to demuxer
arpi
parents: 7143
diff changeset
77 RTPSource* fRTPSource;
6910
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
78 demuxer_t* fOurDemuxer;
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
79 char const* fTag; // used for debugging
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
80 };
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
81
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
82 // A structure of RTP-specific state, kept so that we can cleanly
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
83 // reclaim it:
32086
048d9fffd740 Remove pointless typedef keyword from struct RTPState declaration; fixes:
diego
parents: 31483
diff changeset
84 struct RTPState {
6910
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
85 char const* sdpDescription;
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
86 RTSPClient* rtspClient;
10054
1342075f81f0 Added SIP (IP telephony) client support. (This was already supported in the
rsf
parents: 9911
diff changeset
87 SIPClient* sipClient;
6910
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
88 MediaSession* mediaSession;
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
89 ReadBufferQueue* audioBufferQueue;
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
90 ReadBufferQueue* videoBufferQueue;
9250
bb490ffeebf5 Restruct by Ross Finlayson <finlayson@live.com>
bertrand
parents: 8987
diff changeset
91 unsigned flags;
7534
0a936b10b3d8 passthrough timestamps to demuxer
arpi
parents: 7143
diff changeset
92 struct timeval firstSyncTime;
6910
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
93 };
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
94
9904
afbbf103a662 Access-controlled RTSP sessions can now be played, if the user uses the
rsf
parents: 9786
diff changeset
95 extern "C" char* network_username;
afbbf103a662 Access-controlled RTSP sessions can now be played, if the user uses the
rsf
parents: 9786
diff changeset
96 extern "C" char* network_password;
10054
1342075f81f0 Added SIP (IP telephony) client support. (This was already supported in the
rsf
parents: 9911
diff changeset
97 static char* openURL_rtsp(RTSPClient* client, char const* url) {
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29238
diff changeset
98 // If we were given a user name (and optional password), then use them:
10054
1342075f81f0 Added SIP (IP telephony) client support. (This was already supported in the
rsf
parents: 9911
diff changeset
99 if (network_username != NULL) {
1342075f81f0 Added SIP (IP telephony) client support. (This was already supported in the
rsf
parents: 9911
diff changeset
100 char const* password = network_password == NULL ? "" : network_password;
1342075f81f0 Added SIP (IP telephony) client support. (This was already supported in the
rsf
parents: 9911
diff changeset
101 return client->describeWithPassword(url, network_username, password);
1342075f81f0 Added SIP (IP telephony) client support. (This was already supported in the
rsf
parents: 9911
diff changeset
102 } else {
1342075f81f0 Added SIP (IP telephony) client support. (This was already supported in the
rsf
parents: 9911
diff changeset
103 return client->describeURL(url);
1342075f81f0 Added SIP (IP telephony) client support. (This was already supported in the
rsf
parents: 9911
diff changeset
104 }
1342075f81f0 Added SIP (IP telephony) client support. (This was already supported in the
rsf
parents: 9911
diff changeset
105 }
1342075f81f0 Added SIP (IP telephony) client support. (This was already supported in the
rsf
parents: 9911
diff changeset
106
1342075f81f0 Added SIP (IP telephony) client support. (This was already supported in the
rsf
parents: 9911
diff changeset
107 static char* openURL_sip(SIPClient* client, char const* url) {
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29238
diff changeset
108 // If we were given a user name (and optional password), then use them:
10054
1342075f81f0 Added SIP (IP telephony) client support. (This was already supported in the
rsf
parents: 9911
diff changeset
109 if (network_username != NULL) {
1342075f81f0 Added SIP (IP telephony) client support. (This was already supported in the
rsf
parents: 9911
diff changeset
110 char const* password = network_password == NULL ? "" : network_password;
1342075f81f0 Added SIP (IP telephony) client support. (This was already supported in the
rsf
parents: 9911
diff changeset
111 return client->inviteWithPassword(url, network_username, password);
1342075f81f0 Added SIP (IP telephony) client support. (This was already supported in the
rsf
parents: 9911
diff changeset
112 } else {
1342075f81f0 Added SIP (IP telephony) client support. (This was already supported in the
rsf
parents: 9911
diff changeset
113 return client->invite(url);
1342075f81f0 Added SIP (IP telephony) client support. (This was already supported in the
rsf
parents: 9911
diff changeset
114 }
1342075f81f0 Added SIP (IP telephony) client support. (This was already supported in the
rsf
parents: 9911
diff changeset
115 }
1342075f81f0 Added SIP (IP telephony) client support. (This was already supported in the
rsf
parents: 9911
diff changeset
116
32208
4cd07921bec2 Rename preprocessor directives: CONFIG_LIBAVCODEC --> CONFIG_FFMPEG
diego
parents: 32086
diff changeset
117 #ifdef CONFIG_FFMPEG
29453
3a154fb8f85c Make *avcctx AVCodecContext instead of void.
cehoyos
parents: 29451
diff changeset
118 extern AVCodecContext *avcctx;
3a154fb8f85c Make *avcctx AVCodecContext instead of void.
cehoyos
parents: 29451
diff changeset
119 #endif
7664
b10d6345f2a6 Added support for RTSP stream over TCP.
bertrand
parents: 7534
diff changeset
120
12521
27ed4672c619 Added "audio_id", "video_id", "dvdsub_id" to the call to "demux_open()".
rsf
parents: 12043
diff changeset
121 extern "C" int audio_id, video_id, dvdsub_id;
11984
94e1953fbe8e Added support for multiplexed audio+video RTP streams.
rsf
parents: 11755
diff changeset
122 extern "C" demuxer_t* demux_open_rtp(demuxer_t* demuxer) {
12043
8d45dcfc016f Fixed a bug that was accidentally introduced by the addition of MPEG Transport
rsf
parents: 12007
diff changeset
123 Boolean success = False;
6910
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
124 do {
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
125 TaskScheduler* scheduler = BasicTaskScheduler::createNew();
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
126 if (scheduler == NULL) break;
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
127 UsageEnvironment* env = BasicUsageEnvironment::createNew(*scheduler);
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
128 if (env == NULL) break;
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
129
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
130 RTSPClient* rtspClient = NULL;
10054
1342075f81f0 Added SIP (IP telephony) client support. (This was already supported in the
rsf
parents: 9911
diff changeset
131 SIPClient* sipClient = NULL;
6910
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
132
9457
ea1c0a4520bf Repairing breakage to RTP streaming. Patch by Ross Finlayson <finlayson@live.com>
bertrand
parents: 9370
diff changeset
133 if (demuxer == NULL || demuxer->stream == NULL) break; // shouldn't happen
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29238
diff changeset
134 demuxer->stream->eof = 0; // just in case
9457
ea1c0a4520bf Repairing breakage to RTP streaming. Patch by Ross Finlayson <finlayson@live.com>
bertrand
parents: 9370
diff changeset
135
6910
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
136 // Look at the stream's 'priv' field to see if we were initiated
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
137 // via a SDP description:
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
138 char* sdpDescription = (char*)(demuxer->stream->priv);
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
139 if (sdpDescription == NULL) {
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
140 // We weren't given a SDP description directly, so assume that
10054
1342075f81f0 Added SIP (IP telephony) client support. (This was already supported in the
rsf
parents: 9911
diff changeset
141 // we were given a RTSP or SIP URL:
1342075f81f0 Added SIP (IP telephony) client support. (This was already supported in the
rsf
parents: 9911
diff changeset
142 char const* protocol = demuxer->stream->streaming_ctrl->url->protocol;
6910
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
143 char const* url = demuxer->stream->streaming_ctrl->url->url;
10054
1342075f81f0 Added SIP (IP telephony) client support. (This was already supported in the
rsf
parents: 9911
diff changeset
144 if (strcmp(protocol, "rtsp") == 0) {
31281
cc43f6d8bb6b Support RTSP/RTP over HTTP via LIVE555.
cehoyos
parents: 30644
diff changeset
145 if (rtsp_transport_http == 1) {
cc43f6d8bb6b Support RTSP/RTP over HTTP via LIVE555.
cehoyos
parents: 30644
diff changeset
146 rtsp_transport_http = demuxer->stream->streaming_ctrl->url->port;
cc43f6d8bb6b Support RTSP/RTP over HTTP via LIVE555.
cehoyos
parents: 30644
diff changeset
147 rtsp_transport_tcp = 1;
cc43f6d8bb6b Support RTSP/RTP over HTTP via LIVE555.
cehoyos
parents: 30644
diff changeset
148 }
cc43f6d8bb6b Support RTSP/RTP over HTTP via LIVE555.
cehoyos
parents: 30644
diff changeset
149 rtspClient = RTSPClient::createNew(*env, verbose, "MPlayer", rtsp_transport_http);
10054
1342075f81f0 Added SIP (IP telephony) client support. (This was already supported in the
rsf
parents: 9911
diff changeset
150 if (rtspClient == NULL) {
1342075f81f0 Added SIP (IP telephony) client support. (This was already supported in the
rsf
parents: 9911
diff changeset
151 fprintf(stderr, "Failed to create RTSP client: %s\n",
1342075f81f0 Added SIP (IP telephony) client support. (This was already supported in the
rsf
parents: 9911
diff changeset
152 env->getResultMsg());
1342075f81f0 Added SIP (IP telephony) client support. (This was already supported in the
rsf
parents: 9911
diff changeset
153 break;
1342075f81f0 Added SIP (IP telephony) client support. (This was already supported in the
rsf
parents: 9911
diff changeset
154 }
1342075f81f0 Added SIP (IP telephony) client support. (This was already supported in the
rsf
parents: 9911
diff changeset
155 sdpDescription = openURL_rtsp(rtspClient, url);
1342075f81f0 Added SIP (IP telephony) client support. (This was already supported in the
rsf
parents: 9911
diff changeset
156 } else { // SIP
1342075f81f0 Added SIP (IP telephony) client support. (This was already supported in the
rsf
parents: 9911
diff changeset
157 unsigned char desiredAudioType = 0; // PCMU (use 3 for GSM)
1342075f81f0 Added SIP (IP telephony) client support. (This was already supported in the
rsf
parents: 9911
diff changeset
158 sipClient = SIPClient::createNew(*env, desiredAudioType, NULL,
1342075f81f0 Added SIP (IP telephony) client support. (This was already supported in the
rsf
parents: 9911
diff changeset
159 verbose, "MPlayer");
1342075f81f0 Added SIP (IP telephony) client support. (This was already supported in the
rsf
parents: 9911
diff changeset
160 if (sipClient == NULL) {
1342075f81f0 Added SIP (IP telephony) client support. (This was already supported in the
rsf
parents: 9911
diff changeset
161 fprintf(stderr, "Failed to create SIP client: %s\n",
1342075f81f0 Added SIP (IP telephony) client support. (This was already supported in the
rsf
parents: 9911
diff changeset
162 env->getResultMsg());
1342075f81f0 Added SIP (IP telephony) client support. (This was already supported in the
rsf
parents: 9911
diff changeset
163 break;
1342075f81f0 Added SIP (IP telephony) client support. (This was already supported in the
rsf
parents: 9911
diff changeset
164 }
1342075f81f0 Added SIP (IP telephony) client support. (This was already supported in the
rsf
parents: 9911
diff changeset
165 sipClient->setClientStartPortNum(8000);
1342075f81f0 Added SIP (IP telephony) client support. (This was already supported in the
rsf
parents: 9911
diff changeset
166 sdpDescription = openURL_sip(sipClient, url);
6910
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
167 }
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
168
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
169 if (sdpDescription == NULL) {
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
170 fprintf(stderr, "Failed to get a SDP description from URL \"%s\": %s\n",
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
171 url, env->getResultMsg());
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
172 break;
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
173 }
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
174 }
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
175
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
176 // Now that we have a SDP description, create a MediaSession from it:
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
177 MediaSession* mediaSession = MediaSession::createNew(*env, sdpDescription);
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
178 if (mediaSession == NULL) break;
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
179
9250
bb490ffeebf5 Restruct by Ross Finlayson <finlayson@live.com>
bertrand
parents: 8987
diff changeset
180
bb490ffeebf5 Restruct by Ross Finlayson <finlayson@live.com>
bertrand
parents: 8987
diff changeset
181 // Create a 'RTPState' structure containing the state that we just created,
bb490ffeebf5 Restruct by Ross Finlayson <finlayson@live.com>
bertrand
parents: 8987
diff changeset
182 // and store it in the demuxer's 'priv' field, for future reference:
bb490ffeebf5 Restruct by Ross Finlayson <finlayson@live.com>
bertrand
parents: 8987
diff changeset
183 RTPState* rtpState = new RTPState;
bb490ffeebf5 Restruct by Ross Finlayson <finlayson@live.com>
bertrand
parents: 8987
diff changeset
184 rtpState->sdpDescription = sdpDescription;
bb490ffeebf5 Restruct by Ross Finlayson <finlayson@live.com>
bertrand
parents: 8987
diff changeset
185 rtpState->rtspClient = rtspClient;
10054
1342075f81f0 Added SIP (IP telephony) client support. (This was already supported in the
rsf
parents: 9911
diff changeset
186 rtpState->sipClient = sipClient;
9250
bb490ffeebf5 Restruct by Ross Finlayson <finlayson@live.com>
bertrand
parents: 8987
diff changeset
187 rtpState->mediaSession = mediaSession;
9370
88bd19564b64 Motion-JPEG RTP streams can now be played. Some MPEG-4 ES video RTP
arpi
parents: 9250
diff changeset
188 rtpState->audioBufferQueue = rtpState->videoBufferQueue = NULL;
9565
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
189 rtpState->flags = 0;
9250
bb490ffeebf5 Restruct by Ross Finlayson <finlayson@live.com>
bertrand
parents: 8987
diff changeset
190 rtpState->firstSyncTime.tv_sec = rtpState->firstSyncTime.tv_usec = 0;
bb490ffeebf5 Restruct by Ross Finlayson <finlayson@live.com>
bertrand
parents: 8987
diff changeset
191 demuxer->priv = rtpState;
bb490ffeebf5 Restruct by Ross Finlayson <finlayson@live.com>
bertrand
parents: 8987
diff changeset
192
25237
963cd0542cec Fix playback of streams with more than one video track (only one supported).
cehoyos
parents: 24598
diff changeset
193 int audiofound = 0, videofound = 0;
6910
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
194 // Create RTP receivers (sources) for each subsession:
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
195 MediaSubsessionIterator iter(*mediaSession);
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
196 MediaSubsession* subsession;
9565
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
197 unsigned desiredReceiveBufferSize;
6910
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
198 while ((subsession = iter.next()) != NULL) {
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
199 // Ignore any subsession that's not audio or video:
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
200 if (strcmp(subsession->mediumName(), "audio") == 0) {
24598
5411b440eb24 Fix playback of streams with more than one audio track (only one supported).
cehoyos
parents: 23569
diff changeset
201 if (audiofound) {
5411b440eb24 Fix playback of streams with more than one audio track (only one supported).
cehoyos
parents: 23569
diff changeset
202 fprintf(stderr, "Additional subsession \"audio/%s\" skipped\n", subsession->codecName());
5411b440eb24 Fix playback of streams with more than one audio track (only one supported).
cehoyos
parents: 23569
diff changeset
203 continue;
5411b440eb24 Fix playback of streams with more than one audio track (only one supported).
cehoyos
parents: 23569
diff changeset
204 }
9565
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
205 desiredReceiveBufferSize = 100000;
6910
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
206 } else if (strcmp(subsession->mediumName(), "video") == 0) {
25237
963cd0542cec Fix playback of streams with more than one video track (only one supported).
cehoyos
parents: 24598
diff changeset
207 if (videofound) {
963cd0542cec Fix playback of streams with more than one video track (only one supported).
cehoyos
parents: 24598
diff changeset
208 fprintf(stderr, "Additional subsession \"video/%s\" skipped\n", subsession->codecName());
963cd0542cec Fix playback of streams with more than one video track (only one supported).
cehoyos
parents: 24598
diff changeset
209 continue;
963cd0542cec Fix playback of streams with more than one video track (only one supported).
cehoyos
parents: 24598
diff changeset
210 }
9565
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
211 desiredReceiveBufferSize = 2000000;
6910
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
212 } else {
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
213 continue;
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
214 }
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
215
17650
d6e575c86bb8 Allows the LIVE555 library to forces the client's port to be used
bertrand
parents: 16572
diff changeset
216 if (rtsp_port)
d6e575c86bb8 Allows the LIVE555 library to forces the client's port to be used
bertrand
parents: 16572
diff changeset
217 subsession->setClientPortNum (rtsp_port);
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29238
diff changeset
218
6910
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
219 if (!subsession->initiate()) {
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
220 fprintf(stderr, "Failed to initiate \"%s/%s\" RTP subsession: %s\n", subsession->mediumName(), subsession->codecName(), env->getResultMsg());
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
221 } else {
17650
d6e575c86bb8 Allows the LIVE555 library to forces the client's port to be used
bertrand
parents: 16572
diff changeset
222 fprintf(stderr, "Initiated \"%s/%s\" RTP subsession on port %d\n", subsession->mediumName(), subsession->codecName(), subsession->clientPortNum());
6910
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
223
9565
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
224 // Set the OS's socket receive buffer sufficiently large to avoid
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
225 // incoming packets getting dropped between successive reads from this
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
226 // subsession's demuxer. Depending on the bitrate(s) that you expect,
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
227 // you may wish to tweak the "desiredReceiveBufferSize" values above.
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
228 int rtpSocketNum = subsession->rtpSource()->RTPgs()->socketNum();
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
229 int receiveBufferSize
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
230 = increaseReceiveBufferTo(*env, rtpSocketNum,
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
231 desiredReceiveBufferSize);
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
232 if (verbose > 0) {
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
233 fprintf(stderr, "Increased %s socket receive buffer to %d bytes \n",
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
234 subsession->mediumName(), receiveBufferSize);
6910
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
235 }
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
236
9565
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
237 if (rtspClient != NULL) {
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
238 // Issue a RTSP "SETUP" command on the chosen subsession:
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
239 if (!rtspClient->setupMediaSubsession(*subsession, False,
29280
99063eff7512 Unify over rtsp_transport_tcp as var to hold the -rtsp-stream-over-tcp flag and make sure libnemesi only builds are fine
lu_zero
parents: 29263
diff changeset
240 rtsp_transport_tcp)) break;
24598
5411b440eb24 Fix playback of streams with more than one audio track (only one supported).
cehoyos
parents: 23569
diff changeset
241 if (!strcmp(subsession->mediumName(), "audio"))
5411b440eb24 Fix playback of streams with more than one audio track (only one supported).
cehoyos
parents: 23569
diff changeset
242 audiofound = 1;
25237
963cd0542cec Fix playback of streams with more than one video track (only one supported).
cehoyos
parents: 24598
diff changeset
243 if (!strcmp(subsession->mediumName(), "video"))
963cd0542cec Fix playback of streams with more than one video track (only one supported).
cehoyos
parents: 24598
diff changeset
244 videofound = 1;
6910
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
245 }
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
246 }
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
247 }
9565
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
248
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
249 if (rtspClient != NULL) {
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
250 // Issue a RTSP aggregate "PLAY" command on the whole session:
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
251 if (!rtspClient->playMediaSession(*mediaSession)) break;
10054
1342075f81f0 Added SIP (IP telephony) client support. (This was already supported in the
rsf
parents: 9911
diff changeset
252 } else if (sipClient != NULL) {
1342075f81f0 Added SIP (IP telephony) client support. (This was already supported in the
rsf
parents: 9911
diff changeset
253 sipClient->sendACK(); // to start the stream flowing
9565
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
254 }
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
255
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
256 // Now that the session is ready to be read, do additional
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
257 // MPlayer codec-specific initialization on each subsession:
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
258 iter.reset();
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
259 while ((subsession = iter.next()) != NULL) {
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
260 if (subsession->readSource() == NULL) continue; // not reading this
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
261
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
262 unsigned flags = 0;
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
263 if (strcmp(subsession->mediumName(), "audio") == 0) {
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
264 rtpState->audioBufferQueue
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
265 = new ReadBufferQueue(subsession, demuxer, "audio");
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
266 rtpState->audioBufferQueue->otherQueue = &(rtpState->videoBufferQueue);
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
267 rtpCodecInitialize_audio(demuxer, subsession, flags);
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
268 } else if (strcmp(subsession->mediumName(), "video") == 0) {
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
269 rtpState->videoBufferQueue
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
270 = new ReadBufferQueue(subsession, demuxer, "video");
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
271 rtpState->videoBufferQueue->otherQueue = &(rtpState->audioBufferQueue);
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
272 rtpCodecInitialize_video(demuxer, subsession, flags);
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
273 }
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
274 rtpState->flags |= flags;
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
275 }
12043
8d45dcfc016f Fixed a bug that was accidentally introduced by the addition of MPEG Transport
rsf
parents: 12007
diff changeset
276 success = True;
6910
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
277 } while (0);
12043
8d45dcfc016f Fixed a bug that was accidentally introduced by the addition of MPEG Transport
rsf
parents: 12007
diff changeset
278 if (!success) return NULL; // an error occurred
11984
94e1953fbe8e Added support for multiplexed audio+video RTP streams.
rsf
parents: 11755
diff changeset
279
94e1953fbe8e Added support for multiplexed audio+video RTP streams.
rsf
parents: 11755
diff changeset
280 // Hack: If audio and video are demuxed together on a single RTP stream,
94e1953fbe8e Added support for multiplexed audio+video RTP streams.
rsf
parents: 11755
diff changeset
281 // then create a new "demuxer_t" structure to allow the higher-level
94e1953fbe8e Added support for multiplexed audio+video RTP streams.
rsf
parents: 11755
diff changeset
282 // code to recognize this:
94e1953fbe8e Added support for multiplexed audio+video RTP streams.
rsf
parents: 11755
diff changeset
283 if (demux_is_multiplexed_rtp_stream(demuxer)) {
94e1953fbe8e Added support for multiplexed audio+video RTP streams.
rsf
parents: 11755
diff changeset
284 stream_t* s = new_ds_stream(demuxer->video);
12521
27ed4672c619 Added "audio_id", "video_id", "dvdsub_id" to the call to "demux_open()".
rsf
parents: 12043
diff changeset
285 demuxer_t* od = demux_open(s, DEMUXER_TYPE_UNKNOWN,
27ed4672c619 Added "audio_id", "video_id", "dvdsub_id" to the call to "demux_open()".
rsf
parents: 12043
diff changeset
286 audio_id, video_id, dvdsub_id, NULL);
11984
94e1953fbe8e Added support for multiplexed audio+video RTP streams.
rsf
parents: 11755
diff changeset
287 demuxer = new_demuxers_demuxer(od, od, od);
94e1953fbe8e Added support for multiplexed audio+video RTP streams.
rsf
parents: 11755
diff changeset
288 }
94e1953fbe8e Added support for multiplexed audio+video RTP streams.
rsf
parents: 11755
diff changeset
289
94e1953fbe8e Added support for multiplexed audio+video RTP streams.
rsf
parents: 11755
diff changeset
290 return demuxer;
6910
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
291 }
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
292
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
293 extern "C" int demux_is_mpeg_rtp_stream(demuxer_t* demuxer) {
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
294 // Get the RTP state that was stored in the demuxer's 'priv' field:
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
295 RTPState* rtpState = (RTPState*)(demuxer->priv);
9250
bb490ffeebf5 Restruct by Ross Finlayson <finlayson@live.com>
bertrand
parents: 8987
diff changeset
296
9565
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
297 return (rtpState->flags&RTPSTATE_IS_MPEG12_VIDEO) != 0;
6910
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
298 }
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
299
10477
c34185f47b62 Added support for checking whether a RTP demuxer contains combined audio_video data.
rsf
parents: 10054
diff changeset
300 extern "C" int demux_is_multiplexed_rtp_stream(demuxer_t* demuxer) {
c34185f47b62 Added support for checking whether a RTP demuxer contains combined audio_video data.
rsf
parents: 10054
diff changeset
301 // Get the RTP state that was stored in the demuxer's 'priv' field:
c34185f47b62 Added support for checking whether a RTP demuxer contains combined audio_video data.
rsf
parents: 10054
diff changeset
302 RTPState* rtpState = (RTPState*)(demuxer->priv);
c34185f47b62 Added support for checking whether a RTP demuxer contains combined audio_video data.
rsf
parents: 10054
diff changeset
303
c34185f47b62 Added support for checking whether a RTP demuxer contains combined audio_video data.
rsf
parents: 10054
diff changeset
304 return (rtpState->flags&RTPSTATE_IS_MULTIPLEXED) != 0;
c34185f47b62 Added support for checking whether a RTP demuxer contains combined audio_video data.
rsf
parents: 10054
diff changeset
305 }
c34185f47b62 Added support for checking whether a RTP demuxer contains combined audio_video data.
rsf
parents: 10054
diff changeset
306
9565
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
307 static demux_packet_t* getBuffer(demuxer_t* demuxer, demux_stream_t* ds,
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
308 Boolean mustGetNewData,
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
309 float& ptsBehind); // forward
6910
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
310
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
311 extern "C" int demux_rtp_fill_buffer(demuxer_t* demuxer, demux_stream_t* ds) {
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
312 // Get a filled-in "demux_packet" from the RTP source, and deliver it.
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
313 // Note that this is called as a synchronous read operation, so it needs
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
314 // to block in the (hopefully infrequent) case where no packet is
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
315 // immediately available.
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
316
9565
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
317 while (1) {
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
318 float ptsBehind;
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
319 demux_packet_t* dp = getBuffer(demuxer, ds, False, ptsBehind); // blocking
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
320 if (dp == NULL) return 0;
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
321
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
322 if (demuxer->stream->eof) return 0; // source stream has closed down
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29238
diff changeset
323
9565
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
324 // Before using this packet, check to make sure that its presentation
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
325 // time is not far behind the other stream (if any). If it is,
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
326 // then we discard this packet, and get another instead. (The rest of
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
327 // MPlayer doesn't always do a good job of synchronizing when the
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
328 // audio and video streams get this far apart.)
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
329 // (We don't do this when streaming over TCP, because then the audio and
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
330 // video streams are interleaved.)
12007
b41cc72bb8ad We now allow for the possibility of the RTCP audio/video synchronization being
rsf
parents: 11984
diff changeset
331 // (Also, if the stream is *excessively* far behind, then we allow
b41cc72bb8ad We now allow for the possibility of the RTCP audio/video synchronization being
rsf
parents: 11984
diff changeset
332 // the packet, because in this case it probably means that there was
b41cc72bb8ad We now allow for the possibility of the RTCP audio/video synchronization being
rsf
parents: 11984
diff changeset
333 // an error in the source's timestamp synchronization.)
9565
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
334 const float ptsBehindThreshold = 1.0; // seconds
12007
b41cc72bb8ad We now allow for the possibility of the RTCP audio/video synchronization being
rsf
parents: 11984
diff changeset
335 const float ptsBehindLimit = 60.0; // seconds
b41cc72bb8ad We now allow for the possibility of the RTCP audio/video synchronization being
rsf
parents: 11984
diff changeset
336 if (ptsBehind < ptsBehindThreshold ||
b41cc72bb8ad We now allow for the possibility of the RTCP audio/video synchronization being
rsf
parents: 11984
diff changeset
337 ptsBehind > ptsBehindLimit ||
29280
99063eff7512 Unify over rtsp_transport_tcp as var to hold the -rtsp-stream-over-tcp flag and make sure libnemesi only builds are fine
lu_zero
parents: 29263
diff changeset
338 rtsp_transport_tcp) { // packet's OK
9565
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
339 ds_add_packet(ds, dp);
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
340 break;
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
341 }
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29238
diff changeset
342
9786
177a3393057c Added some optional debugging printfs (disabled by default)
rsf
parents: 9565
diff changeset
343 #ifdef DEBUG_PRINT_DISCARDED_PACKETS
177a3393057c Added some optional debugging printfs (disabled by default)
rsf
parents: 9565
diff changeset
344 RTPState* rtpState = (RTPState*)(demuxer->priv);
177a3393057c Added some optional debugging printfs (disabled by default)
rsf
parents: 9565
diff changeset
345 ReadBufferQueue* bufferQueue = ds == demuxer->video ? rtpState->videoBufferQueue : rtpState->audioBufferQueue;
177a3393057c Added some optional debugging printfs (disabled by default)
rsf
parents: 9565
diff changeset
346 fprintf(stderr, "Discarding %s packet (%fs behind)\n", bufferQueue->tag(), ptsBehind);
177a3393057c Added some optional debugging printfs (disabled by default)
rsf
parents: 9565
diff changeset
347 #endif
9565
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
348 free_demux_packet(dp); // give back this packet, and get another one
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
349 }
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
350
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
351 return 1;
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
352 }
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
353
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
354 Boolean awaitRTPPacket(demuxer_t* demuxer, demux_stream_t* ds,
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
355 unsigned char*& packetData, unsigned& packetDataLen,
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
356 float& pts) {
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
357 // Similar to "demux_rtp_fill_buffer()", except that the "demux_packet"
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
358 // is not delivered to the "demux_stream".
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
359 float ptsBehind;
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
360 demux_packet_t* dp = getBuffer(demuxer, ds, True, ptsBehind); // blocking
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
361 if (dp == NULL) return False;
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
362
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
363 packetData = dp->buffer;
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
364 packetDataLen = dp->len;
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
365 pts = dp->pts;
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
366
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
367 return True;
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
368 }
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
369
10054
1342075f81f0 Added SIP (IP telephony) client support. (This was already supported in the
rsf
parents: 9911
diff changeset
370 static void teardownRTSPorSIPSession(RTPState* rtpState); // forward
6910
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
371
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
372 extern "C" void demux_close_rtp(demuxer_t* demuxer) {
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
373 // Reclaim all RTP-related state:
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
374
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
375 // Get the RTP state that was stored in the demuxer's 'priv' field:
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
376 RTPState* rtpState = (RTPState*)(demuxer->priv);
7143
fdfc10c2e2d2 - Tell the RTSP client code to use the string "mplayer" in RTSP
arpi
parents: 7008
diff changeset
377 if (rtpState == NULL) return;
9565
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
378
10054
1342075f81f0 Added SIP (IP telephony) client support. (This was already supported in the
rsf
parents: 9911
diff changeset
379 teardownRTSPorSIPSession(rtpState);
9565
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
380
6910
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
381 UsageEnvironment* env = NULL;
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
382 TaskScheduler* scheduler = NULL;
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
383 if (rtpState->mediaSession != NULL) {
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
384 env = &(rtpState->mediaSession->envir());
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
385 scheduler = &(env->taskScheduler());
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
386 }
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
387 Medium::close(rtpState->mediaSession);
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
388 Medium::close(rtpState->rtspClient);
10054
1342075f81f0 Added SIP (IP telephony) client support. (This was already supported in the
rsf
parents: 9911
diff changeset
389 Medium::close(rtpState->sipClient);
6910
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
390 delete rtpState->audioBufferQueue;
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
391 delete rtpState->videoBufferQueue;
29585
a17d4f8040f1 free(), delete and delete[] are all different and can't just be used at random,
reimar
parents: 29460
diff changeset
392 delete[] rtpState->sdpDescription;
6910
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
393 delete rtpState;
32208
4cd07921bec2 Rename preprocessor directives: CONFIG_LIBAVCODEC --> CONFIG_FFMPEG
diego
parents: 32086
diff changeset
394 #ifdef CONFIG_FFMPEG
29460
d9be78936c0c Fix possible double-free.
cehoyos
parents: 29453
diff changeset
395 av_freep(&avcctx);
29451
6aca83f5ba73 Fix a crash when playing some H264 over rtsp streams: Do pass an
cehoyos
parents: 29280
diff changeset
396 #endif
6910
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
397
12866
332f24a1dd5c Updated to conform to a small change in the LIVE.COM API.
rsf
parents: 12531
diff changeset
398 env->reclaim(); delete scheduler;
6910
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
399 }
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
400
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
401 ////////// Extra routines that help implement the above interface functions:
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
402
27776
ef0b0f9291a2 increase the max RTP packet size to 5MB as modern Elphel
attila
parents: 27341
diff changeset
403 #define MAX_RTP_FRAME_SIZE 5000000
9565
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
404 // >= the largest conceivable frame composed from one or more RTP packets
6910
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
405
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
406 static void afterReading(void* clientData, unsigned frameSize,
11755
a79a318585ce Changed to conform to recent changes to the "LIVE.COM Streaming Media" code.
rsf
parents: 10937
diff changeset
407 unsigned /*numTruncatedBytes*/,
a79a318585ce Changed to conform to recent changes to the "LIVE.COM Streaming Media" code.
rsf
parents: 10937
diff changeset
408 struct timeval presentationTime,
a79a318585ce Changed to conform to recent changes to the "LIVE.COM Streaming Media" code.
rsf
parents: 10937
diff changeset
409 unsigned /*durationInMicroseconds*/) {
22463
979b2aa16e80 support for AMR; it works inserting in the first byte of the demux_packet
nicodvb
parents: 22454
diff changeset
410 int headersize = 0;
9565
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
411 if (frameSize >= MAX_RTP_FRAME_SIZE) {
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
412 fprintf(stderr, "Saw an input frame too large (>=%d). Increase MAX_RTP_FRAME_SIZE in \"demux_rtp.cpp\".\n",
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
413 MAX_RTP_FRAME_SIZE);
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
414 }
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
415 ReadBufferQueue* bufferQueue = (ReadBufferQueue*)clientData;
6910
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
416 demuxer_t* demuxer = bufferQueue->ourDemuxer();
7534
0a936b10b3d8 passthrough timestamps to demuxer
arpi
parents: 7143
diff changeset
417 RTPState* rtpState = (RTPState*)(demuxer->priv);
6910
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
418
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
419 if (frameSize > 0) demuxer->stream->eof = 0;
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
420
22851
e878a71cb27f Cosmetics: Move variable declaration and initialization up.
cehoyos
parents: 22759
diff changeset
421 demux_packet_t* dp = bufferQueue->dp;
e878a71cb27f Cosmetics: Move variable declaration and initialization up.
cehoyos
parents: 22759
diff changeset
422
22463
979b2aa16e80 support for AMR; it works inserting in the first byte of the demux_packet
nicodvb
parents: 22454
diff changeset
423 if (bufferQueue->readSource()->isAMRAudioSource())
979b2aa16e80 support for AMR; it works inserting in the first byte of the demux_packet
nicodvb
parents: 22454
diff changeset
424 headersize = 1;
22852
d7f4da5e9ee4 Support h264 over rtsp
cehoyos
parents: 22851
diff changeset
425 else if (bufferQueue == rtpState->videoBufferQueue &&
d7f4da5e9ee4 Support h264 over rtsp
cehoyos
parents: 22851
diff changeset
426 ((sh_video_t*)demuxer->video->sh)->format == mmioFOURCC('H','2','6','4')) {
d7f4da5e9ee4 Support h264 over rtsp
cehoyos
parents: 22851
diff changeset
427 dp->buffer[0]=0x00;
d7f4da5e9ee4 Support h264 over rtsp
cehoyos
parents: 22851
diff changeset
428 dp->buffer[1]=0x00;
d7f4da5e9ee4 Support h264 over rtsp
cehoyos
parents: 22851
diff changeset
429 dp->buffer[2]=0x01;
d7f4da5e9ee4 Support h264 over rtsp
cehoyos
parents: 22851
diff changeset
430 headersize = 3;
d7f4da5e9ee4 Support h264 over rtsp
cehoyos
parents: 22851
diff changeset
431 }
22463
979b2aa16e80 support for AMR; it works inserting in the first byte of the demux_packet
nicodvb
parents: 22454
diff changeset
432
979b2aa16e80 support for AMR; it works inserting in the first byte of the demux_packet
nicodvb
parents: 22454
diff changeset
433 resize_demux_packet(dp, frameSize + headersize);
7534
0a936b10b3d8 passthrough timestamps to demuxer
arpi
parents: 7143
diff changeset
434
0a936b10b3d8 passthrough timestamps to demuxer
arpi
parents: 7143
diff changeset
435 // Set the packet's presentation time stamp, depending on whether or
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29238
diff changeset
436 // not our RTP source's timestamps have been synchronized yet:
9565
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
437 Boolean hasBeenSynchronized
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
438 = bufferQueue->rtpSource()->hasBeenSynchronizedUsingRTCP();
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
439 if (hasBeenSynchronized) {
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
440 if (verbose > 0 && !bufferQueue->prevPacketWasSynchronized) {
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
441 fprintf(stderr, "%s stream has been synchronized using RTCP \n",
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
442 bufferQueue->tag());
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
443 }
7534
0a936b10b3d8 passthrough timestamps to demuxer
arpi
parents: 7143
diff changeset
444
9565
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
445 struct timeval* fst = &(rtpState->firstSyncTime); // abbrev
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
446 if (fst->tv_sec == 0 && fst->tv_usec == 0) {
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
447 *fst = presentationTime;
7534
0a936b10b3d8 passthrough timestamps to demuxer
arpi
parents: 7143
diff changeset
448 }
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29238
diff changeset
449
9565
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
450 // For the "pts" field, use the time differential from the first
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
451 // synchronized time, rather than absolute time, in order to avoid
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
452 // round-off errors when converting to a float:
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
453 dp->pts = presentationTime.tv_sec - fst->tv_sec
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
454 + (presentationTime.tv_usec - fst->tv_usec)/1000000.0;
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
455 bufferQueue->prevPacketPTS = dp->pts;
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
456 } else {
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
457 if (verbose > 0 && bufferQueue->prevPacketWasSynchronized) {
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
458 fprintf(stderr, "%s stream is no longer RTCP-synchronized \n",
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
459 bufferQueue->tag());
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
460 }
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
461
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
462 // use the previous packet's "pts" once again:
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
463 dp->pts = bufferQueue->prevPacketPTS;
7534
0a936b10b3d8 passthrough timestamps to demuxer
arpi
parents: 7143
diff changeset
464 }
9565
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
465 bufferQueue->prevPacketWasSynchronized = hasBeenSynchronized;
7534
0a936b10b3d8 passthrough timestamps to demuxer
arpi
parents: 7143
diff changeset
466
6910
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
467 dp->pos = demuxer->filepos;
22759
e6135bdf4f8a Fix filepos calculation
cehoyos
parents: 22519
diff changeset
468 demuxer->filepos += frameSize + headersize;
6910
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
469
9250
bb490ffeebf5 Restruct by Ross Finlayson <finlayson@live.com>
bertrand
parents: 8987
diff changeset
470 // Signal any pending 'doEventLoop()' call on this queue:
6910
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
471 bufferQueue->blockingFlag = ~0;
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
472 }
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
473
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
474 static void onSourceClosure(void* clientData) {
9565
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
475 ReadBufferQueue* bufferQueue = (ReadBufferQueue*)clientData;
6910
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
476 demuxer_t* demuxer = bufferQueue->ourDemuxer();
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
477
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
478 demuxer->stream->eof = 1;
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
479
9250
bb490ffeebf5 Restruct by Ross Finlayson <finlayson@live.com>
bertrand
parents: 8987
diff changeset
480 // Signal any pending 'doEventLoop()' call on this queue:
6910
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
481 bufferQueue->blockingFlag = ~0;
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
482 }
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
483
9565
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
484 static demux_packet_t* getBuffer(demuxer_t* demuxer, demux_stream_t* ds,
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
485 Boolean mustGetNewData,
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
486 float& ptsBehind) {
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
487 // Begin by finding the buffer queue that we want to read from:
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
488 // (Get this from the RTP state, which we stored in
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
489 // the demuxer's 'priv' field)
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
490 RTPState* rtpState = (RTPState*)(demuxer->priv);
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
491 ReadBufferQueue* bufferQueue = NULL;
22519
5f3a0a712afb cosmetics: renamed variable amr as headersize, more meaningful; patch by Carl Eugen Hoyos
nicodvb
parents: 22463
diff changeset
492 int headersize = 0;
33705
db1b1a1ecba8 Add a hack to receive audio while probing video FPS.
reimar
parents: 32208
diff changeset
493 int waitboth = 0;
db1b1a1ecba8 Add a hack to receive audio while probing video FPS.
reimar
parents: 32208
diff changeset
494 TaskToken task, task2;
23554
046d7b14d7f1 Stop playing at eof or if no data arrives for ten seconds.
cehoyos
parents: 23224
diff changeset
495
046d7b14d7f1 Stop playing at eof or if no data arrives for ten seconds.
cehoyos
parents: 23224
diff changeset
496 if (demuxer->stream->eof) return NULL;
046d7b14d7f1 Stop playing at eof or if no data arrives for ten seconds.
cehoyos
parents: 23224
diff changeset
497
9565
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
498 if (ds == demuxer->video) {
33705
db1b1a1ecba8 Add a hack to receive audio while probing video FPS.
reimar
parents: 32208
diff changeset
499 bufferQueue = rtpState->audioBufferQueue;
db1b1a1ecba8 Add a hack to receive audio while probing video FPS.
reimar
parents: 32208
diff changeset
500 // HACK: for the latest versions we must also receive audio
db1b1a1ecba8 Add a hack to receive audio while probing video FPS.
reimar
parents: 32208
diff changeset
501 // when probing for video FPS, otherwise the stream just hangs
db1b1a1ecba8 Add a hack to receive audio while probing video FPS.
reimar
parents: 32208
diff changeset
502 // and times out
db1b1a1ecba8 Add a hack to receive audio while probing video FPS.
reimar
parents: 32208
diff changeset
503 if (mustGetNewData &&
db1b1a1ecba8 Add a hack to receive audio while probing video FPS.
reimar
parents: 32208
diff changeset
504 bufferQueue &&
db1b1a1ecba8 Add a hack to receive audio while probing video FPS.
reimar
parents: 32208
diff changeset
505 bufferQueue->readSource() &&
db1b1a1ecba8 Add a hack to receive audio while probing video FPS.
reimar
parents: 32208
diff changeset
506 !bufferQueue->nextpacket) {
db1b1a1ecba8 Add a hack to receive audio while probing video FPS.
reimar
parents: 32208
diff changeset
507 headersize = bufferQueue->readSource()->isAMRAudioSource() ? 1 : 0;
db1b1a1ecba8 Add a hack to receive audio while probing video FPS.
reimar
parents: 32208
diff changeset
508 demux_packet_t *dp = new_demux_packet(MAX_RTP_FRAME_SIZE);
db1b1a1ecba8 Add a hack to receive audio while probing video FPS.
reimar
parents: 32208
diff changeset
509 bufferQueue->dp = dp;
db1b1a1ecba8 Add a hack to receive audio while probing video FPS.
reimar
parents: 32208
diff changeset
510 bufferQueue->blockingFlag = 0;
db1b1a1ecba8 Add a hack to receive audio while probing video FPS.
reimar
parents: 32208
diff changeset
511 bufferQueue->readSource()->getNextFrame(
db1b1a1ecba8 Add a hack to receive audio while probing video FPS.
reimar
parents: 32208
diff changeset
512 &dp->buffer[headersize], MAX_RTP_FRAME_SIZE - headersize,
db1b1a1ecba8 Add a hack to receive audio while probing video FPS.
reimar
parents: 32208
diff changeset
513 afterReading, bufferQueue,
db1b1a1ecba8 Add a hack to receive audio while probing video FPS.
reimar
parents: 32208
diff changeset
514 onSourceClosure, bufferQueue);
db1b1a1ecba8 Add a hack to receive audio while probing video FPS.
reimar
parents: 32208
diff changeset
515 task2 = bufferQueue->readSource()->envir().taskScheduler().
db1b1a1ecba8 Add a hack to receive audio while probing video FPS.
reimar
parents: 32208
diff changeset
516 scheduleDelayedTask(10000000, onSourceClosure, bufferQueue);
db1b1a1ecba8 Add a hack to receive audio while probing video FPS.
reimar
parents: 32208
diff changeset
517 waitboth = 1;
db1b1a1ecba8 Add a hack to receive audio while probing video FPS.
reimar
parents: 32208
diff changeset
518 }
9565
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
519 bufferQueue = rtpState->videoBufferQueue;
22852
d7f4da5e9ee4 Support h264 over rtsp
cehoyos
parents: 22851
diff changeset
520 if (((sh_video_t*)ds->sh)->format == mmioFOURCC('H','2','6','4'))
d7f4da5e9ee4 Support h264 over rtsp
cehoyos
parents: 22851
diff changeset
521 headersize = 3;
9565
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
522 } else if (ds == demuxer->audio) {
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
523 bufferQueue = rtpState->audioBufferQueue;
22463
979b2aa16e80 support for AMR; it works inserting in the first byte of the demux_packet
nicodvb
parents: 22454
diff changeset
524 if (bufferQueue->readSource()->isAMRAudioSource())
22519
5f3a0a712afb cosmetics: renamed variable amr as headersize, more meaningful; patch by Carl Eugen Hoyos
nicodvb
parents: 22463
diff changeset
525 headersize = 1;
9565
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
526 } else {
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
527 fprintf(stderr, "(demux_rtp)getBuffer: internal error: unknown stream\n");
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
528 return NULL;
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
529 }
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
530
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
531 if (bufferQueue == NULL || bufferQueue->readSource() == NULL) {
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
532 fprintf(stderr, "(demux_rtp)getBuffer failed: no appropriate RTP subsession has been set up\n");
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
533 return NULL;
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
534 }
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29238
diff changeset
535
23555
2237e232cc15 Silence three warnings.
cehoyos
parents: 23554
diff changeset
536 demux_packet_t* dp = NULL;
9565
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
537 if (!mustGetNewData) {
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
538 // Check whether we have a previously-saved buffer that we can use:
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
539 dp = bufferQueue->getPendingBuffer();
9911
fa45d335a43b Fixed a bug that could sometimes cause the first video packet in a RTP stream
rsf
parents: 9904
diff changeset
540 if (dp != NULL) {
fa45d335a43b Fixed a bug that could sometimes cause the first video packet in a RTP stream
rsf
parents: 9904
diff changeset
541 ptsBehind = 0.0; // so that we always accept this data
fa45d335a43b Fixed a bug that could sometimes cause the first video packet in a RTP stream
rsf
parents: 9904
diff changeset
542 return dp;
fa45d335a43b Fixed a bug that could sometimes cause the first video packet in a RTP stream
rsf
parents: 9904
diff changeset
543 }
9565
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
544 }
9250
bb490ffeebf5 Restruct by Ross Finlayson <finlayson@live.com>
bertrand
parents: 8987
diff changeset
545
9565
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
546 // Allocate a new packet buffer, and arrange to read into it:
22852
d7f4da5e9ee4 Support h264 over rtsp
cehoyos
parents: 22851
diff changeset
547 if (!bufferQueue->nextpacket) {
9565
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
548 dp = new_demux_packet(MAX_RTP_FRAME_SIZE);
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
549 bufferQueue->dp = dp;
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
550 if (dp == NULL) return NULL;
22852
d7f4da5e9ee4 Support h264 over rtsp
cehoyos
parents: 22851
diff changeset
551 }
9565
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
552
32208
4cd07921bec2 Rename preprocessor directives: CONFIG_LIBAVCODEC --> CONFIG_FFMPEG
diego
parents: 32086
diff changeset
553 #ifdef CONFIG_FFMPEG
22852
d7f4da5e9ee4 Support h264 over rtsp
cehoyos
parents: 22851
diff changeset
554 extern AVCodecParserContext * h264parserctx;
d7f4da5e9ee4 Support h264 over rtsp
cehoyos
parents: 22851
diff changeset
555 int consumed, poutbuf_size = 1;
23224
f2631612f28b Fix compilation after FFmpeg r8921
cehoyos
parents: 22893
diff changeset
556 const uint8_t *poutbuf = NULL;
23555
2237e232cc15 Silence three warnings.
cehoyos
parents: 23554
diff changeset
557 float lastpts = 0.0;
22852
d7f4da5e9ee4 Support h264 over rtsp
cehoyos
parents: 22851
diff changeset
558
d7f4da5e9ee4 Support h264 over rtsp
cehoyos
parents: 22851
diff changeset
559 do {
d7f4da5e9ee4 Support h264 over rtsp
cehoyos
parents: 22851
diff changeset
560 if (!bufferQueue->nextpacket) {
d7f4da5e9ee4 Support h264 over rtsp
cehoyos
parents: 22851
diff changeset
561 #endif
9565
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
562 // Schedule the read operation:
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
563 bufferQueue->blockingFlag = 0;
22519
5f3a0a712afb cosmetics: renamed variable amr as headersize, more meaningful; patch by Carl Eugen Hoyos
nicodvb
parents: 22463
diff changeset
564 bufferQueue->readSource()->getNextFrame(&dp->buffer[headersize], MAX_RTP_FRAME_SIZE - headersize,
9565
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
565 afterReading, bufferQueue,
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
566 onSourceClosure, bufferQueue);
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
567 // Block ourselves until data becomes available:
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
568 TaskScheduler& scheduler
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
569 = bufferQueue->readSource()->envir().taskScheduler();
23569
ba3868fbe12c Simplify network timeout calculation.
cehoyos
parents: 23555
diff changeset
570 int delay = 10000000;
ba3868fbe12c Simplify network timeout calculation.
cehoyos
parents: 23555
diff changeset
571 if (bufferQueue->prevPacketPTS * 1.05 > rtpState->mediaSession->playEndTime())
ba3868fbe12c Simplify network timeout calculation.
cehoyos
parents: 23555
diff changeset
572 delay /= 10;
23554
046d7b14d7f1 Stop playing at eof or if no data arrives for ten seconds.
cehoyos
parents: 23224
diff changeset
573 task = scheduler.scheduleDelayedTask(delay, onSourceClosure, bufferQueue);
9565
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
574 scheduler.doEventLoop(&bufferQueue->blockingFlag);
23554
046d7b14d7f1 Stop playing at eof or if no data arrives for ten seconds.
cehoyos
parents: 23224
diff changeset
575 scheduler.unscheduleDelayedTask(task);
33705
db1b1a1ecba8 Add a hack to receive audio while probing video FPS.
reimar
parents: 32208
diff changeset
576 if (waitboth) {
db1b1a1ecba8 Add a hack to receive audio while probing video FPS.
reimar
parents: 32208
diff changeset
577 scheduler.doEventLoop(&rtpState->audioBufferQueue->blockingFlag);
db1b1a1ecba8 Add a hack to receive audio while probing video FPS.
reimar
parents: 32208
diff changeset
578 scheduler.unscheduleDelayedTask(task2);
db1b1a1ecba8 Add a hack to receive audio while probing video FPS.
reimar
parents: 32208
diff changeset
579 }
23554
046d7b14d7f1 Stop playing at eof or if no data arrives for ten seconds.
cehoyos
parents: 23224
diff changeset
580 if (demuxer->stream->eof) {
046d7b14d7f1 Stop playing at eof or if no data arrives for ten seconds.
cehoyos
parents: 23224
diff changeset
581 free_demux_packet(dp);
046d7b14d7f1 Stop playing at eof or if no data arrives for ten seconds.
cehoyos
parents: 23224
diff changeset
582 return NULL;
046d7b14d7f1 Stop playing at eof or if no data arrives for ten seconds.
cehoyos
parents: 23224
diff changeset
583 }
9250
bb490ffeebf5 Restruct by Ross Finlayson <finlayson@live.com>
bertrand
parents: 8987
diff changeset
584
22519
5f3a0a712afb cosmetics: renamed variable amr as headersize, more meaningful; patch by Carl Eugen Hoyos
nicodvb
parents: 22463
diff changeset
585 if (headersize == 1) // amr
22463
979b2aa16e80 support for AMR; it works inserting in the first byte of the demux_packet
nicodvb
parents: 22454
diff changeset
586 dp->buffer[0] =
979b2aa16e80 support for AMR; it works inserting in the first byte of the demux_packet
nicodvb
parents: 22454
diff changeset
587 ((AMRAudioSource*)bufferQueue->readSource())->lastFrameHeader();
32208
4cd07921bec2 Rename preprocessor directives: CONFIG_LIBAVCODEC --> CONFIG_FFMPEG
diego
parents: 32086
diff changeset
588 #ifdef CONFIG_FFMPEG
22852
d7f4da5e9ee4 Support h264 over rtsp
cehoyos
parents: 22851
diff changeset
589 } else {
d7f4da5e9ee4 Support h264 over rtsp
cehoyos
parents: 22851
diff changeset
590 bufferQueue->dp = dp = bufferQueue->nextpacket;
d7f4da5e9ee4 Support h264 over rtsp
cehoyos
parents: 22851
diff changeset
591 bufferQueue->nextpacket = NULL;
d7f4da5e9ee4 Support h264 over rtsp
cehoyos
parents: 22851
diff changeset
592 }
d7f4da5e9ee4 Support h264 over rtsp
cehoyos
parents: 22851
diff changeset
593 if (headersize == 3 && h264parserctx) { // h264
d7f4da5e9ee4 Support h264 over rtsp
cehoyos
parents: 22851
diff changeset
594 consumed = h264parserctx->parser->parser_parse(h264parserctx,
29453
3a154fb8f85c Make *avcctx AVCodecContext instead of void.
cehoyos
parents: 29451
diff changeset
595 avcctx,
22852
d7f4da5e9ee4 Support h264 over rtsp
cehoyos
parents: 22851
diff changeset
596 &poutbuf, &poutbuf_size,
d7f4da5e9ee4 Support h264 over rtsp
cehoyos
parents: 22851
diff changeset
597 dp->buffer, dp->len);
d7f4da5e9ee4 Support h264 over rtsp
cehoyos
parents: 22851
diff changeset
598
d7f4da5e9ee4 Support h264 over rtsp
cehoyos
parents: 22851
diff changeset
599 if (!consumed && !poutbuf_size)
d7f4da5e9ee4 Support h264 over rtsp
cehoyos
parents: 22851
diff changeset
600 return NULL;
d7f4da5e9ee4 Support h264 over rtsp
cehoyos
parents: 22851
diff changeset
601
d7f4da5e9ee4 Support h264 over rtsp
cehoyos
parents: 22851
diff changeset
602 if (!poutbuf_size) {
d7f4da5e9ee4 Support h264 over rtsp
cehoyos
parents: 22851
diff changeset
603 lastpts=dp->pts;
d7f4da5e9ee4 Support h264 over rtsp
cehoyos
parents: 22851
diff changeset
604 free_demux_packet(dp);
d7f4da5e9ee4 Support h264 over rtsp
cehoyos
parents: 22851
diff changeset
605 bufferQueue->dp = dp = new_demux_packet(MAX_RTP_FRAME_SIZE);
d7f4da5e9ee4 Support h264 over rtsp
cehoyos
parents: 22851
diff changeset
606 } else {
d7f4da5e9ee4 Support h264 over rtsp
cehoyos
parents: 22851
diff changeset
607 bufferQueue->nextpacket = dp;
d7f4da5e9ee4 Support h264 over rtsp
cehoyos
parents: 22851
diff changeset
608 bufferQueue->dp = dp = new_demux_packet(poutbuf_size);
d7f4da5e9ee4 Support h264 over rtsp
cehoyos
parents: 22851
diff changeset
609 memcpy(dp->buffer, poutbuf, poutbuf_size);
d7f4da5e9ee4 Support h264 over rtsp
cehoyos
parents: 22851
diff changeset
610 dp->pts=lastpts;
d7f4da5e9ee4 Support h264 over rtsp
cehoyos
parents: 22851
diff changeset
611 }
d7f4da5e9ee4 Support h264 over rtsp
cehoyos
parents: 22851
diff changeset
612 }
d7f4da5e9ee4 Support h264 over rtsp
cehoyos
parents: 22851
diff changeset
613 } while (!poutbuf_size);
d7f4da5e9ee4 Support h264 over rtsp
cehoyos
parents: 22851
diff changeset
614 #endif
22463
979b2aa16e80 support for AMR; it works inserting in the first byte of the demux_packet
nicodvb
parents: 22454
diff changeset
615
9565
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
616 // Set the "ptsBehind" result parameter:
10937
384f6a88a31d Changed the criteria for when to drop RTP packets whose timestamp is too far
rsf
parents: 10477
diff changeset
617 if (bufferQueue->prevPacketPTS != 0.0
384f6a88a31d Changed the criteria for when to drop RTP packets whose timestamp is too far
rsf
parents: 10477
diff changeset
618 && bufferQueue->prevPacketWasSynchronized
384f6a88a31d Changed the criteria for when to drop RTP packets whose timestamp is too far
rsf
parents: 10477
diff changeset
619 && *(bufferQueue->otherQueue) != NULL
384f6a88a31d Changed the criteria for when to drop RTP packets whose timestamp is too far
rsf
parents: 10477
diff changeset
620 && (*(bufferQueue->otherQueue))->prevPacketPTS != 0.0
384f6a88a31d Changed the criteria for when to drop RTP packets whose timestamp is too far
rsf
parents: 10477
diff changeset
621 && (*(bufferQueue->otherQueue))->prevPacketWasSynchronized) {
9565
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
622 ptsBehind = (*(bufferQueue->otherQueue))->prevPacketPTS
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
623 - bufferQueue->prevPacketPTS;
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
624 } else {
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
625 ptsBehind = 0.0;
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
626 }
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
627
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
628 if (mustGetNewData) {
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
629 // Save this buffer for future reads:
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
630 bufferQueue->savePendingBuffer(dp);
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
631 }
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
632
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
633 return dp;
9250
bb490ffeebf5 Restruct by Ross Finlayson <finlayson@live.com>
bertrand
parents: 8987
diff changeset
634 }
bb490ffeebf5 Restruct by Ross Finlayson <finlayson@live.com>
bertrand
parents: 8987
diff changeset
635
10054
1342075f81f0 Added SIP (IP telephony) client support. (This was already supported in the
rsf
parents: 9911
diff changeset
636 static void teardownRTSPorSIPSession(RTPState* rtpState) {
9565
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
637 MediaSession* mediaSession = rtpState->mediaSession;
10054
1342075f81f0 Added SIP (IP telephony) client support. (This was already supported in the
rsf
parents: 9911
diff changeset
638 if (mediaSession == NULL) return;
1342075f81f0 Added SIP (IP telephony) client support. (This was already supported in the
rsf
parents: 9911
diff changeset
639 if (rtpState->rtspClient != NULL) {
22893
777031848801 Use teardownMediaSession() instead of teardownMediaSubsession()
cehoyos
parents: 22852
diff changeset
640 rtpState->rtspClient->teardownMediaSession(*mediaSession);
10054
1342075f81f0 Added SIP (IP telephony) client support. (This was already supported in the
rsf
parents: 9911
diff changeset
641 } else if (rtpState->sipClient != NULL) {
1342075f81f0 Added SIP (IP telephony) client support. (This was already supported in the
rsf
parents: 9911
diff changeset
642 rtpState->sipClient->sendBYE();
9250
bb490ffeebf5 Restruct by Ross Finlayson <finlayson@live.com>
bertrand
parents: 8987
diff changeset
643 }
bb490ffeebf5 Restruct by Ross Finlayson <finlayson@live.com>
bertrand
parents: 8987
diff changeset
644 }
bb490ffeebf5 Restruct by Ross Finlayson <finlayson@live.com>
bertrand
parents: 8987
diff changeset
645
6910
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
646 ////////// "ReadBuffer" and "ReadBufferQueue" implementation:
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
647
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
648 ReadBufferQueue::ReadBufferQueue(MediaSubsession* subsession,
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
649 demuxer_t* demuxer, char const* tag)
9565
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
650 : prevPacketWasSynchronized(False), prevPacketPTS(0.0), otherQueue(NULL),
23555
2237e232cc15 Silence three warnings.
cehoyos
parents: 23554
diff changeset
651 dp(NULL), nextpacket(NULL),
2237e232cc15 Silence three warnings.
cehoyos
parents: 23554
diff changeset
652 pendingDPHead(NULL), pendingDPTail(NULL),
6910
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
653 fReadSource(subsession == NULL ? NULL : subsession->readSource()),
7534
0a936b10b3d8 passthrough timestamps to demuxer
arpi
parents: 7143
diff changeset
654 fRTPSource(subsession == NULL ? NULL : subsession->rtpSource()),
6910
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
655 fOurDemuxer(demuxer), fTag(strdup(tag)) {
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29238
diff changeset
656 }
6910
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
657
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
658 ReadBufferQueue::~ReadBufferQueue() {
29585
a17d4f8040f1 free(), delete and delete[] are all different and can't just be used at random,
reimar
parents: 29460
diff changeset
659 free((void *)fTag);
9565
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
660
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
661 // Free any pending buffers (that never got delivered):
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
662 demux_packet_t* dp = pendingDPHead;
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
663 while (dp != NULL) {
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
664 demux_packet_t* dpNext = dp->next;
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
665 dp->next = NULL;
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
666 free_demux_packet(dp);
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
667 dp = dpNext;
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
668 }
6910
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
669 }
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
670
9565
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
671 void ReadBufferQueue::savePendingBuffer(demux_packet_t* dp) {
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
672 // Keep this buffer around, until MPlayer asks for it later:
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
673 if (pendingDPTail == NULL) {
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
674 pendingDPHead = pendingDPTail = dp;
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
675 } else {
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
676 pendingDPTail->next = dp;
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
677 pendingDPTail = dp;
6910
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
678 }
9565
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
679 dp->next = NULL;
6910
1a747aee653b applied live.com streaming patch (-sdp and rtsp:// support) by Ross Finlayson <finlayson@live.com>
arpi
parents:
diff changeset
680 }
9565
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
681
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
682 demux_packet_t* ReadBufferQueue::getPendingBuffer() {
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
683 demux_packet_t* dp = pendingDPHead;
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
684 if (dp != NULL) {
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
685 pendingDPHead = dp->next;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29238
diff changeset
686 if (pendingDPHead == NULL) pendingDPTail = NULL;
9565
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
687
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
688 dp->next = NULL;
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
689 }
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
690
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
691 return dp;
e74916774667 Improved RTP packet buffering, by relying on the underlying OS's UDP
rsf
parents: 9457
diff changeset
692 }
16175
6b86089c2edd Demuxer modularization
rtognimp
parents: 15585
diff changeset
693
30644
390c8d36d463 Drop weird and unnecessary _s/_st suffixes from demuxer struct names.
diego
parents: 29585
diff changeset
694 static int demux_rtp_control(struct demuxer *demuxer, int cmd, void *arg) {
22355
20be7be45f47 implementation of DEMUXER_CTRL_GET_TIME_LENGTH and DEMUXER_CTRL_GET_PERCENT_POS; patch by the usual Hoyos
nicodvb
parents: 22353
diff changeset
695 double endpts = ((RTPState*)demuxer->priv)->mediaSession->playEndTime();
20be7be45f47 implementation of DEMUXER_CTRL_GET_TIME_LENGTH and DEMUXER_CTRL_GET_PERCENT_POS; patch by the usual Hoyos
nicodvb
parents: 22353
diff changeset
696
20be7be45f47 implementation of DEMUXER_CTRL_GET_TIME_LENGTH and DEMUXER_CTRL_GET_PERCENT_POS; patch by the usual Hoyos
nicodvb
parents: 22353
diff changeset
697 switch(cmd) {
20be7be45f47 implementation of DEMUXER_CTRL_GET_TIME_LENGTH and DEMUXER_CTRL_GET_PERCENT_POS; patch by the usual Hoyos
nicodvb
parents: 22353
diff changeset
698 case DEMUXER_CTRL_GET_TIME_LENGTH:
20be7be45f47 implementation of DEMUXER_CTRL_GET_TIME_LENGTH and DEMUXER_CTRL_GET_PERCENT_POS; patch by the usual Hoyos
nicodvb
parents: 22353
diff changeset
699 if (endpts <= 0)
20be7be45f47 implementation of DEMUXER_CTRL_GET_TIME_LENGTH and DEMUXER_CTRL_GET_PERCENT_POS; patch by the usual Hoyos
nicodvb
parents: 22353
diff changeset
700 return DEMUXER_CTRL_DONTKNOW;
20be7be45f47 implementation of DEMUXER_CTRL_GET_TIME_LENGTH and DEMUXER_CTRL_GET_PERCENT_POS; patch by the usual Hoyos
nicodvb
parents: 22353
diff changeset
701 *((double *)arg) = endpts;
20be7be45f47 implementation of DEMUXER_CTRL_GET_TIME_LENGTH and DEMUXER_CTRL_GET_PERCENT_POS; patch by the usual Hoyos
nicodvb
parents: 22353
diff changeset
702 return DEMUXER_CTRL_OK;
20be7be45f47 implementation of DEMUXER_CTRL_GET_TIME_LENGTH and DEMUXER_CTRL_GET_PERCENT_POS; patch by the usual Hoyos
nicodvb
parents: 22353
diff changeset
703
20be7be45f47 implementation of DEMUXER_CTRL_GET_TIME_LENGTH and DEMUXER_CTRL_GET_PERCENT_POS; patch by the usual Hoyos
nicodvb
parents: 22353
diff changeset
704 case DEMUXER_CTRL_GET_PERCENT_POS:
20be7be45f47 implementation of DEMUXER_CTRL_GET_TIME_LENGTH and DEMUXER_CTRL_GET_PERCENT_POS; patch by the usual Hoyos
nicodvb
parents: 22353
diff changeset
705 if (endpts <= 0)
20be7be45f47 implementation of DEMUXER_CTRL_GET_TIME_LENGTH and DEMUXER_CTRL_GET_PERCENT_POS; patch by the usual Hoyos
nicodvb
parents: 22353
diff changeset
706 return DEMUXER_CTRL_DONTKNOW;
20be7be45f47 implementation of DEMUXER_CTRL_GET_TIME_LENGTH and DEMUXER_CTRL_GET_PERCENT_POS; patch by the usual Hoyos
nicodvb
parents: 22353
diff changeset
707 *((int *)arg) = (int)(((RTPState*)demuxer->priv)->videoBufferQueue->prevPacketPTS*100/endpts);
20be7be45f47 implementation of DEMUXER_CTRL_GET_TIME_LENGTH and DEMUXER_CTRL_GET_PERCENT_POS; patch by the usual Hoyos
nicodvb
parents: 22353
diff changeset
708 return DEMUXER_CTRL_OK;
20be7be45f47 implementation of DEMUXER_CTRL_GET_TIME_LENGTH and DEMUXER_CTRL_GET_PERCENT_POS; patch by the usual Hoyos
nicodvb
parents: 22353
diff changeset
709
20be7be45f47 implementation of DEMUXER_CTRL_GET_TIME_LENGTH and DEMUXER_CTRL_GET_PERCENT_POS; patch by the usual Hoyos
nicodvb
parents: 22353
diff changeset
710 default:
20be7be45f47 implementation of DEMUXER_CTRL_GET_TIME_LENGTH and DEMUXER_CTRL_GET_PERCENT_POS; patch by the usual Hoyos
nicodvb
parents: 22353
diff changeset
711 return DEMUXER_CTRL_NOTIMPL;
20be7be45f47 implementation of DEMUXER_CTRL_GET_TIME_LENGTH and DEMUXER_CTRL_GET_PERCENT_POS; patch by the usual Hoyos
nicodvb
parents: 22353
diff changeset
712 }
20be7be45f47 implementation of DEMUXER_CTRL_GET_TIME_LENGTH and DEMUXER_CTRL_GET_PERCENT_POS; patch by the usual Hoyos
nicodvb
parents: 22353
diff changeset
713 }
16175
6b86089c2edd Demuxer modularization
rtognimp
parents: 15585
diff changeset
714
6b86089c2edd Demuxer modularization
rtognimp
parents: 15585
diff changeset
715 demuxer_desc_t demuxer_desc_rtp = {
16572
56a5f69e9b35 "LIVE.COM Streaming Media" is now called "LIVE555 Streaming Media".
rsf
parents: 16175
diff changeset
716 "LIVE555 RTP demuxer",
25270
f2a95277b9cf Rename demuxer tags to clarify
lu_zero
parents: 25237
diff changeset
717 "live555",
16175
6b86089c2edd Demuxer modularization
rtognimp
parents: 15585
diff changeset
718 "",
6b86089c2edd Demuxer modularization
rtognimp
parents: 15585
diff changeset
719 "Ross Finlayson",
16572
56a5f69e9b35 "LIVE.COM Streaming Media" is now called "LIVE555 Streaming Media".
rsf
parents: 16175
diff changeset
720 "requires LIVE555 Streaming Media library",
16175
6b86089c2edd Demuxer modularization
rtognimp
parents: 15585
diff changeset
721 DEMUXER_TYPE_RTP,
6b86089c2edd Demuxer modularization
rtognimp
parents: 15585
diff changeset
722 0, // no autodetect
6b86089c2edd Demuxer modularization
rtognimp
parents: 15585
diff changeset
723 NULL,
6b86089c2edd Demuxer modularization
rtognimp
parents: 15585
diff changeset
724 demux_rtp_fill_buffer,
6b86089c2edd Demuxer modularization
rtognimp
parents: 15585
diff changeset
725 demux_open_rtp,
6b86089c2edd Demuxer modularization
rtognimp
parents: 15585
diff changeset
726 demux_close_rtp,
6b86089c2edd Demuxer modularization
rtognimp
parents: 15585
diff changeset
727 NULL,
22355
20be7be45f47 implementation of DEMUXER_CTRL_GET_TIME_LENGTH and DEMUXER_CTRL_GET_PERCENT_POS; patch by the usual Hoyos
nicodvb
parents: 22353
diff changeset
728 demux_rtp_control
16175
6b86089c2edd Demuxer modularization
rtognimp
parents: 15585
diff changeset
729 };