annotate libmpdemux/demux_nemesi.c @ 26146:20a126aaa756

ve_vfw.c: #include aviheader.h instead of wine avifmt.h Compilation was broken after libmpdemux/muxer.h started including libmpdemux/aviheader.h. ve_vfw.c included both muxer.h and loader/wine/avifmt.h, and the latter has definitions that conflict with aviheader.h ones. Fix by removing the avifmt.h include. I did not carefully check that changing the includes doesn't break any ve_vfw.c code. However it at least fixes compilation, and if the avifmt.h versions differ in some significant way then the code is fundamentally broken anyway: ve_vfw cannot use different versions of the avi struct definitions when it also uses shared muxer.h types (those must use the standard definitions to keep the type compatible with what's used in other files).
author uau
date Thu, 06 Mar 2008 01:57:26 +0000
parents 4cd12675cfbb
children 0c1db5fd3f79
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
24564
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
1 /*
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
2 * Copyright (C) 2007 Alessandro Molina <amol.wrk@gmail.com>
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
3 *
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
4 * MPlayer is free software; you can redistribute it and/or modify
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
5 * it under the terms of the GNU General Public License as published by
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
6 * the Free Software Foundation; either version 2 of the License, or
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
7 * (at your option) any later version.
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
8 *
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
9 * MPlayer is distributed in the hope that it will be useful,
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
12 * GNU General Public License for more details.
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
13 *
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
14 * You should have received a copy of the GNU General Public License
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
15 * along with MPlayer; if not, write to the Free Software Foundation,
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
16 * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
17 */
25267
f7fa01fe18c8 Remove non necessary header
lu_zero
parents: 25266
diff changeset
18 #include <stdlib.h>
f7fa01fe18c8 Remove non necessary header
lu_zero
parents: 25266
diff changeset
19 #include <stdio.h>
f7fa01fe18c8 Remove non necessary header
lu_zero
parents: 25266
diff changeset
20 #include "stream/stream.h"
f7fa01fe18c8 Remove non necessary header
lu_zero
parents: 25266
diff changeset
21 #include "demuxer.h"
24564
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
22 #include "stheader.h"
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
23 #define HAVE_STRUCT_SOCKADDR_STORAGE
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
24 #include "nemesi/rtsp.h"
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
25 #include "nemesi/rtp.h"
24856
4365a0d7a4b8 Fix fps guessing
lu_zero
parents: 24855
diff changeset
26 #include <sched.h>
24564
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
27
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
28 int rtsp_transport_tcp = 0;
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
29 int rtsp_transport_sctp = 0;
25156
512f2958dc1b Enable -rtsp-port for nemesi
lu_zero
parents: 25116
diff changeset
30 int rtsp_port = 0;
24564
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
31
25103
588a415dd65d Media Format to fourcc conversion (from amol)
lu_zero
parents: 25013
diff changeset
32 typedef struct {
588a415dd65d Media Format to fourcc conversion (from amol)
lu_zero
parents: 25013
diff changeset
33 char * mime;
588a415dd65d Media Format to fourcc conversion (from amol)
lu_zero
parents: 25013
diff changeset
34 unsigned int fourcc;
588a415dd65d Media Format to fourcc conversion (from amol)
lu_zero
parents: 25013
diff changeset
35 } MIMEto4CC;
588a415dd65d Media Format to fourcc conversion (from amol)
lu_zero
parents: 25013
diff changeset
36
588a415dd65d Media Format to fourcc conversion (from amol)
lu_zero
parents: 25013
diff changeset
37 #define NMS_MAX_FORMATS 16
588a415dd65d Media Format to fourcc conversion (from amol)
lu_zero
parents: 25013
diff changeset
38
588a415dd65d Media Format to fourcc conversion (from amol)
lu_zero
parents: 25013
diff changeset
39 MIMEto4CC supported_audio[NMS_MAX_FORMATS] = {
588a415dd65d Media Format to fourcc conversion (from amol)
lu_zero
parents: 25013
diff changeset
40 {"MPA", 0x55},
588a415dd65d Media Format to fourcc conversion (from amol)
lu_zero
parents: 25013
diff changeset
41 {"vorbis", mmioFOURCC('v','r','b','s')},
25104
a92bd4a7c213 AAC support (aac-hbr only)
lu_zero
parents: 25103
diff changeset
42 {"mpeg4-generic", mmioFOURCC('M','P','4','A')},
25103
588a415dd65d Media Format to fourcc conversion (from amol)
lu_zero
parents: 25013
diff changeset
43 {NULL, 0},
588a415dd65d Media Format to fourcc conversion (from amol)
lu_zero
parents: 25013
diff changeset
44 };
588a415dd65d Media Format to fourcc conversion (from amol)
lu_zero
parents: 25013
diff changeset
45
588a415dd65d Media Format to fourcc conversion (from amol)
lu_zero
parents: 25013
diff changeset
46 MIMEto4CC supported_video[NMS_MAX_FORMATS] = {
588a415dd65d Media Format to fourcc conversion (from amol)
lu_zero
parents: 25013
diff changeset
47 {"MPV", mmioFOURCC('M','P','E','G')},
25116
1e76bb01331f Enable Theora support
lu_zero
parents: 25104
diff changeset
48 {"theora",mmioFOURCC('t','h','e','o')},
25103
588a415dd65d Media Format to fourcc conversion (from amol)
lu_zero
parents: 25013
diff changeset
49 {"H264", mmioFOURCC('H','2','6','4')},
588a415dd65d Media Format to fourcc conversion (from amol)
lu_zero
parents: 25013
diff changeset
50 {"H263-1998", mmioFOURCC('H','2','6','3')},
588a415dd65d Media Format to fourcc conversion (from amol)
lu_zero
parents: 25013
diff changeset
51 {"MP4V-ES", mmioFOURCC('M','P','4','V')},
588a415dd65d Media Format to fourcc conversion (from amol)
lu_zero
parents: 25013
diff changeset
52 {NULL, 0},
588a415dd65d Media Format to fourcc conversion (from amol)
lu_zero
parents: 25013
diff changeset
53 };
588a415dd65d Media Format to fourcc conversion (from amol)
lu_zero
parents: 25013
diff changeset
54
24564
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
55 typedef enum { NEMESI_SESSION_VIDEO,
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
56 NEMESI_SESSION_AUDIO } Nemesi_SessionType;
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
57
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
58 typedef struct {
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
59 rtsp_ctrl * rtsp;
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
60 rtp_session * session[2];
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
61 rtp_frame first_pkt[2];
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
62 double time[2];
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
63 double seek;
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
64 } Nemesi_DemuxerStreamData;
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
65
24997
e429129fa02b Refactor demux_nemesi (from amol)
lu_zero
parents: 24856
diff changeset
66
e429129fa02b Refactor demux_nemesi (from amol)
lu_zero
parents: 24856
diff changeset
67 #define STYPE_TO_DS(demuxer, stype) \
e429129fa02b Refactor demux_nemesi (from amol)
lu_zero
parents: 24856
diff changeset
68 ((stype) == NEMESI_SESSION_VIDEO ? (demuxer)->video : (demuxer)->audio)
e429129fa02b Refactor demux_nemesi (from amol)
lu_zero
parents: 24856
diff changeset
69
e429129fa02b Refactor demux_nemesi (from amol)
lu_zero
parents: 24856
diff changeset
70 #define DS_TO_STYPE(demuxer, ds) \
e429129fa02b Refactor demux_nemesi (from amol)
lu_zero
parents: 24856
diff changeset
71 ((ds) == (demuxer)->video ? NEMESI_SESSION_VIDEO : NEMESI_SESSION_AUDIO)
e429129fa02b Refactor demux_nemesi (from amol)
lu_zero
parents: 24856
diff changeset
72
e429129fa02b Refactor demux_nemesi (from amol)
lu_zero
parents: 24856
diff changeset
73 #define INVERT_STYPE(stype) ((stype + 1) % 2)
e429129fa02b Refactor demux_nemesi (from amol)
lu_zero
parents: 24856
diff changeset
74
25103
588a415dd65d Media Format to fourcc conversion (from amol)
lu_zero
parents: 25013
diff changeset
75 static unsigned int get4CC(MIMEto4CC * supported_formats, char const * format)
588a415dd65d Media Format to fourcc conversion (from amol)
lu_zero
parents: 25013
diff changeset
76 {
588a415dd65d Media Format to fourcc conversion (from amol)
lu_zero
parents: 25013
diff changeset
77 unsigned i;
588a415dd65d Media Format to fourcc conversion (from amol)
lu_zero
parents: 25013
diff changeset
78
588a415dd65d Media Format to fourcc conversion (from amol)
lu_zero
parents: 25013
diff changeset
79 for(i = 0; i < NMS_MAX_FORMATS; ++i) {
588a415dd65d Media Format to fourcc conversion (from amol)
lu_zero
parents: 25013
diff changeset
80 if (!supported_formats[i].mime)
588a415dd65d Media Format to fourcc conversion (from amol)
lu_zero
parents: 25013
diff changeset
81 return 0;
588a415dd65d Media Format to fourcc conversion (from amol)
lu_zero
parents: 25013
diff changeset
82 else if ( strcmp(supported_formats[i].mime, format) == 0 )
588a415dd65d Media Format to fourcc conversion (from amol)
lu_zero
parents: 25013
diff changeset
83 return supported_formats[i].fourcc;
588a415dd65d Media Format to fourcc conversion (from amol)
lu_zero
parents: 25013
diff changeset
84 }
588a415dd65d Media Format to fourcc conversion (from amol)
lu_zero
parents: 25013
diff changeset
85
588a415dd65d Media Format to fourcc conversion (from amol)
lu_zero
parents: 25013
diff changeset
86 return 0;
588a415dd65d Media Format to fourcc conversion (from amol)
lu_zero
parents: 25013
diff changeset
87 }
24997
e429129fa02b Refactor demux_nemesi (from amol)
lu_zero
parents: 24856
diff changeset
88
e429129fa02b Refactor demux_nemesi (from amol)
lu_zero
parents: 24856
diff changeset
89 static rtp_ssrc *wait_for_packets(Nemesi_DemuxerStreamData * ndsd, Nemesi_SessionType stype)
e429129fa02b Refactor demux_nemesi (from amol)
lu_zero
parents: 24856
diff changeset
90 {
e429129fa02b Refactor demux_nemesi (from amol)
lu_zero
parents: 24856
diff changeset
91 rtp_ssrc *ssrc = NULL;
e429129fa02b Refactor demux_nemesi (from amol)
lu_zero
parents: 24856
diff changeset
92
e429129fa02b Refactor demux_nemesi (from amol)
lu_zero
parents: 24856
diff changeset
93 /* Wait for prebuffering (prebuffering must be enabled in nemesi) */
e429129fa02b Refactor demux_nemesi (from amol)
lu_zero
parents: 24856
diff changeset
94 int terminated = rtp_fill_buffers(rtsp_get_rtp_th(ndsd->rtsp));
e429129fa02b Refactor demux_nemesi (from amol)
lu_zero
parents: 24856
diff changeset
95
e429129fa02b Refactor demux_nemesi (from amol)
lu_zero
parents: 24856
diff changeset
96 /* Wait for the ssrc to be registered, if prebuffering is on in nemesi
e429129fa02b Refactor demux_nemesi (from amol)
lu_zero
parents: 24856
diff changeset
97 this will just get immediatly the correct ssrc */
e429129fa02b Refactor demux_nemesi (from amol)
lu_zero
parents: 24856
diff changeset
98 if (!terminated) {
e429129fa02b Refactor demux_nemesi (from amol)
lu_zero
parents: 24856
diff changeset
99 while ( !(ssrc = rtp_session_get_ssrc(ndsd->session[stype], ndsd->rtsp)) )
e429129fa02b Refactor demux_nemesi (from amol)
lu_zero
parents: 24856
diff changeset
100 sched_yield();
e429129fa02b Refactor demux_nemesi (from amol)
lu_zero
parents: 24856
diff changeset
101 }
e429129fa02b Refactor demux_nemesi (from amol)
lu_zero
parents: 24856
diff changeset
102
e429129fa02b Refactor demux_nemesi (from amol)
lu_zero
parents: 24856
diff changeset
103 return ssrc;
e429129fa02b Refactor demux_nemesi (from amol)
lu_zero
parents: 24856
diff changeset
104 }
e429129fa02b Refactor demux_nemesi (from amol)
lu_zero
parents: 24856
diff changeset
105
24564
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
106 static void link_session_and_fetch_conf(Nemesi_DemuxerStreamData * ndsd,
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
107 Nemesi_SessionType stype,
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
108 rtp_session * sess,
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
109 rtp_buff * buff, unsigned int * fps)
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
110 {
25965
4cd12675cfbb Change force_fps and force_ofps to double
reimar
parents: 25707
diff changeset
111 extern double force_fps;
24855
2c790baff42c Update to use newer libnemesi, should fix desync, fps guessing may fail now
lu_zero
parents: 24625
diff changeset
112 rtp_ssrc *ssrc = NULL;
24564
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
113 rtp_frame * fr = &ndsd->first_pkt[stype];
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
114 rtp_buff trash_buff;
25010
9a4d15a28d12 fetch metadata for audio (from amol)
lu_zero
parents: 25009
diff changeset
115 int must_prefetch = ((fps != NULL) || (buff != NULL)) ? 1 : 0;
24564
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
116
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
117 ndsd->session[stype] = sess;
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
118
24997
e429129fa02b Refactor demux_nemesi (from amol)
lu_zero
parents: 24856
diff changeset
119 ssrc = wait_for_packets(ndsd, stype);
24564
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
120
25010
9a4d15a28d12 fetch metadata for audio (from amol)
lu_zero
parents: 25009
diff changeset
121 if ( ((ssrc) && (must_prefetch)) ) {
24997
e429129fa02b Refactor demux_nemesi (from amol)
lu_zero
parents: 24856
diff changeset
122 if (buff == NULL)
e429129fa02b Refactor demux_nemesi (from amol)
lu_zero
parents: 24856
diff changeset
123 buff = &trash_buff;
24856
4365a0d7a4b8 Fix fps guessing
lu_zero
parents: 24855
diff changeset
124
4365a0d7a4b8 Fix fps guessing
lu_zero
parents: 24855
diff changeset
125 rtp_fill_buffer(ssrc, fr, buff); //Prefetch the first packet
24564
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
126
24998
c6aaf2165751 fix forcefps (from amol)
lu_zero
parents: 24997
diff changeset
127 /* Packet prefecthing must be done anyway or we won't be
c6aaf2165751 fix forcefps (from amol)
lu_zero
parents: 24997
diff changeset
128 able to get the metadata, but fps calculation happens
c6aaf2165751 fix forcefps (from amol)
lu_zero
parents: 24997
diff changeset
129 only if the user didn't specify the FPS */
25010
9a4d15a28d12 fetch metadata for audio (from amol)
lu_zero
parents: 25009
diff changeset
130 if ( ((!force_fps) && (fps != NULL)) ) {
24998
c6aaf2165751 fix forcefps (from amol)
lu_zero
parents: 24997
diff changeset
131 while ( *fps <= 0 ) {
c6aaf2165751 fix forcefps (from amol)
lu_zero
parents: 24997
diff changeset
132 //Wait more pkts to calculate FPS and try again
c6aaf2165751 fix forcefps (from amol)
lu_zero
parents: 24997
diff changeset
133 sched_yield();
c6aaf2165751 fix forcefps (from amol)
lu_zero
parents: 24997
diff changeset
134 *fps = rtp_get_fps(ssrc);
c6aaf2165751 fix forcefps (from amol)
lu_zero
parents: 24997
diff changeset
135 }
c6aaf2165751 fix forcefps (from amol)
lu_zero
parents: 24997
diff changeset
136 }
24564
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
137 }
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
138 }
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
139
25267
f7fa01fe18c8 Remove non necessary header
lu_zero
parents: 25266
diff changeset
140 static demuxer_t* demux_open_rtp(demuxer_t* demuxer)
24564
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
141 {
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
142 nms_rtsp_hints hints;
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
143 char * url = demuxer->stream->streaming_ctrl->url->url;
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
144 rtsp_ctrl * ctl;
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
145 RTSP_Error reply;
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
146 rtsp_medium * media;
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
147 Nemesi_DemuxerStreamData * ndsd = calloc(1, sizeof(Nemesi_DemuxerStreamData));
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
148
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
149 memset(&hints,0,sizeof(hints));
25156
512f2958dc1b Enable -rtsp-port for nemesi
lu_zero
parents: 25116
diff changeset
150 if (rtsp_port) hints.first_rtp_port = rtsp_port;
24564
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
151 if (rtsp_transport_tcp) {
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
152 hints.pref_rtsp_proto = TCP;
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
153 hints.pref_rtp_proto = TCP;
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
154 }
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
155 if (rtsp_transport_sctp) {
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
156 hints.pref_rtsp_proto = SCTP;
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
157 hints.pref_rtp_proto = SCTP;
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
158 }
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
159
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
160 mp_msg(MSGT_DEMUX, MSGL_INFO, "Initializing libNemesi\n");
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
161 if ((ctl = rtsp_init(&hints)) == NULL) {
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
162 free(ndsd);
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
163 return STREAM_ERROR;
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
164 }
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
165
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
166 ndsd->rtsp = ctl;
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
167 demuxer->priv = ndsd;
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
168 //nms_verbosity_set(1);
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
169
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
170 mp_msg(MSGT_DEMUX, MSGL_INFO, "Opening: %s\n", url);
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
171 if (rtsp_open(ctl, url)) {
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
172 mp_msg(MSGT_DEMUX, MSGL_ERR, "rtsp_open failed.\n");
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
173 return demuxer;
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
174 }
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
175
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
176 reply = rtsp_wait(ctl);
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
177 if (reply.got_error) {
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
178 mp_msg(MSGT_DEMUX, MSGL_ERR,
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
179 "OPEN Error from the server: %s\n",
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
180 reply.message.reply_str);
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
181 return demuxer;
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
182 }
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
183
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
184 rtsp_play(ctl, 0, 0);
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
185 reply = rtsp_wait(ctl);
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
186 if (reply.got_error) {
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
187 mp_msg(MSGT_DEMUX, MSGL_ERR,
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
188 "PLAY Error from the server: %s\n",
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
189 reply.message.reply_str);
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
190 return demuxer;
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
191 }
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
192
25490
556413e73e17 Make sure we have an rtsp session
lu_zero
parents: 25270
diff changeset
193 if (!ctl->rtsp_queue)
556413e73e17 Make sure we have an rtsp session
lu_zero
parents: 25270
diff changeset
194 return demuxer;
556413e73e17 Make sure we have an rtsp session
lu_zero
parents: 25270
diff changeset
195
24564
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
196 media = ctl->rtsp_queue->media_queue;
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
197 for (; media; media=media->next) {
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
198 sdp_medium_info * info = media->medium_info;
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
199 rtp_session * sess = media->rtp_sess;
25011
39b7d358106a support extradata for audio streams
lu_zero
parents: 25010
diff changeset
200 rtp_buff buff;
24564
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
201
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
202 int media_format = atoi(info->fmts);
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
203 rtp_pt * ptinfo = rtp_get_pt_info(sess, media_format);
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
204 char const * format_name = ptinfo ? ptinfo->name : NULL;
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
205
25011
39b7d358106a support extradata for audio streams
lu_zero
parents: 25010
diff changeset
206 memset(&buff, 0, sizeof(rtp_buff));
39b7d358106a support extradata for audio streams
lu_zero
parents: 25010
diff changeset
207
24564
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
208 if (sess->parsers[media_format] == NULL) {
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
209 mp_msg(MSGT_DEMUX, MSGL_ERR,
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
210 "libNemesi unsupported media format: %s\n",
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
211 format_name ? format_name : info->fmts);
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
212 continue;
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
213 }
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
214 else {
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
215 mp_msg(MSGT_DEMUX, MSGL_INFO,
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
216 "libNemesi supported media: %s\n",
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
217 format_name);
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
218 }
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
219
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
220 if (ptinfo->type == AU) {
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
221 if (ndsd->session[NEMESI_SESSION_AUDIO] == NULL) {
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
222 sh_audio_t* sh_audio = new_sh_audio(demuxer,0);
25011
39b7d358106a support extradata for audio streams
lu_zero
parents: 25010
diff changeset
223 WAVEFORMATEX* wf;
24564
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
224 demux_stream_t* d_audio = demuxer->audio;
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
225
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
226 mp_msg(MSGT_DEMUX, MSGL_INFO, "Detected as AUDIO stream...\n");
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
227
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
228 link_session_and_fetch_conf(ndsd, NEMESI_SESSION_AUDIO,
25011
39b7d358106a support extradata for audio streams
lu_zero
parents: 25010
diff changeset
229 sess, &buff, NULL);
39b7d358106a support extradata for audio streams
lu_zero
parents: 25010
diff changeset
230
39b7d358106a support extradata for audio streams
lu_zero
parents: 25010
diff changeset
231 if (buff.len) {
39b7d358106a support extradata for audio streams
lu_zero
parents: 25010
diff changeset
232 wf = calloc(1,sizeof(WAVEFORMATEX)+buff.len);
39b7d358106a support extradata for audio streams
lu_zero
parents: 25010
diff changeset
233 wf->cbSize = buff.len;
39b7d358106a support extradata for audio streams
lu_zero
parents: 25010
diff changeset
234 memcpy(wf+1, buff.data, buff.len);
39b7d358106a support extradata for audio streams
lu_zero
parents: 25010
diff changeset
235 } else {
39b7d358106a support extradata for audio streams
lu_zero
parents: 25010
diff changeset
236 wf = calloc(1,sizeof(WAVEFORMATEX));
39b7d358106a support extradata for audio streams
lu_zero
parents: 25010
diff changeset
237 }
24564
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
238
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
239 sh_audio->wf = wf;
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
240 d_audio->sh = sh_audio;
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
241 sh_audio->ds = d_audio;
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
242 wf->nSamplesPerSec = 0;
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
243
25103
588a415dd65d Media Format to fourcc conversion (from amol)
lu_zero
parents: 25013
diff changeset
244 wf->wFormatTag =
588a415dd65d Media Format to fourcc conversion (from amol)
lu_zero
parents: 25013
diff changeset
245 sh_audio->format = get4CC(supported_audio, format_name);
588a415dd65d Media Format to fourcc conversion (from amol)
lu_zero
parents: 25013
diff changeset
246 if ( !(wf->wFormatTag) )
24564
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
247 mp_msg(MSGT_DEMUX, MSGL_WARN,
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
248 "Unknown MPlayer format code for MIME"
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
249 " type \"audio/%s\"\n", format_name);
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
250 } else {
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
251 mp_msg(MSGT_DEMUX, MSGL_ERR,
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
252 "There is already an audio session registered,"
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
253 " ignoring...\n");
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
254 }
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
255 } else if (ptinfo->type == VI) {
25012
e800e0905050 10l video != audio
lu_zero
parents: 25011
diff changeset
256 if (ndsd->session[NEMESI_SESSION_VIDEO] == NULL) {
24564
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
257 sh_video_t* sh_video;
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
258 BITMAPINFOHEADER* bih;
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
259 demux_stream_t* d_video;
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
260 int fps = 0;
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
261
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
262 mp_msg(MSGT_DEMUX, MSGL_INFO, "Detected as VIDEO stream...\n");
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
263
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
264 link_session_and_fetch_conf(ndsd, NEMESI_SESSION_VIDEO,
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
265 sess, &buff, &fps);
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
266
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
267 if (buff.len) {
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
268 bih = calloc(1,sizeof(BITMAPINFOHEADER)+buff.len);
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
269 bih->biSize = sizeof(BITMAPINFOHEADER)+buff.len;
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
270 memcpy(bih+1, buff.data, buff.len);
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
271 } else {
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
272 bih = calloc(1,sizeof(BITMAPINFOHEADER));
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
273 bih->biSize = sizeof(BITMAPINFOHEADER);
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
274 }
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
275
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
276 sh_video = new_sh_video(demuxer,0);
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
277 sh_video->bih = bih;
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
278 d_video = demuxer->video;
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
279 d_video->sh = sh_video;
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
280 sh_video->ds = d_video;
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
281
24856
4365a0d7a4b8 Fix fps guessing
lu_zero
parents: 24855
diff changeset
282 if (fps) {
24564
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
283 sh_video->fps = fps;
24856
4365a0d7a4b8 Fix fps guessing
lu_zero
parents: 24855
diff changeset
284 sh_video->frametime = 1.0/fps;
4365a0d7a4b8 Fix fps guessing
lu_zero
parents: 24855
diff changeset
285 }
24564
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
286
25103
588a415dd65d Media Format to fourcc conversion (from amol)
lu_zero
parents: 25013
diff changeset
287 bih->biCompression =
588a415dd65d Media Format to fourcc conversion (from amol)
lu_zero
parents: 25013
diff changeset
288 sh_video->format = get4CC(supported_video, format_name);
588a415dd65d Media Format to fourcc conversion (from amol)
lu_zero
parents: 25013
diff changeset
289 if ( !(bih->biCompression) ) {
24564
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
290 mp_msg(MSGT_DEMUX, MSGL_WARN,
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
291 "Unknown MPlayer format code for MIME"
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
292 " type \"video/%s\"\n", format_name);
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
293 }
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
294 } else {
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
295 mp_msg(MSGT_DEMUX, MSGL_ERR,
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
296 "There is already a video session registered,"
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
297 " ignoring...\n");
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
298 }
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
299 } else {
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
300 mp_msg(MSGT_DEMUX, MSGL_ERR, "Unsupported media type\n");
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
301 }
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
302 }
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
303
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
304 demuxer->stream->eof = 0;
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
305
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
306 return demuxer;
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
307 }
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
308
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
309 static int get_data_for_session(Nemesi_DemuxerStreamData * ndsd,
24997
e429129fa02b Refactor demux_nemesi (from amol)
lu_zero
parents: 24856
diff changeset
310 Nemesi_SessionType stype, rtp_ssrc * ssrc,
e429129fa02b Refactor demux_nemesi (from amol)
lu_zero
parents: 24856
diff changeset
311 rtp_frame * fr)
24564
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
312 {
24997
e429129fa02b Refactor demux_nemesi (from amol)
lu_zero
parents: 24856
diff changeset
313 if (ndsd->first_pkt[stype].len != 0) {
e429129fa02b Refactor demux_nemesi (from amol)
lu_zero
parents: 24856
diff changeset
314 fr->data = ndsd->first_pkt[stype].data;
e429129fa02b Refactor demux_nemesi (from amol)
lu_zero
parents: 24856
diff changeset
315 fr->time_sec = ndsd->first_pkt[stype].time_sec;
e429129fa02b Refactor demux_nemesi (from amol)
lu_zero
parents: 24856
diff changeset
316 fr->len = ndsd->first_pkt[stype].len;
e429129fa02b Refactor demux_nemesi (from amol)
lu_zero
parents: 24856
diff changeset
317 ndsd->first_pkt[stype].len = 0;
e429129fa02b Refactor demux_nemesi (from amol)
lu_zero
parents: 24856
diff changeset
318 return RTP_FILL_OK;
e429129fa02b Refactor demux_nemesi (from amol)
lu_zero
parents: 24856
diff changeset
319 } else {
e429129fa02b Refactor demux_nemesi (from amol)
lu_zero
parents: 24856
diff changeset
320 rtp_buff buff;
e429129fa02b Refactor demux_nemesi (from amol)
lu_zero
parents: 24856
diff changeset
321 return rtp_fill_buffer(ssrc, fr, &buff);
e429129fa02b Refactor demux_nemesi (from amol)
lu_zero
parents: 24856
diff changeset
322 }
e429129fa02b Refactor demux_nemesi (from amol)
lu_zero
parents: 24856
diff changeset
323 }
24564
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
324
24997
e429129fa02b Refactor demux_nemesi (from amol)
lu_zero
parents: 24856
diff changeset
325 static void stream_add_packet(Nemesi_DemuxerStreamData * ndsd,
e429129fa02b Refactor demux_nemesi (from amol)
lu_zero
parents: 24856
diff changeset
326 Nemesi_SessionType stype,
e429129fa02b Refactor demux_nemesi (from amol)
lu_zero
parents: 24856
diff changeset
327 demux_stream_t* ds, rtp_frame * fr)
e429129fa02b Refactor demux_nemesi (from amol)
lu_zero
parents: 24856
diff changeset
328 {
e429129fa02b Refactor demux_nemesi (from amol)
lu_zero
parents: 24856
diff changeset
329 demux_packet_t* dp = new_demux_packet(fr->len);
e429129fa02b Refactor demux_nemesi (from amol)
lu_zero
parents: 24856
diff changeset
330 memcpy(dp->buffer, fr->data, fr->len);
24564
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
331
24997
e429129fa02b Refactor demux_nemesi (from amol)
lu_zero
parents: 24856
diff changeset
332 fr->time_sec += ndsd->seek;
e429129fa02b Refactor demux_nemesi (from amol)
lu_zero
parents: 24856
diff changeset
333 ndsd->time[stype] = dp->pts = fr->time_sec;
e429129fa02b Refactor demux_nemesi (from amol)
lu_zero
parents: 24856
diff changeset
334
e429129fa02b Refactor demux_nemesi (from amol)
lu_zero
parents: 24856
diff changeset
335 ds_add_packet(ds, dp);
24564
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
336 }
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
337
25267
f7fa01fe18c8 Remove non necessary header
lu_zero
parents: 25266
diff changeset
338 static int demux_rtp_fill_buffer(demuxer_t* demuxer, demux_stream_t* ds)
24564
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
339 {
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
340 Nemesi_DemuxerStreamData * ndsd = demuxer->priv;
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
341 Nemesi_SessionType stype;
24997
e429129fa02b Refactor demux_nemesi (from amol)
lu_zero
parents: 24856
diff changeset
342 rtp_ssrc * ssrc;
24564
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
343 rtp_frame fr;
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
344
24997
e429129fa02b Refactor demux_nemesi (from amol)
lu_zero
parents: 24856
diff changeset
345 if ( (!ndsd->rtsp->rtsp_queue) || (demuxer->stream->eof) ) {
24564
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
346 mp_msg(MSGT_DEMUX, MSGL_INFO, "End of Stream...\n");
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
347 demuxer->stream->eof = 1;
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
348 return 0;
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
349 }
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
350
25103
588a415dd65d Media Format to fourcc conversion (from amol)
lu_zero
parents: 25013
diff changeset
351 memset(&fr, 0, sizeof(fr));
588a415dd65d Media Format to fourcc conversion (from amol)
lu_zero
parents: 25013
diff changeset
352
24997
e429129fa02b Refactor demux_nemesi (from amol)
lu_zero
parents: 24856
diff changeset
353 stype = DS_TO_STYPE(demuxer, ds);
e429129fa02b Refactor demux_nemesi (from amol)
lu_zero
parents: 24856
diff changeset
354 if ( (ssrc = wait_for_packets(ndsd, stype)) == NULL ) {
e429129fa02b Refactor demux_nemesi (from amol)
lu_zero
parents: 24856
diff changeset
355 mp_msg(MSGT_DEMUX, MSGL_INFO, "Bye...\n");
e429129fa02b Refactor demux_nemesi (from amol)
lu_zero
parents: 24856
diff changeset
356 demuxer->stream->eof = 1;
24564
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
357 return 0;
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
358 }
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
359
24997
e429129fa02b Refactor demux_nemesi (from amol)
lu_zero
parents: 24856
diff changeset
360 if(!get_data_for_session(ndsd, stype, ssrc, &fr))
e429129fa02b Refactor demux_nemesi (from amol)
lu_zero
parents: 24856
diff changeset
361 stream_add_packet(ndsd, stype, ds, &fr);
e429129fa02b Refactor demux_nemesi (from amol)
lu_zero
parents: 24856
diff changeset
362 else {
e429129fa02b Refactor demux_nemesi (from amol)
lu_zero
parents: 24856
diff changeset
363 stype = INVERT_STYPE(stype);
25013
dc6b7ad240db Check for second stream presence, fixes single stream playback (from amol)
lu_zero
parents: 25012
diff changeset
364
dc6b7ad240db Check for second stream presence, fixes single stream playback (from amol)
lu_zero
parents: 25012
diff changeset
365 //Must check if we actually have a stream of the other type
dc6b7ad240db Check for second stream presence, fixes single stream playback (from amol)
lu_zero
parents: 25012
diff changeset
366 if (!ndsd->session[stype])
dc6b7ad240db Check for second stream presence, fixes single stream playback (from amol)
lu_zero
parents: 25012
diff changeset
367 return 1;
dc6b7ad240db Check for second stream presence, fixes single stream playback (from amol)
lu_zero
parents: 25012
diff changeset
368
24997
e429129fa02b Refactor demux_nemesi (from amol)
lu_zero
parents: 24856
diff changeset
369 ds = STYPE_TO_DS(demuxer, stype);
e429129fa02b Refactor demux_nemesi (from amol)
lu_zero
parents: 24856
diff changeset
370 ssrc = wait_for_packets(ndsd, stype);
e429129fa02b Refactor demux_nemesi (from amol)
lu_zero
parents: 24856
diff changeset
371
e429129fa02b Refactor demux_nemesi (from amol)
lu_zero
parents: 24856
diff changeset
372 if(!get_data_for_session(ndsd, stype, ssrc, &fr))
e429129fa02b Refactor demux_nemesi (from amol)
lu_zero
parents: 24856
diff changeset
373 stream_add_packet(ndsd, stype, ds, &fr);
24564
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
374 }
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
375
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
376 return 1;
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
377 }
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
378
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
379
25267
f7fa01fe18c8 Remove non necessary header
lu_zero
parents: 25266
diff changeset
380 static void demux_close_rtp(demuxer_t* demuxer)
24564
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
381 {
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
382 Nemesi_DemuxerStreamData * ndsd = demuxer->priv;
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
383 rtsp_ctrl * ctl = ndsd->rtsp;
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
384 RTSP_Error err;
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
385
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
386 mp_msg(MSGT_DEMUX, MSGL_INFO, "Closing libNemesi RTSP Stream...\n");
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
387
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
388 if (ndsd == NULL)
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
389 return;
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
390
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
391 free(ndsd);
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
392
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
393 if (rtsp_close(ctl)) {
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
394 err = rtsp_wait(ctl);
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
395 if (err.got_error)
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
396 mp_msg(MSGT_DEMUX, MSGL_ERR,
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
397 "Error Closing Stream: %s\n",
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
398 err.message.reply_str);
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
399 }
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
400
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
401 rtsp_uninit(ctl);
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
402 }
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
403
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
404 static void demux_seek_rtp(demuxer_t *demuxer, float rel_seek_secs,
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
405 float audio_delay, int flags)
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
406 {
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
407 Nemesi_DemuxerStreamData * ndsd = demuxer->priv;
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
408 rtsp_ctrl * ctl = ndsd->rtsp;
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
409 sdp_attr * r_attr = NULL;
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
410 sdp_range r = {0, 0};
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
411 double time = ndsd->time[NEMESI_SESSION_VIDEO] ?
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
412 ndsd->time[NEMESI_SESSION_VIDEO] :
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
413 ndsd->time[NEMESI_SESSION_AUDIO];
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
414
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
415 if (!ctl->rtsp_queue)
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
416 return;
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
417
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
418 r_attr = sdp_get_attr(ctl->rtsp_queue->info->attr_list, "range");
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
419 if (r_attr)
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
420 r = sdp_parse_range(r_attr->value);
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
421
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
422 //flags & 1 -> absolute seek
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
423 //flags & 2 -> percent seek
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
424 if (flags == 0) {
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
425 time += rel_seek_secs;
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
426 if (time < r.begin)
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
427 time = r.begin;
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
428 else if (time > r.end)
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
429 time = r.end;
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
430 ndsd->seek = time;
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
431
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
432 mp_msg(MSGT_DEMUX,MSGL_WARN,"libNemesi SEEK %f on %f - %f)\n",
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
433 time, r.begin, r.end);
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
434
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
435 if (!rtsp_seek(ctl, time, 0)) {
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
436 RTSP_Error err = rtsp_wait(ctl);
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
437 if (err.got_error) {
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
438 mp_msg(MSGT_DEMUX, MSGL_ERR,
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
439 "Error Performing Seek: %s\n",
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
440 err.message.reply_str);
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
441 demuxer->stream->eof = 1;
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
442 }
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
443 else
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
444 mp_msg(MSGT_DEMUX, MSGL_INFO, "Seek, performed\n");
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
445 }
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
446 else {
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
447 mp_msg(MSGT_DEMUX, MSGL_ERR, "Unable to pause stream to perform seek\n");
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
448 demuxer->stream->eof = 1;
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
449 }
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
450 }
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
451 else
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
452 mp_msg(MSGT_DEMUX, MSGL_ERR, "Unsupported seek type\n");
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
453 }
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
454
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
455 static int demux_rtp_control(struct demuxer_st *demuxer, int cmd, void *arg)
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
456 {
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
457 Nemesi_DemuxerStreamData * ndsd = demuxer->priv;
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
458 rtsp_ctrl * ctl = ndsd->rtsp;
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
459 sdp_attr * r_attr = NULL;
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
460 sdp_range r = {0, 0};
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
461 double time = ndsd->time[NEMESI_SESSION_VIDEO] ?
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
462 ndsd->time[NEMESI_SESSION_VIDEO] :
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
463 ndsd->time[NEMESI_SESSION_AUDIO];
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
464
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
465 if (!ctl->rtsp_queue)
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
466 return DEMUXER_CTRL_DONTKNOW;
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
467
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
468 r_attr = sdp_get_attr(ctl->rtsp_queue->info->attr_list, "range");
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
469 if (r_attr)
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
470 r = sdp_parse_range(r_attr->value);
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
471
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
472 switch (cmd) {
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
473 case DEMUXER_CTRL_GET_TIME_LENGTH:
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
474 if (r.end == 0)
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
475 return DEMUXER_CTRL_DONTKNOW;
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
476
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
477 *((double *)arg) = ((double)r.end) - ((double)r.begin);
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
478 return DEMUXER_CTRL_OK;
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
479
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
480 case DEMUXER_CTRL_GET_PERCENT_POS:
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
481 if (r.end == 0)
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
482 return DEMUXER_CTRL_DONTKNOW;
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
483
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
484 *((int *)arg) = (int)( time * 100 / (r.end - r.begin) );
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
485 return DEMUXER_CTRL_OK;
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
486 default:
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
487 return DEMUXER_CTRL_DONTKNOW;
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
488 }
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
489 }
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
490
25707
d4fe6e23283e Make all demuxer_desc_t const, thus moving them to .rodata
reimar
parents: 25490
diff changeset
491 const demuxer_desc_t demuxer_desc_rtp_nemesi = {
25270
f2a95277b9cf Rename demuxer tags to clarify
lu_zero
parents: 25267
diff changeset
492 "libnemesi RTP demuxer",
f2a95277b9cf Rename demuxer tags to clarify
lu_zero
parents: 25267
diff changeset
493 "nemesi",
24564
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
494 "",
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
495 "Alessandro Molina",
25270
f2a95277b9cf Rename demuxer tags to clarify
lu_zero
parents: 25267
diff changeset
496 "requires libnemesi",
25266
239330301b33 Make libnemesi use specific struct and DEMUXER_TYPE
lu_zero
parents: 25156
diff changeset
497 DEMUXER_TYPE_RTP_NEMESI,
24564
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
498 0, // no autodetect
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
499 NULL,
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
500 demux_rtp_fill_buffer,
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
501 demux_open_rtp,
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
502 demux_close_rtp,
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
503 demux_seek_rtp,
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
504 demux_rtp_control
e4a38a7cdb81 libnemesi support, yet another rtsp/rtp library...
lu_zero
parents:
diff changeset
505 };