mirror of
https://github.com/mpv-player/mpv
synced 2025-01-01 04:36:24 +01:00
split rtp stack, udp input layer and rtp input layer from rtp.c
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@19319 b3059339-0415-0410-9bf9-f77b7e298cf2
This commit is contained in:
parent
2410b87a64
commit
2d79655938
@ -87,6 +87,8 @@ SRCS += asf_streaming.c \
|
||||
pnm.c \
|
||||
rtp.c \
|
||||
stream_rtsp.c \
|
||||
stream_rtp.c \
|
||||
stream_udp.c \
|
||||
|
||||
SRCS += realrtsp/asmrp.c \
|
||||
realrtsp/real.c \
|
||||
|
83
stream/rtp.c
83
stream/rtp.c
@ -30,7 +30,6 @@
|
||||
#define DEBUG 1
|
||||
#include "rtp.h"
|
||||
|
||||
extern int network_bandwidth;
|
||||
|
||||
|
||||
#define DEBUG 1
|
||||
@ -205,7 +204,7 @@ int read_rtp_from_server(int fd, char *buffer, int length) {
|
||||
}
|
||||
|
||||
// Start listening on a UDP port. If multicast, join the group.
|
||||
static int rtp_open_socket( URL_t *url ) {
|
||||
int rtp_open_socket( URL_t *url ) {
|
||||
int socket_server_fd, rxsockbufsz;
|
||||
int err, err_len;
|
||||
fd_set set;
|
||||
@ -315,36 +314,6 @@ err_out:
|
||||
return -1;
|
||||
}
|
||||
|
||||
static int rtp_streaming_read( int fd, char *buffer, int size, streaming_ctrl_t *streaming_ctrl ) {
|
||||
return read_rtp_from_server( fd, buffer, size );
|
||||
}
|
||||
|
||||
static int rtp_streaming_start( stream_t *stream, int raw_udp ) {
|
||||
streaming_ctrl_t *streaming_ctrl;
|
||||
int fd;
|
||||
|
||||
if( stream==NULL ) return -1;
|
||||
streaming_ctrl = stream->streaming_ctrl;
|
||||
fd = stream->fd;
|
||||
|
||||
if( fd<0 ) {
|
||||
fd = rtp_open_socket( (streaming_ctrl->url) );
|
||||
if( fd<0 ) return -1;
|
||||
stream->fd = fd;
|
||||
}
|
||||
|
||||
if(raw_udp)
|
||||
streaming_ctrl->streaming_read = nop_streaming_read;
|
||||
else
|
||||
streaming_ctrl->streaming_read = rtp_streaming_read;
|
||||
streaming_ctrl->streaming_seek = nop_streaming_seek;
|
||||
streaming_ctrl->prebuffer_size = 64*1024; // 64 KBytes
|
||||
streaming_ctrl->buffering = 0;
|
||||
streaming_ctrl->status = streaming_playing_e;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
static int getrtp2(int fd, struct rtpheader *rh, char** data, int* lengthData) {
|
||||
static char buf[1600];
|
||||
unsigned int intP;
|
||||
@ -382,53 +351,3 @@ static int getrtp2(int fd, struct rtpheader *rh, char** data, int* lengthData) {
|
||||
|
||||
return(0);
|
||||
}
|
||||
|
||||
|
||||
static int open_s(stream_t *stream,int mode, void* opts, int* file_format) {
|
||||
URL_t *url;
|
||||
int udp = 0;
|
||||
|
||||
mp_msg(MSGT_OPEN, MSGL_INFO, "STREAM_RTP, URL: %s\n", stream->url);
|
||||
stream->streaming_ctrl = streaming_ctrl_new();
|
||||
if( stream->streaming_ctrl==NULL ) {
|
||||
return STREAM_ERROR;
|
||||
}
|
||||
stream->streaming_ctrl->bandwidth = network_bandwidth;
|
||||
url = url_new(stream->url);
|
||||
stream->streaming_ctrl->url = check4proxies(url);
|
||||
|
||||
if( url->port==0 ) {
|
||||
mp_msg(MSGT_NETWORK,MSGL_ERR,"You must enter a port number for RTP and UDP streams!\n");
|
||||
goto fail;
|
||||
}
|
||||
if(!strncmp(stream->url, "udp", 3))
|
||||
udp = 1;
|
||||
|
||||
if(rtp_streaming_start(stream, udp) < 0) {
|
||||
mp_msg(MSGT_NETWORK,MSGL_ERR,"rtp_streaming_start(rtp) failed\n");
|
||||
goto fail;
|
||||
}
|
||||
|
||||
stream->type = STREAMTYPE_STREAM;
|
||||
fixup_network_stream_cache(stream);
|
||||
return STREAM_OK;
|
||||
|
||||
fail:
|
||||
streaming_ctrl_free( stream->streaming_ctrl );
|
||||
stream->streaming_ctrl = NULL;
|
||||
return STREAM_UNSUPORTED;
|
||||
}
|
||||
|
||||
|
||||
stream_info_t stream_info_rtp_udp = {
|
||||
"mpeg rtp and upd streaming",
|
||||
"rtp and udp",
|
||||
"Dave Chapman",
|
||||
"native rtp support",
|
||||
open_s,
|
||||
{"rtp", "udp", NULL},
|
||||
NULL,
|
||||
0 // Urls are an option string
|
||||
};
|
||||
|
||||
|
||||
|
@ -34,5 +34,6 @@ struct rtpheader { /* in network byte order */
|
||||
|
||||
static int getrtp2(int fd, struct rtpheader *rh, char** data, int* lengthData);
|
||||
int read_rtp_from_server(int fd, char *buffer, int length);
|
||||
int rtp_open_socket (URL_t *url);
|
||||
|
||||
#endif
|
||||
|
@ -47,7 +47,8 @@ extern stream_info_t stream_info_netstream;
|
||||
extern stream_info_t stream_info_pnm;
|
||||
extern stream_info_t stream_info_asf;
|
||||
extern stream_info_t stream_info_rtsp;
|
||||
extern stream_info_t stream_info_rtp_udp;
|
||||
extern stream_info_t stream_info_rtp;
|
||||
extern stream_info_t stream_info_udp;
|
||||
extern stream_info_t stream_info_http1;
|
||||
extern stream_info_t stream_info_http2;
|
||||
#endif
|
||||
@ -102,7 +103,8 @@ stream_info_t* auto_open_streams[] = {
|
||||
&stream_info_sdp,
|
||||
&stream_info_rtsp_sip,
|
||||
#endif
|
||||
&stream_info_rtp_udp,
|
||||
&stream_info_rtp,
|
||||
&stream_info_udp,
|
||||
&stream_info_http2,
|
||||
#endif
|
||||
#ifdef HAS_DVBIN_SUPPORT
|
||||
|
114
stream/stream_rtp.c
Normal file
114
stream/stream_rtp.c
Normal file
@ -0,0 +1,114 @@
|
||||
/*
|
||||
* Copyright (C) 2006 Benjamin Zores
|
||||
* Stream layer for MPEG over RTP, based on previous work from Dave Chapman
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software Foundation,
|
||||
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "stream.h"
|
||||
#include "url.h"
|
||||
#include "rtp.h"
|
||||
|
||||
static int
|
||||
rtp_streaming_read (int fd, char *buffer,
|
||||
int size, streaming_ctrl_t *streaming_ctrl)
|
||||
{
|
||||
return read_rtp_from_server (fd, buffer, size);
|
||||
}
|
||||
|
||||
static int
|
||||
rtp_streaming_start (stream_t *stream)
|
||||
{
|
||||
streaming_ctrl_t *streaming_ctrl;
|
||||
int fd;
|
||||
|
||||
if (!stream)
|
||||
return -1;
|
||||
|
||||
streaming_ctrl = stream->streaming_ctrl;
|
||||
fd = stream->fd;
|
||||
|
||||
if (fd < 0)
|
||||
{
|
||||
fd = rtp_open_socket (streaming_ctrl->url);
|
||||
if (fd < 0)
|
||||
return -1;
|
||||
stream->fd = fd;
|
||||
}
|
||||
|
||||
streaming_ctrl->streaming_read = rtp_streaming_read;
|
||||
streaming_ctrl->streaming_seek = nop_streaming_seek;
|
||||
streaming_ctrl->prebuffer_size = 64 * 1024; /* 64 KBytes */
|
||||
streaming_ctrl->buffering = 0;
|
||||
streaming_ctrl->status = streaming_playing_e;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
rtp_stream_open (stream_t *stream, int mode, void *opts, int *file_format)
|
||||
{
|
||||
URL_t *url;
|
||||
extern int network_bandwidth;
|
||||
|
||||
mp_msg (MSGT_OPEN, MSGL_INFO, "STREAM_RTP, URL: %s\n", stream->url);
|
||||
stream->streaming_ctrl = streaming_ctrl_new ();
|
||||
if (!stream->streaming_ctrl)
|
||||
return STREAM_ERROR;
|
||||
|
||||
stream->streaming_ctrl->bandwidth = network_bandwidth;
|
||||
url = url_new (stream->url);
|
||||
stream->streaming_ctrl->url = check4proxies (url);
|
||||
|
||||
if (url->port == 0)
|
||||
{
|
||||
mp_msg (MSGT_NETWORK, MSGL_ERR,
|
||||
"You must enter a port number for RTP streams!\n");
|
||||
streaming_ctrl_free (stream->streaming_ctrl);
|
||||
stream->streaming_ctrl = NULL;
|
||||
|
||||
return STREAM_UNSUPORTED;
|
||||
}
|
||||
|
||||
if (rtp_streaming_start (stream) < 0)
|
||||
{
|
||||
mp_msg (MSGT_NETWORK, MSGL_ERR, "rtp_streaming_start failed\n");
|
||||
streaming_ctrl_free (stream->streaming_ctrl);
|
||||
stream->streaming_ctrl = NULL;
|
||||
|
||||
return STREAM_UNSUPORTED;
|
||||
}
|
||||
|
||||
stream->type = STREAMTYPE_STREAM;
|
||||
fixup_network_stream_cache (stream);
|
||||
|
||||
return STREAM_OK;
|
||||
}
|
||||
|
||||
stream_info_t stream_info_rtp = {
|
||||
"MPEG over RTP streaming",
|
||||
"rtp",
|
||||
"Dave Chapman, Benjamin Zores",
|
||||
"native rtp support",
|
||||
rtp_stream_open,
|
||||
{ "rtp", NULL},
|
||||
NULL,
|
||||
0 // Urls are an option string
|
||||
};
|
107
stream/stream_udp.c
Normal file
107
stream/stream_udp.c
Normal file
@ -0,0 +1,107 @@
|
||||
/*
|
||||
* Copyright (C) 2006 Benjamin Zores
|
||||
* Stream layer for MPEG over UDP, based on previous work from Dave Chapman
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software Foundation,
|
||||
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "stream.h"
|
||||
#include "url.h"
|
||||
#include "rtp.h"
|
||||
|
||||
static int
|
||||
udp_streaming_start (stream_t *stream)
|
||||
{
|
||||
streaming_ctrl_t *streaming_ctrl;
|
||||
int fd;
|
||||
|
||||
if (!stream)
|
||||
return -1;
|
||||
|
||||
streaming_ctrl = stream->streaming_ctrl;
|
||||
fd = stream->fd;
|
||||
|
||||
if (fd < 0)
|
||||
{
|
||||
fd = rtp_open_socket (streaming_ctrl->url);
|
||||
if (fd < 0)
|
||||
return -1;
|
||||
stream->fd = fd;
|
||||
}
|
||||
|
||||
streaming_ctrl->streaming_read = nop_streaming_read;
|
||||
streaming_ctrl->streaming_seek = nop_streaming_seek;
|
||||
streaming_ctrl->prebuffer_size = 64 * 1024; /* 64 KBytes */
|
||||
streaming_ctrl->buffering = 0;
|
||||
streaming_ctrl->status = streaming_playing_e;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
udp_stream_open (stream_t *stream, int mode, void *opts, int *file_format)
|
||||
{
|
||||
URL_t *url;
|
||||
extern int network_bandwidth;
|
||||
|
||||
mp_msg (MSGT_OPEN, MSGL_INFO, "STREAM_UDP, URL: %s\n", stream->url);
|
||||
stream->streaming_ctrl = streaming_ctrl_new ();
|
||||
if (!stream->streaming_ctrl)
|
||||
return STREAM_ERROR;
|
||||
|
||||
stream->streaming_ctrl->bandwidth = network_bandwidth;
|
||||
url = url_new (stream->url);
|
||||
stream->streaming_ctrl->url = check4proxies (url);
|
||||
|
||||
if (url->port == 0)
|
||||
{
|
||||
mp_msg (MSGT_NETWORK, MSGL_ERR,
|
||||
"You must enter a port number for UDP streams!\n");
|
||||
streaming_ctrl_free (stream->streaming_ctrl);
|
||||
stream->streaming_ctrl = NULL;
|
||||
|
||||
return STREAM_UNSUPORTED;
|
||||
}
|
||||
|
||||
if (udp_streaming_start (stream) < 0)
|
||||
{
|
||||
mp_msg (MSGT_NETWORK, MSGL_ERR, "udp_streaming_start failed\n");
|
||||
streaming_ctrl_free (stream->streaming_ctrl);
|
||||
stream->streaming_ctrl = NULL;
|
||||
|
||||
return STREAM_UNSUPORTED;
|
||||
}
|
||||
|
||||
stream->type = STREAMTYPE_STREAM;
|
||||
fixup_network_stream_cache (stream);
|
||||
|
||||
return STREAM_OK;
|
||||
}
|
||||
|
||||
stream_info_t stream_info_udp = {
|
||||
"MPEG over UDP streaming",
|
||||
"udp",
|
||||
"Dave Chapman, Benjamin Zores",
|
||||
"native udp support",
|
||||
udp_stream_open,
|
||||
{ "udp", NULL},
|
||||
NULL,
|
||||
0 // Urls are an option string
|
||||
};
|
Loading…
Reference in New Issue
Block a user