Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
V
vlc
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Redmine
Redmine
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Metrics
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
videolan
vlc
Commits
fab0ba86
Commit
fab0ba86
authored
Aug 23, 2005
by
Sam Hocevar
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
* modules/access_output/shout.c: Shoutcast output support, courtesy of
Daniel Fischer <dan at subsignal dot org>.
parent
5ec5f619
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
279 additions
and
0 deletions
+279
-0
THANKS
THANKS
+1
-0
configure.ac
configure.ac
+12
-0
modules/access_output/Modules.am
modules/access_output/Modules.am
+1
-0
modules/access_output/shout.c
modules/access_output/shout.c
+265
-0
No files found.
THANKS
View file @
fab0ba86
...
@@ -32,6 +32,7 @@ Christopher Johnson <cjohnson at mint.net> - Qt fix in vlc.spec
...
@@ -32,6 +32,7 @@ Christopher Johnson <cjohnson at mint.net> - Qt fix in vlc.spec
Colin Simmonds <colin_simmonds at Mac.lover.org> - compile fix for Mac OS X
Colin Simmonds <colin_simmonds at Mac.lover.org> - compile fix for Mac OS X
Damian Ivereigh <damian at cisco.com> - ac3dec uninitialized data structure fix
Damian Ivereigh <damian at cisco.com> - ac3dec uninitialized data structure fix
Damien Fouilleul <damien.fouilleul at laposte.net> - DirectShow input improvements
Damien Fouilleul <damien.fouilleul at laposte.net> - DirectShow input improvements
Daniel Fischer <dan at subsignal dot org> - Shoutcast output support
Daniel Strnger <vlc at schmaller d0t de> - M3U improvements
Daniel Strnger <vlc at schmaller d0t de> - M3U improvements
David Kennedy <dkennedy at tinytoad.com> - X11 fullscreen patch
David Kennedy <dkennedy at tinytoad.com> - X11 fullscreen patch
David Weber <david_weber at gmx.de> - Mac OS X interface design & graphics (v0.5.0)
David Weber <david_weber at gmx.de> - Mac OS X interface design & graphics (v0.5.0)
...
...
configure.ac
View file @
fab0ba86
...
@@ -1269,6 +1269,18 @@ then
...
@@ -1269,6 +1269,18 @@ then
AC_DEFINE(ENABLE_SOUT, 1, Define if you want the stream output support)
AC_DEFINE(ENABLE_SOUT, 1, Define if you want the stream output support)
fi
fi
dnl Check for libshout
AC_ARG_ENABLE(shout,
[ --enable-shout libshout output plugin (default disabled)])
if test "${enable_shout}" = "yes"; then
PKG_CHECK_MODULES(SHOUT, shout >= 2.1,
[AC_DEFINE(HAVE_SHOUT, [], [Define if you have the libshout library])
VLC_ADD_PLUGINS([access_output_shout])
VLC_ADD_LDFLAGS([vlc shout],[$SHOUT_LIBS])
VLC_ADD_CFLAGS([vlc shout],[$SHOUT_CFLAGS])],
[AC_MSG_WARN(libshout library not found)])
fi
dnl
dnl
dnl HTTP daemon
dnl HTTP daemon
dnl
dnl
...
...
modules/access_output/Modules.am
View file @
fab0ba86
...
@@ -2,3 +2,4 @@ SOURCES_access_output_dummy = dummy.c
...
@@ -2,3 +2,4 @@ SOURCES_access_output_dummy = dummy.c
SOURCES_access_output_file = file.c
SOURCES_access_output_file = file.c
SOURCES_access_output_udp = udp.c
SOURCES_access_output_udp = udp.c
SOURCES_access_output_http = http.c
SOURCES_access_output_http = http.c
SOURCES_access_output_shout = shout.c
modules/access_output/shout.c
0 → 100644
View file @
fab0ba86
/*****************************************************************************
* shout.c
*****************************************************************************
* Copyright (C) 2005 VideoLAN
* $Id$
*
* Authors: Daniel Fischer <dan at subsignal dot org>
*
* 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., 59 Temple Place - Suite 330, Boston, MA 02111, USA.
*****************************************************************************/
/*****************************************************************************
* Some Comments:
*
* o this only works for ogg streams, and there's no checking about that yet.
* o i have lots of problems with audio, but i think they are not caused
* by this patch
* o there's a memleak somewhere, quite huge. i'm unsure if its somewhere
* in libshout, in vlc or even in this patch...
*
* Typical usage:
*
* vlc v4l:/dev/video:input=2:norm=pal:size=192x144 \
* --sout '#transcode{vcodec=theora,vb=300,acodec=vorb,ab=96}\
* :std{access=shout,mux=ogg,url=localhost:8005}'
*
*****************************************************************************/
/*****************************************************************************
* Preamble
*****************************************************************************/
#include <string.h>
#include <vlc/vlc.h>
#include <vlc/sout.h>
#include <shout/shout.h>
/*****************************************************************************
* Module descriptor
*****************************************************************************/
static
int
Open
(
vlc_object_t
*
);
static
void
Close
(
vlc_object_t
*
);
#define SOUT_CFG_PREFIX "sout-shout-"
vlc_module_begin
();
set_description
(
_
(
"libshout (icecast) output"
)
);
set_shortname
(
N_
(
"Shout"
));
set_capability
(
"sout access"
,
50
);
set_category
(
CAT_SOUT
);
set_subcategory
(
SUBCAT_SOUT_ACO
);
add_shortcut
(
"shout"
);
set_callbacks
(
Open
,
Close
);
vlc_module_end
();
/*****************************************************************************
* Exported prototypes
*****************************************************************************/
static
int
Write
(
sout_access_out_t
*
,
block_t
*
);
static
int
Seek
(
sout_access_out_t
*
,
off_t
);
static
int
Read
(
sout_access_out_t
*
,
block_t
*
);
struct
sout_access_out_sys_t
{
shout_t
*
p_shout
;
};
/*****************************************************************************
* Open: open the shout connection
*****************************************************************************/
static
int
Open
(
vlc_object_t
*
p_this
)
{
sout_access_out_t
*
p_access
=
(
sout_access_out_t
*
)
p_this
;
sout_access_out_sys_t
*
p_sys
;
shout_t
*
p_shout
;
long
i_ret
;
char
*
psz_user
,
*
psz_pass
,
*
psz_host
,
*
psz_mount
;
unsigned
int
i_port
;
char
*
parser
=
strdup
(
p_access
->
psz_name
);
char
*
tmp_port
;
if
(
!
p_access
->
psz_name
)
{
msg_Err
(
p_access
,
"please specify url=user:password@host:port/mountpoint"
);
return
VLC_EGENERIC
;
}
/* Parse connection data user:pwd@host:port/mountpoint */
psz_user
=
parser
;
while
(
parser
[
0
]
&&
parser
[
0
]
!=
':'
)
parser
++
;
if
(
parser
[
0
]
)
{
parser
[
0
]
=
0
;
parser
++
;
}
psz_pass
=
parser
;
while
(
parser
[
0
]
&&
parser
[
0
]
!=
'@'
)
parser
++
;
if
(
parser
[
0
]
)
{
parser
[
0
]
=
0
;
parser
++
;
}
psz_host
=
parser
;
while
(
parser
[
0
]
&&
parser
[
0
]
!=
':'
)
parser
++
;
if
(
parser
[
0
]
)
{
parser
[
0
]
=
0
;
parser
++
;
}
tmp_port
=
parser
;
while
(
parser
[
0
]
&&
parser
[
0
]
!=
'/'
)
parser
++
;
if
(
parser
[
0
]
)
{
parser
[
0
]
=
0
;
parser
++
;
}
psz_mount
=
parser
;
i_port
=
atoi
(
tmp_port
);
p_sys
=
p_access
->
p_sys
=
malloc
(
sizeof
(
sout_access_out_sys_t
)
);
if
(
!
p_sys
)
{
msg_Err
(
p_access
,
"out of memory"
);
free
(
parser
);
return
VLC_ENOMEM
;
}
p_shout
=
p_sys
->
p_shout
=
shout_new
();
if
(
!
p_shout
||
shout_set_host
(
p_shout
,
psz_host
)
!=
SHOUTERR_SUCCESS
||
shout_set_protocol
(
p_shout
,
SHOUT_PROTOCOL_HTTP
)
!=
SHOUTERR_SUCCESS
||
shout_set_port
(
p_shout
,
i_port
)
!=
SHOUTERR_SUCCESS
||
shout_set_password
(
p_shout
,
psz_pass
)
!=
SHOUTERR_SUCCESS
||
shout_set_mount
(
p_shout
,
psz_mount
)
!=
SHOUTERR_SUCCESS
||
shout_set_user
(
p_shout
,
psz_user
)
!=
SHOUTERR_SUCCESS
||
shout_set_format
(
p_shout
,
SHOUT_FORMAT_OGG
)
!=
SHOUTERR_SUCCESS
// || shout_set_nonblocking( p_shout, 1 ) != SHOUTERR_SUCCESS
)
{
msg_Err
(
p_access
,
"failed to initialize shout streaming to %s:%i%s"
,
psz_host
,
i_port
,
psz_mount
);
free
(
p_access
->
p_sys
);
free
(
parser
);
return
VLC_EGENERIC
;
}
i_ret
=
shout_open
(
p_shout
);
if
(
i_ret
==
SHOUTERR_SUCCESS
)
{
i_ret
=
SHOUTERR_CONNECTED
;
}
/*
for non-blocking, use:
while( i_ret == SHOUTERR_BUSY )
{
sleep( 1 );
i_ret = shout_get_connected( p_shout );
}
*/
if
(
i_ret
!=
SHOUTERR_CONNECTED
)
{
msg_Err
(
p_access
,
"failed to open shout stream to %s:%i%s: %s"
,
psz_host
,
i_port
,
psz_mount
,
shout_get_error
(
p_shout
)
);
free
(
p_access
->
p_sys
);
free
(
parser
);
return
VLC_EGENERIC
;
}
p_access
->
pf_write
=
Write
;
p_access
->
pf_read
=
Read
;
p_access
->
pf_seek
=
Seek
;
msg_Dbg
(
p_access
,
"shout access output opened (%s@%s:%i%s)"
,
psz_user
,
psz_host
,
i_port
,
psz_mount
);
/* Update pace control flag */
if
(
p_access
->
psz_access
&&
!
strcmp
(
p_access
->
psz_access
,
"stream"
)
)
{
p_access
->
p_sout
->
i_out_pace_nocontrol
++
;
}
/* FIXME: it should be free()d somewhere, but not here.... ? */
//free( parser );
return
VLC_SUCCESS
;
}
/*****************************************************************************
* Close: close the target
*****************************************************************************/
static
void
Close
(
vlc_object_t
*
p_this
)
{
sout_access_out_t
*
p_access
=
(
sout_access_out_t
*
)
p_this
;
if
(
p_access
->
p_sys
&&
p_access
->
p_sys
->
p_shout
)
{
shout_close
(
p_access
->
p_sys
->
p_shout
);
shout_shutdown
();
}
free
(
p_access
->
p_sys
);
/* Update pace control flag */
if
(
p_access
->
psz_access
&&
!
strcmp
(
p_access
->
psz_access
,
"stream"
)
)
{
p_access
->
p_sout
->
i_out_pace_nocontrol
--
;
}
msg_Dbg
(
p_access
,
"shout access output closed"
);
}
/*****************************************************************************
* Read: standard read -- not supported
*****************************************************************************/
static
int
Read
(
sout_access_out_t
*
p_access
,
block_t
*
p_buffer
)
{
msg_Err
(
p_access
,
"cannot read from shout"
);
return
VLC_EGENERIC
;
}
/*****************************************************************************
* Write: standard write
*****************************************************************************/
static
int
Write
(
sout_access_out_t
*
p_access
,
block_t
*
p_buffer
)
{
size_t
i_write
=
0
;
while
(
p_buffer
)
{
block_t
*
p_next
=
p_buffer
->
p_next
;
if
(
shout_send
(
p_access
->
p_sys
->
p_shout
,
p_buffer
->
p_buffer
,
p_buffer
->
i_buffer
)
==
SHOUTERR_SUCCESS
)
{
i_write
+=
p_buffer
->
i_buffer
;
}
else
{
msg_Err
(
p_access
,
"cannot write to stream: %s"
,
shout_get_error
(
p_access
->
p_sys
->
p_shout
)
);
}
block_Release
(
p_buffer
);
/* XXX: Unsure if that's the cause for some audio trouble... */
//shout_sync( p_access->p_sys->p_shout );
p_buffer
=
p_next
;
}
return
i_write
;
}
/*****************************************************************************
* Seek: seek to a specific location -- not supported
*****************************************************************************/
static
int
Seek
(
sout_access_out_t
*
p_access
,
off_t
i_pos
)
{
msg_Err
(
p_access
,
"cannot seek on shout"
);
return
VLC_EGENERIC
;
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment