annotate stream/stream_live555.c @ 35033:387485e3956a

vf_ass: Improve format query. The output format should always match the input format for this filter, and we should set the EOSD capability. This also simplifies adding support for more formats. Patch by Xidorn Quan [quanxunzhen gmail com].
author reimar
date Wed, 29 Aug 2012 16:06:26 +0000
parents a93891202051
children 7505733df2b4
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
30426
ce0122361a39 Add license header to all files missing it in the stream subdirectory.
diego
parents: 29889
diff changeset
1 /*
ce0122361a39 Add license header to all files missing it in the stream subdirectory.
diego
parents: 29889
diff changeset
2 * This file is part of MPlayer.
ce0122361a39 Add license header to all files missing it in the stream subdirectory.
diego
parents: 29889
diff changeset
3 *
ce0122361a39 Add license header to all files missing it in the stream subdirectory.
diego
parents: 29889
diff changeset
4 * MPlayer is free software; you can redistribute it and/or modify
ce0122361a39 Add license header to all files missing it in the stream subdirectory.
diego
parents: 29889
diff changeset
5 * it under the terms of the GNU General Public License as published by
ce0122361a39 Add license header to all files missing it in the stream subdirectory.
diego
parents: 29889
diff changeset
6 * the Free Software Foundation; either version 2 of the License, or
ce0122361a39 Add license header to all files missing it in the stream subdirectory.
diego
parents: 29889
diff changeset
7 * (at your option) any later version.
ce0122361a39 Add license header to all files missing it in the stream subdirectory.
diego
parents: 29889
diff changeset
8 *
ce0122361a39 Add license header to all files missing it in the stream subdirectory.
diego
parents: 29889
diff changeset
9 * MPlayer is distributed in the hope that it will be useful,
ce0122361a39 Add license header to all files missing it in the stream subdirectory.
diego
parents: 29889
diff changeset
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
ce0122361a39 Add license header to all files missing it in the stream subdirectory.
diego
parents: 29889
diff changeset
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
ce0122361a39 Add license header to all files missing it in the stream subdirectory.
diego
parents: 29889
diff changeset
12 * GNU General Public License for more details.
ce0122361a39 Add license header to all files missing it in the stream subdirectory.
diego
parents: 29889
diff changeset
13 *
ce0122361a39 Add license header to all files missing it in the stream subdirectory.
diego
parents: 29889
diff changeset
14 * You should have received a copy of the GNU General Public License along
ce0122361a39 Add license header to all files missing it in the stream subdirectory.
diego
parents: 29889
diff changeset
15 * with MPlayer; if not, write to the Free Software Foundation, Inc.,
ce0122361a39 Add license header to all files missing it in the stream subdirectory.
diego
parents: 29889
diff changeset
16 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
ce0122361a39 Add license header to all files missing it in the stream subdirectory.
diego
parents: 29889
diff changeset
17 */
27167
d9b61fc3c5b7 Rename stream_livedotcom.c to stream_live555.c, the name is used everywhere.
diego
parents:
diff changeset
18
d9b61fc3c5b7 Rename stream_livedotcom.c to stream_live555.c, the name is used everywhere.
diego
parents:
diff changeset
19 #include "config.h"
d9b61fc3c5b7 Rename stream_livedotcom.c to stream_live555.c, the name is used everywhere.
diego
parents:
diff changeset
20
d9b61fc3c5b7 Rename stream_livedotcom.c to stream_live555.c, the name is used everywhere.
diego
parents:
diff changeset
21 #include <unistd.h>
d9b61fc3c5b7 Rename stream_livedotcom.c to stream_live555.c, the name is used everywhere.
diego
parents:
diff changeset
22 #include <stdlib.h>
d9b61fc3c5b7 Rename stream_livedotcom.c to stream_live555.c, the name is used everywhere.
diego
parents:
diff changeset
23 #include <stdio.h>
d9b61fc3c5b7 Rename stream_livedotcom.c to stream_live555.c, the name is used everywhere.
diego
parents:
diff changeset
24 #include <string.h>
d9b61fc3c5b7 Rename stream_livedotcom.c to stream_live555.c, the name is used everywhere.
diego
parents:
diff changeset
25
34174
a93891202051 Add missing mp_msg.h #includes, remove some unnecessary ones.
diego
parents: 31427
diff changeset
26 #include "mp_msg.h"
27167
d9b61fc3c5b7 Rename stream_livedotcom.c to stream_live555.c, the name is used everywhere.
diego
parents:
diff changeset
27 #include "stream.h"
d9b61fc3c5b7 Rename stream_livedotcom.c to stream_live555.c, the name is used everywhere.
diego
parents:
diff changeset
28 #include "network.h"
d9b61fc3c5b7 Rename stream_livedotcom.c to stream_live555.c, the name is used everywhere.
diego
parents:
diff changeset
29 #include "libmpdemux/demuxer.h"
d9b61fc3c5b7 Rename stream_livedotcom.c to stream_live555.c, the name is used everywhere.
diego
parents:
diff changeset
30 #include "help_mp.h"
d9b61fc3c5b7 Rename stream_livedotcom.c to stream_live555.c, the name is used everywhere.
diego
parents:
diff changeset
31
d9b61fc3c5b7 Rename stream_livedotcom.c to stream_live555.c, the name is used everywhere.
diego
parents:
diff changeset
32 static int _rtsp_streaming_seek(int fd, off_t pos, streaming_ctrl_t* streaming_ctrl) {
d9b61fc3c5b7 Rename stream_livedotcom.c to stream_live555.c, the name is used everywhere.
diego
parents:
diff changeset
33 return -1; // For now, we don't handle RTSP stream seeking
d9b61fc3c5b7 Rename stream_livedotcom.c to stream_live555.c, the name is used everywhere.
diego
parents:
diff changeset
34 }
d9b61fc3c5b7 Rename stream_livedotcom.c to stream_live555.c, the name is used everywhere.
diego
parents:
diff changeset
35
d9b61fc3c5b7 Rename stream_livedotcom.c to stream_live555.c, the name is used everywhere.
diego
parents:
diff changeset
36 static int rtsp_streaming_start(stream_t* stream) {
d9b61fc3c5b7 Rename stream_livedotcom.c to stream_live555.c, the name is used everywhere.
diego
parents:
diff changeset
37 stream->streaming_ctrl->streaming_seek = _rtsp_streaming_seek;
d9b61fc3c5b7 Rename stream_livedotcom.c to stream_live555.c, the name is used everywhere.
diego
parents:
diff changeset
38 return 0;
d9b61fc3c5b7 Rename stream_livedotcom.c to stream_live555.c, the name is used everywhere.
diego
parents:
diff changeset
39 }
d9b61fc3c5b7 Rename stream_livedotcom.c to stream_live555.c, the name is used everywhere.
diego
parents:
diff changeset
40
d9b61fc3c5b7 Rename stream_livedotcom.c to stream_live555.c, the name is used everywhere.
diego
parents:
diff changeset
41
d9b61fc3c5b7 Rename stream_livedotcom.c to stream_live555.c, the name is used everywhere.
diego
parents:
diff changeset
42 static int open_live_rtsp_sip(stream_t *stream,int mode, void* opts, int* file_format) {
d9b61fc3c5b7 Rename stream_livedotcom.c to stream_live555.c, the name is used everywhere.
diego
parents:
diff changeset
43 URL_t *url;
d9b61fc3c5b7 Rename stream_livedotcom.c to stream_live555.c, the name is used everywhere.
diego
parents:
diff changeset
44
d9b61fc3c5b7 Rename stream_livedotcom.c to stream_live555.c, the name is used everywhere.
diego
parents:
diff changeset
45 stream->streaming_ctrl = streaming_ctrl_new();
d9b61fc3c5b7 Rename stream_livedotcom.c to stream_live555.c, the name is used everywhere.
diego
parents:
diff changeset
46 if( stream->streaming_ctrl==NULL ) {
d9b61fc3c5b7 Rename stream_livedotcom.c to stream_live555.c, the name is used everywhere.
diego
parents:
diff changeset
47 return STREAM_ERROR;
d9b61fc3c5b7 Rename stream_livedotcom.c to stream_live555.c, the name is used everywhere.
diego
parents:
diff changeset
48 }
d9b61fc3c5b7 Rename stream_livedotcom.c to stream_live555.c, the name is used everywhere.
diego
parents:
diff changeset
49 stream->streaming_ctrl->bandwidth = network_bandwidth;
d9b61fc3c5b7 Rename stream_livedotcom.c to stream_live555.c, the name is used everywhere.
diego
parents:
diff changeset
50 url = url_new(stream->url);
d9b61fc3c5b7 Rename stream_livedotcom.c to stream_live555.c, the name is used everywhere.
diego
parents:
diff changeset
51 stream->streaming_ctrl->url = check4proxies(url);
d9b61fc3c5b7 Rename stream_livedotcom.c to stream_live555.c, the name is used everywhere.
diego
parents:
diff changeset
52 //url_free(url);
d9b61fc3c5b7 Rename stream_livedotcom.c to stream_live555.c, the name is used everywhere.
diego
parents:
diff changeset
53
d9b61fc3c5b7 Rename stream_livedotcom.c to stream_live555.c, the name is used everywhere.
diego
parents:
diff changeset
54 mp_msg(MSGT_OPEN, MSGL_INFO, "STREAM_LIVE555, URL: %s\n", stream->url);
d9b61fc3c5b7 Rename stream_livedotcom.c to stream_live555.c, the name is used everywhere.
diego
parents:
diff changeset
55
d9b61fc3c5b7 Rename stream_livedotcom.c to stream_live555.c, the name is used everywhere.
diego
parents:
diff changeset
56 if(rtsp_streaming_start(stream) < 0) {
d9b61fc3c5b7 Rename stream_livedotcom.c to stream_live555.c, the name is used everywhere.
diego
parents:
diff changeset
57 mp_msg(MSGT_NETWORK,MSGL_ERR,"rtsp_streaming_start failed\n");
d9b61fc3c5b7 Rename stream_livedotcom.c to stream_live555.c, the name is used everywhere.
diego
parents:
diff changeset
58 goto fail;
d9b61fc3c5b7 Rename stream_livedotcom.c to stream_live555.c, the name is used everywhere.
diego
parents:
diff changeset
59 }
d9b61fc3c5b7 Rename stream_livedotcom.c to stream_live555.c, the name is used everywhere.
diego
parents:
diff changeset
60
d9b61fc3c5b7 Rename stream_livedotcom.c to stream_live555.c, the name is used everywhere.
diego
parents:
diff changeset
61 *file_format = DEMUXER_TYPE_RTP;
d9b61fc3c5b7 Rename stream_livedotcom.c to stream_live555.c, the name is used everywhere.
diego
parents:
diff changeset
62 stream->type = STREAMTYPE_STREAM;
29889
031fd59bcb79 10l to Reimar: Fix typo.
cehoyos
parents: 29888
diff changeset
63 stream->flags = STREAM_NON_CACHEABLE;
27167
d9b61fc3c5b7 Rename stream_livedotcom.c to stream_live555.c, the name is used everywhere.
diego
parents:
diff changeset
64 return STREAM_OK;
d9b61fc3c5b7 Rename stream_livedotcom.c to stream_live555.c, the name is used everywhere.
diego
parents:
diff changeset
65
d9b61fc3c5b7 Rename stream_livedotcom.c to stream_live555.c, the name is used everywhere.
diego
parents:
diff changeset
66 fail:
d9b61fc3c5b7 Rename stream_livedotcom.c to stream_live555.c, the name is used everywhere.
diego
parents:
diff changeset
67 streaming_ctrl_free( stream->streaming_ctrl );
d9b61fc3c5b7 Rename stream_livedotcom.c to stream_live555.c, the name is used everywhere.
diego
parents:
diff changeset
68 stream->streaming_ctrl = NULL;
d9b61fc3c5b7 Rename stream_livedotcom.c to stream_live555.c, the name is used everywhere.
diego
parents:
diff changeset
69 return STREAM_ERROR;
d9b61fc3c5b7 Rename stream_livedotcom.c to stream_live555.c, the name is used everywhere.
diego
parents:
diff changeset
70 }
d9b61fc3c5b7 Rename stream_livedotcom.c to stream_live555.c, the name is used everywhere.
diego
parents:
diff changeset
71
d9b61fc3c5b7 Rename stream_livedotcom.c to stream_live555.c, the name is used everywhere.
diego
parents:
diff changeset
72 static int open_live_sdp(stream_t *stream,int mode, void* opts, int* file_format) {
d9b61fc3c5b7 Rename stream_livedotcom.c to stream_live555.c, the name is used everywhere.
diego
parents:
diff changeset
73 int f;
d9b61fc3c5b7 Rename stream_livedotcom.c to stream_live555.c, the name is used everywhere.
diego
parents:
diff changeset
74 char *filename = stream->url;
d9b61fc3c5b7 Rename stream_livedotcom.c to stream_live555.c, the name is used everywhere.
diego
parents:
diff changeset
75 off_t len;
d9b61fc3c5b7 Rename stream_livedotcom.c to stream_live555.c, the name is used everywhere.
diego
parents:
diff changeset
76 char* sdpDescription;
d9b61fc3c5b7 Rename stream_livedotcom.c to stream_live555.c, the name is used everywhere.
diego
parents:
diff changeset
77 ssize_t numBytesRead;
d9b61fc3c5b7 Rename stream_livedotcom.c to stream_live555.c, the name is used everywhere.
diego
parents:
diff changeset
78
d9b61fc3c5b7 Rename stream_livedotcom.c to stream_live555.c, the name is used everywhere.
diego
parents:
diff changeset
79 if(strncmp("sdp://",filename,6) == 0) {
d9b61fc3c5b7 Rename stream_livedotcom.c to stream_live555.c, the name is used everywhere.
diego
parents:
diff changeset
80 filename += 6;
d9b61fc3c5b7 Rename stream_livedotcom.c to stream_live555.c, the name is used everywhere.
diego
parents:
diff changeset
81 f = open(filename,O_RDONLY|O_BINARY);
d9b61fc3c5b7 Rename stream_livedotcom.c to stream_live555.c, the name is used everywhere.
diego
parents:
diff changeset
82 if(f < 0) {
d9b61fc3c5b7 Rename stream_livedotcom.c to stream_live555.c, the name is used everywhere.
diego
parents:
diff changeset
83 mp_msg(MSGT_OPEN,MSGL_ERR,MSGTR_FileNotFound,filename);
d9b61fc3c5b7 Rename stream_livedotcom.c to stream_live555.c, the name is used everywhere.
diego
parents:
diff changeset
84 return STREAM_ERROR;
d9b61fc3c5b7 Rename stream_livedotcom.c to stream_live555.c, the name is used everywhere.
diego
parents:
diff changeset
85 }
d9b61fc3c5b7 Rename stream_livedotcom.c to stream_live555.c, the name is used everywhere.
diego
parents:
diff changeset
86
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 27167
diff changeset
87 len=lseek(f,0,SEEK_END);
27167
d9b61fc3c5b7 Rename stream_livedotcom.c to stream_live555.c, the name is used everywhere.
diego
parents:
diff changeset
88 lseek(f,0,SEEK_SET);
d9b61fc3c5b7 Rename stream_livedotcom.c to stream_live555.c, the name is used everywhere.
diego
parents:
diff changeset
89 if(len == -1)
d9b61fc3c5b7 Rename stream_livedotcom.c to stream_live555.c, the name is used everywhere.
diego
parents:
diff changeset
90 return STREAM_ERROR;
d9b61fc3c5b7 Rename stream_livedotcom.c to stream_live555.c, the name is used everywhere.
diego
parents:
diff changeset
91 if(len > SIZE_MAX - 1)
d9b61fc3c5b7 Rename stream_livedotcom.c to stream_live555.c, the name is used everywhere.
diego
parents:
diff changeset
92 return STREAM_ERROR;
d9b61fc3c5b7 Rename stream_livedotcom.c to stream_live555.c, the name is used everywhere.
diego
parents:
diff changeset
93
d9b61fc3c5b7 Rename stream_livedotcom.c to stream_live555.c, the name is used everywhere.
diego
parents:
diff changeset
94 sdpDescription = malloc(len+1);
d9b61fc3c5b7 Rename stream_livedotcom.c to stream_live555.c, the name is used everywhere.
diego
parents:
diff changeset
95 if(sdpDescription == NULL) return STREAM_ERROR;
d9b61fc3c5b7 Rename stream_livedotcom.c to stream_live555.c, the name is used everywhere.
diego
parents:
diff changeset
96 numBytesRead = read(f, sdpDescription, len);
d9b61fc3c5b7 Rename stream_livedotcom.c to stream_live555.c, the name is used everywhere.
diego
parents:
diff changeset
97 if(numBytesRead != len) {
d9b61fc3c5b7 Rename stream_livedotcom.c to stream_live555.c, the name is used everywhere.
diego
parents:
diff changeset
98 free(sdpDescription);
d9b61fc3c5b7 Rename stream_livedotcom.c to stream_live555.c, the name is used everywhere.
diego
parents:
diff changeset
99 return STREAM_ERROR;
d9b61fc3c5b7 Rename stream_livedotcom.c to stream_live555.c, the name is used everywhere.
diego
parents:
diff changeset
100 }
d9b61fc3c5b7 Rename stream_livedotcom.c to stream_live555.c, the name is used everywhere.
diego
parents:
diff changeset
101 sdpDescription[len] = '\0'; // to be safe
d9b61fc3c5b7 Rename stream_livedotcom.c to stream_live555.c, the name is used everywhere.
diego
parents:
diff changeset
102 stream->priv = sdpDescription;
d9b61fc3c5b7 Rename stream_livedotcom.c to stream_live555.c, the name is used everywhere.
diego
parents:
diff changeset
103
d9b61fc3c5b7 Rename stream_livedotcom.c to stream_live555.c, the name is used everywhere.
diego
parents:
diff changeset
104 stream->type = STREAMTYPE_SDP;
d9b61fc3c5b7 Rename stream_livedotcom.c to stream_live555.c, the name is used everywhere.
diego
parents:
diff changeset
105 *file_format = DEMUXER_TYPE_RTP;
d9b61fc3c5b7 Rename stream_livedotcom.c to stream_live555.c, the name is used everywhere.
diego
parents:
diff changeset
106 return STREAM_OK;
d9b61fc3c5b7 Rename stream_livedotcom.c to stream_live555.c, the name is used everywhere.
diego
parents:
diff changeset
107 }
d9b61fc3c5b7 Rename stream_livedotcom.c to stream_live555.c, the name is used everywhere.
diego
parents:
diff changeset
108 return STREAM_UNSUPPORTED;
d9b61fc3c5b7 Rename stream_livedotcom.c to stream_live555.c, the name is used everywhere.
diego
parents:
diff changeset
109 }
d9b61fc3c5b7 Rename stream_livedotcom.c to stream_live555.c, the name is used everywhere.
diego
parents:
diff changeset
110
d9b61fc3c5b7 Rename stream_livedotcom.c to stream_live555.c, the name is used everywhere.
diego
parents:
diff changeset
111
d9b61fc3c5b7 Rename stream_livedotcom.c to stream_live555.c, the name is used everywhere.
diego
parents:
diff changeset
112 const stream_info_t stream_info_rtsp_sip = {
d9b61fc3c5b7 Rename stream_livedotcom.c to stream_live555.c, the name is used everywhere.
diego
parents:
diff changeset
113 "standard RTSP and SIP",
d9b61fc3c5b7 Rename stream_livedotcom.c to stream_live555.c, the name is used everywhere.
diego
parents:
diff changeset
114 "RTSP and SIP",
d9b61fc3c5b7 Rename stream_livedotcom.c to stream_live555.c, the name is used everywhere.
diego
parents:
diff changeset
115 "Ross Finlayson",
d9b61fc3c5b7 Rename stream_livedotcom.c to stream_live555.c, the name is used everywhere.
diego
parents:
diff changeset
116 "Uses LIVE555 Streaming Media library.",
d9b61fc3c5b7 Rename stream_livedotcom.c to stream_live555.c, the name is used everywhere.
diego
parents:
diff changeset
117 open_live_rtsp_sip,
d9b61fc3c5b7 Rename stream_livedotcom.c to stream_live555.c, the name is used everywhere.
diego
parents:
diff changeset
118 {"rtsp", "sip", NULL },
d9b61fc3c5b7 Rename stream_livedotcom.c to stream_live555.c, the name is used everywhere.
diego
parents:
diff changeset
119 NULL,
d9b61fc3c5b7 Rename stream_livedotcom.c to stream_live555.c, the name is used everywhere.
diego
parents:
diff changeset
120 0 // Urls are an option string
d9b61fc3c5b7 Rename stream_livedotcom.c to stream_live555.c, the name is used everywhere.
diego
parents:
diff changeset
121 };
d9b61fc3c5b7 Rename stream_livedotcom.c to stream_live555.c, the name is used everywhere.
diego
parents:
diff changeset
122
d9b61fc3c5b7 Rename stream_livedotcom.c to stream_live555.c, the name is used everywhere.
diego
parents:
diff changeset
123 const stream_info_t stream_info_sdp = {
d9b61fc3c5b7 Rename stream_livedotcom.c to stream_live555.c, the name is used everywhere.
diego
parents:
diff changeset
124 "SDP stream descriptor",
d9b61fc3c5b7 Rename stream_livedotcom.c to stream_live555.c, the name is used everywhere.
diego
parents:
diff changeset
125 "SDP",
d9b61fc3c5b7 Rename stream_livedotcom.c to stream_live555.c, the name is used everywhere.
diego
parents:
diff changeset
126 "Ross Finlayson",
d9b61fc3c5b7 Rename stream_livedotcom.c to stream_live555.c, the name is used everywhere.
diego
parents:
diff changeset
127 "Uses LIVE555 Streaming Media library.",
d9b61fc3c5b7 Rename stream_livedotcom.c to stream_live555.c, the name is used everywhere.
diego
parents:
diff changeset
128 open_live_sdp,
d9b61fc3c5b7 Rename stream_livedotcom.c to stream_live555.c, the name is used everywhere.
diego
parents:
diff changeset
129 {"sdp", NULL },
d9b61fc3c5b7 Rename stream_livedotcom.c to stream_live555.c, the name is used everywhere.
diego
parents:
diff changeset
130 NULL,
d9b61fc3c5b7 Rename stream_livedotcom.c to stream_live555.c, the name is used everywhere.
diego
parents:
diff changeset
131 0 // Urls are an option string
d9b61fc3c5b7 Rename stream_livedotcom.c to stream_live555.c, the name is used everywhere.
diego
parents:
diff changeset
132 };