Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
V
vlc-1.1
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-1.1
Commits
99e83fd4
Commit
99e83fd4
authored
Sep 20, 2004
by
Gildas Bazin
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
* modules/misc/rtsp.c, src/misc/vlm.c: VOD RTSP support is beginning to work.
parent
b6be61a2
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
115 additions
and
11 deletions
+115
-11
include/vlc_vlm.h
include/vlc_vlm.h
+1
-0
include/vlc_vod.h
include/vlc_vod.h
+26
-0
modules/misc/rtsp.c
modules/misc/rtsp.c
+26
-8
src/misc/vlm.c
src/misc/vlm.c
+62
-3
No files found.
include/vlc_vlm.h
View file @
99e83fd4
...
...
@@ -69,6 +69,7 @@ typedef struct
/* only for vod */
vod_media_t
*
vod_media
;
char
*
psz_vod_output
;
/* actual input instances */
int
i_instance
;
...
...
include/vlc_vod.h
View file @
99e83fd4
...
...
@@ -37,6 +37,32 @@ struct vod_t
int
(
*
pf_media_add_es
)(
vod_t
*
,
vod_media_t
*
,
es_format_t
*
);
void
(
*
pf_media_del_es
)(
vod_t
*
,
vod_media_t
*
,
es_format_t
*
);
/* Owner properties */
int
(
*
pf_media_control
)
(
void
*
,
vod_media_t
*
,
char
*
,
int
,
va_list
);
void
*
p_data
;
};
static
inline
int
vod_MediaControl
(
vod_t
*
p_vod
,
vod_media_t
*
p_media
,
char
*
psz_id
,
int
i_query
,
...
)
{
va_list
args
;
int
i_result
;
if
(
!
p_vod
->
pf_media_control
)
return
VLC_EGENERIC
;
va_start
(
args
,
i_query
);
i_result
=
p_vod
->
pf_media_control
(
p_vod
->
p_data
,
p_media
,
psz_id
,
i_query
,
args
);
va_end
(
args
);
return
i_result
;
}
enum
vod_query_e
{
VOD_MEDIA_PLAY
,
/* arg1= double * res= */
VOD_MEDIA_PAUSE
,
/* arg1= double * res= */
VOD_MEDIA_STOP
,
/* arg1= double res=can fail */
VOD_MEDIA_SEEK
,
/* arg1= double * res= */
};
#endif
modules/misc/rtsp.c
View file @
99e83fd4
...
...
@@ -577,6 +577,8 @@ static int RtspCallback( httpd_callback_sys_t *p_args, httpd_client_t *cl,
case
HTTPD_MSG_PLAY
:
{
rtsp_client_t
*
rtsp
;
char
*
psz_output
,
*
ip
;
int
i
,
i_port_audio
=
0
,
i_port_video
=
0
;
/* for now only multicast so easy */
answer
->
i_status
=
200
;
...
...
@@ -588,17 +590,34 @@ static int RtspCallback( httpd_callback_sys_t *p_args, httpd_client_t *cl,
msg_Dbg
(
p_vod
,
"HTTPD_MSG_PLAY for session: %s"
,
psz_session
);
rtsp
=
RtspClientGet
(
p_media
,
psz_session
);
if
(
rtsp
&&
!
rtsp
->
b_playing
)
if
(
!
rtsp
||
rtsp
->
b_playing
)
break
;
if
(
!
(
ip
=
httpd_ClientIP
(
cl
))
)
break
;
rtsp
->
b_playing
=
VLC_TRUE
;
/* FIXME for != 1 video and 1 audio */
for
(
i
=
0
;
i
<
p_media
->
i_es
;
i
++
)
{
rtsp
->
b_playing
=
VLC_TRUE
;
/* TODO: do something useful */
if
(
p_media
->
es
[
i
]
->
fmt
.
i_cat
==
AUDIO_ES
)
i_port_audio
=
p_media
->
es
[
i
]
->
i_port
;
if
(
p_media
->
es
[
i
]
->
fmt
.
i_cat
==
VIDEO_ES
)
i_port_video
=
p_media
->
es
[
i
]
->
i_port
;
}
asprintf
(
&
psz_output
,
"rtp{dst=%s,port-video=%i,port-audio=%i}"
,
ip
,
i_port_video
,
i_port_audio
);
vod_MediaControl
(
p_vod
,
p_media
,
psz_session
,
VOD_MEDIA_PLAY
,
psz_output
);
free
(
psz_output
);
free
(
ip
);
break
;
}
case
HTTPD_MSG_PAUSE
:
psz_session
=
httpd_MsgGet
(
query
,
"Session"
);
msg_Dbg
(
p_vod
,
"HTTPD_MSG_PAUSE for session: %s"
,
psz_session
);
vod_MediaControl
(
p_vod
,
p_media
,
psz_session
,
VOD_MEDIA_PAUSE
);
/* TODO: do something useful */
return
VLC_EGENERIC
;
...
...
@@ -616,11 +635,10 @@ static int RtspCallback( httpd_callback_sys_t *p_args, httpd_client_t *cl,
msg_Dbg
(
p_vod
,
"HTTPD_MSG_TEARDOWN for session: %s"
,
psz_session
);
rtsp
=
RtspClientGet
(
p_media
,
psz_session
);
if
(
rtsp
)
{
/* TODO: do something useful */
RtspClientDel
(
p_media
,
rtsp
);
}
if
(
!
rtsp
)
break
;
vod_MediaControl
(
p_vod
,
p_media
,
psz_session
,
VOD_MEDIA_STOP
);
RtspClientDel
(
p_media
,
rtsp
);
break
;
}
...
...
src/misc/vlm.c
View file @
99e83fd4
...
...
@@ -62,6 +62,8 @@ static void vlm_ScheduleDelete( vlm_t *, vlm_schedule_t *, char *);
static
int
vlm_ScheduleSetup
(
vlm_schedule_t
*
,
char
*
,
char
*
);
static
vlm_schedule_t
*
vlm_ScheduleSearch
(
vlm_t
*
,
char
*
);
static
int
vlm_MediaVodControl
(
void
*
,
vod_media_t
*
,
char
*
,
int
,
va_list
);
static
int
ExecuteCommand
(
vlm_t
*
,
char
*
,
vlm_message_t
**
);
static
int
Manage
(
vlc_object_t
*
);
...
...
@@ -755,6 +757,9 @@ static vlm_media_t *vlm_MediaNew( vlm_t *vlm, char *psz_name, int i_type )
free
(
media
);
return
NULL
;
}
vlm
->
vod
->
p_data
=
vlm
;
vlm
->
vod
->
pf_media_control
=
vlm_MediaVodControl
;
}
if
(
i_type
==
VOD_TYPE
)
vlm
->
i_vod
++
;
...
...
@@ -762,6 +767,7 @@ static vlm_media_t *vlm_MediaNew( vlm_t *vlm, char *psz_name, int i_type )
media
->
b_enabled
=
VLC_FALSE
;
media
->
b_loop
=
VLC_FALSE
;
media
->
vod_media
=
NULL
;
media
->
psz_vod_output
=
NULL
;
media
->
i_input
=
0
;
media
->
input
=
NULL
;
media
->
psz_output
=
NULL
;
...
...
@@ -960,11 +966,14 @@ static int vlm_MediaControl( vlm_t *vlm, vlm_media_t *media, char *psz_id,
vlc_input_item_Init
(
VLC_OBJECT
(
vlm
),
&
p_instance
->
item
);
p_instance
->
p_input
=
0
;
if
(
media
->
psz_output
!=
NULL
)
if
(
media
->
psz_output
!=
NULL
||
media
->
psz_vod_output
!=
NULL
)
{
p_instance
->
item
.
ppsz_options
=
malloc
(
sizeof
(
char
*
)
);
asprintf
(
&
p_instance
->
item
.
ppsz_options
[
0
],
"sout=%s"
,
media
->
psz_output
);
asprintf
(
&
p_instance
->
item
.
ppsz_options
[
0
],
"sout=%s%s%s"
,
media
->
psz_output
?
media
->
psz_output
:
""
,
(
media
->
psz_output
&&
media
->
psz_vod_output
)
?
":"
:
media
->
psz_vod_output
?
"#"
:
""
,
media
->
psz_vod_output
?
media
->
psz_vod_output
:
""
);
p_instance
->
item
.
i_options
=
1
;
}
...
...
@@ -1957,6 +1966,56 @@ static char *vlm_Save( vlm_t *vlm )
return
save
;
}
/*****************************************************************************
* Manage:
*****************************************************************************/
static
int
vlm_MediaVodControl
(
void
*
p_private
,
vod_media_t
*
p_vod_media
,
char
*
psz_id
,
int
i_query
,
va_list
args
)
{
vlm_t
*
vlm
=
(
vlm_t
*
)
p_private
;
int
i
,
i_ret
=
VLC_EGENERIC
;
if
(
!
p_private
||
!
p_vod_media
)
return
VLC_EGENERIC
;
vlc_mutex_lock
(
&
vlm
->
lock
);
/* Find media */
for
(
i
=
0
;
i
<
vlm
->
i_media
;
i
++
)
{
if
(
p_vod_media
==
vlm
->
media
[
i
]
->
vod_media
)
break
;
}
if
(
i
==
vlm
->
i_media
)
{
vlc_mutex_unlock
(
&
vlm
->
lock
);
return
VLC_EGENERIC
;
}
switch
(
i_query
)
{
case
VOD_MEDIA_PLAY
:
vlm
->
media
[
i
]
->
psz_vod_output
=
(
char
*
)
va_arg
(
args
,
char
*
);
i_ret
=
vlm_MediaControl
(
vlm
,
vlm
->
media
[
i
],
psz_id
,
"play"
,
0
);
vlm
->
media
[
i
]
->
psz_vod_output
=
0
;
break
;
case
VOD_MEDIA_PAUSE
:
i_ret
=
vlm_MediaControl
(
vlm
,
vlm
->
media
[
i
],
psz_id
,
"pause"
,
0
);
break
;
case
VOD_MEDIA_STOP
:
i_ret
=
vlm_MediaControl
(
vlm
,
vlm
->
media
[
i
],
psz_id
,
"stop"
,
0
);
break
;
default:
break
;
}
vlc_mutex_unlock
(
&
vlm
->
lock
);
return
i_ret
;
}
/*****************************************************************************
* Manage:
*****************************************************************************/
...
...
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