4 <title>VLC media player - Web Interface</title>
5 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
6 <link type="text/css" href="css/ui-lightness/jquery-ui-1.8.13.custom.css" rel="stylesheet" />
7 <link type="text/css" href="css/main.css" rel="stylesheet" />
8 <script type="text/javascript" src="js/jquery-1.5.1.min.js"></script>
9 <script type="text/javascript" src="js/jquery-ui-1.8.13.custom.min.js"></script>
10 <script type="text/javascript" src="js/jquery.jstree.js"></script>
11 <script type="text/javascript" src="http://static.flowplayer.org/js/flowplayer-3.2.6.min.js"></script>
12 <script type="text/javascript" src="js/common.js"></script>
13 <script type="text/javascript" src="js/controlers.js"></script>
15 <script type="text/javascript">
17 $('.button').hover(function(){$(this).addClass('ui-state-hover')},function(){$(this).removeClass('ui-state-hover')});
19 function(){$(this).css({'filter':'alpha(opacity=50)','-moz-opacity':'0.5','-khtml-opacity': '0.5'})},
20 function(){$(this).css({'filter':'alpha(opacity=100)','-moz-opacity':'1','-khtml-opacity': '1'})}
23 $( "#seekSlider" ).slider({
28 stop: function( event, ui ) {
29 $( "#currentTime" ).empty();
30 $( "#currentTime" ).append( format_time(Math.round((ui.value/100)*$('#seekSlider').attr('totalLength'))) );
33 sendCommand({'command':'seek','val':Math.round((ui.value/100)*$('#seekSlider').attr('totalLength'))});
36 sendVLMCmd('control Current seek '+ui.value);
42 $( "#volumeSlider" ).slider({
47 stop: function( event, ui ) {
48 $( "#currentVolume" ).empty();
49 $( "#currentVolume" ).append( ui.value+"%" );
52 'val':Math.round(ui.value*5.12)
57 $('#buttonPlayList').click(function(){
58 $('#libraryContainer').animate({
63 $('#buttonViewer').click(function(){
64 $('#viewContainer').animate({
69 $('#buttonOffsets').click(function(){
70 $('#window_offset').dialog('open');
72 $('#buttonOpen').click(function(){
73 browse_target = 'default';
75 $('#window_browse').dialog('open');
77 $('#buttonStop').click(function(){
80 sendCommand({'command' : 'pl_stop'})
83 sendVLMCmd('control Current stop');
89 $('#buttonPlay').click(function(){
90 if($(this).attr('state')=='stopped'){
93 var id = $('.jstree-clicked','#libraryTree').length>0 ? $('.jstree-clicked','#libraryTree').first().parents().first().attr('id').substr(5) : current_id;
94 sendCommand({'command':'pl_play','id':id});
97 sendVLMCmd('control Current play');
98 flowplayer("player", "http://releases.flowplayer.org/swf/flowplayer-3.2.7.swf");
105 sendCommand({'command':'pl_pause'});
108 sendVLMCmd('control Current pause');
114 $('#buttonPrev').mousedown(function(){
120 $('#buttonPrev').mouseup(function(){
122 sendCommand({'command':'pl_previous'});
127 $('#buttonNext').mousedown(function(){
133 $('#buttonNext').mouseup(function(){
135 sendCommand({'command':'pl_next'});
140 $('#buttonFull').click(function(){
141 sendCommand({'command':'fullscreen'});
144 $('#buttonPlEmpty').click(function(){
145 sendCommand({'command':'pl_empty'})
148 $('#buttonLoop').click(function(){
149 sendCommand({'command':'pl_loop'});
152 $('#buttonRepeat').click(function(){
153 sendCommand({'command':'pl_repeat'});
156 $('#buttonShuffle').click(function(){
157 sendCommand({'command':'pl_random'});
160 $('#buttonRefresh').click(updatePlayList);
161 $('#buttonPlPlay').click(function(){
163 'command': 'pl_play',
164 'id':$('.jstree-clicked','#libraryTree').first().parents().first().attr('id').substr(5)
168 $('#buttonPlAdd').click(function(){
169 $('.jstree-clicked','#libraryTree').each(function(){
170 if($(this).parents().first().attr('uri')){
172 'command':'in_enqueue',
173 'input' : $(this).parents().first().attr('uri')
177 $('#libraryTree').jstree('deselect_all');
178 setTimeout(updatePlayList,1000);
181 $('#buttonStreams, #buttonStreams2').click(function(){
182 $('#window_streams').dialog('open');
184 $('#buttonSout').click(function(){
185 if(current_que=='main'){
186 $('#windowStreamConfirm').dialog('open');
188 $('#player').empty();
189 current_que = 'main';
190 sendVLMCmd('del Current');
195 $('#windowStreamConfirm').dialog({
198 position: ['left','top'],
202 var file = $('[current="current"]','#libraryTree').length>0 ? decodeURIComponent($('[current="current"]','#libraryTree').first().attr('uri').substr(7)) : ($('.jstree-clicked','#libraryTree').length>0 ? decodeURIComponent($('.jstree-clicked','#libraryTree').first().parents().first().attr('uri').substr(7)) : ($('#plid_'+current_id).attr('uri') ? decodeURIComponent($('#plid_'+current_id).attr('uri').substr(7)) : false));
204 var defaultStream = 'new Current broadcast enabled input "'+file+'" output #transcode{vcodec=FLV1,vb=4096,fps=25,scale=1,acodec=mp3,ab=512,samplerate=44100,channels=2}:std{access='+$('#stream_protocol').val()+',mux=ffmpeg{{mux=flv}},dst=0.0.0.0:'+$('#stream_port').val()+'/'+$('#stream_file').val()+'}';
205 sendVLMCmd('del Current;'+defaultStream+';control Current play');
206 $('#player').empty();
207 $('#player').attr('href',$('#stream_protocol').val()+'://'+$('#stream_host').val()+':'+$('#stream_port').val()+'/'+$('#stream_file').val());
208 flowplayer("player", "http://releases.flowplayer.org/swf/flowplayer-3.2.7.swf");
209 current_que = 'stream';
212 $(this).dialog('close');
215 $(this).dialog('close');
219 $('#viewContainer').animate({height: 'toggle'});
226 <div id="mainContainer" align="center">
227 <div id="controlContainer" class="ui-widget">
228 <div class="ui-widget-header" style="text-align: left;">
229 <img src="images/vlc16x16.png" alt="VLC" width="16" height="16"/> Controls
231 <table width="100%" border="0" cellspacing="0" id="controlTable" class="ui-widget-content">
233 <td id="controlButtons" width="380px">
234 <div id="buttonPrev" class="button48 ui-corner-all" title="Previous"></div>
235 <div id="buttonPlay" class="button48 ui-corner-all" title="Play"></div>
236 <div id="buttonNext" class="button48 ui-corner-all" title="Next"></div>
237 <div id="buttonOpen" class="button48 ui-corner-all" title="Open Media"></div>
238 <div id="buttonStop" class="button48 ui-corner-all" title="Stop"></div>
239 <div id="buttonFull" class="button48 ui-corner-all" title="Full Screen"></div>
240 <div id="buttonSout" class="button48 ui-corner-all" title="Easy Stream"></div>
242 <td valign="top" width="42px">
243 <div id="buttonPlayList" class="button ui-widget ui-state-default ui-corner-all" title="Hide / Show Library" style="float: left;"><span class="ui-icon ui-icon-note"></span></div>
244 <div id="buttonViewer" class="button ui-widget ui-state-default ui-corner-all" title="Hide / Show Viewer" style="float: left;"><span class="ui-icon ui-icon-video"></span></div>
245 <div id="buttonStreams" class="button ui-widget ui-state-default ui-corner-all" title="Manage Streams" style="float: left;"><span class="ui-icon ui-icon-script"></span></div>
246 <div id="buttonOffsets" class="button ui-widget ui-state-default ui-corner-all" title="Track Synchronisation" style="float: left;"><span class="ui-icon ui-icon-transfer-e-w"></span></div>
249 <div style="margin-left:20px;">
250 <div id="volumeSlider" title="Volume" style="width:200px"><img src="images/speaker-32.png" class="ui-slider-handle" alt="volume"/></div>
251 <div id="currentVolume" class="dynamic">50%</div>
254 <td rowspan="3" valign="top" width="141px">
255 <img id="albumArt" src="/art" width="141px" height="130px" alt="Album Art"/>
260 <div id="mediaTitle" class="dynamic"></div>
264 <td id="seekContainer" valign="bottom" colspan="3">
265 <div id="seekSlider" title="Seek Time" style="width:98%; margin-left:10px;"></div>
269 <div id="currentTime" class="dynamic">00:00:00</div>
272 <div id="totalTime" class="dynamic">00:00:00</div>
281 <div id="viewContainer" class="ui-widget">
282 <div class="ui-widget-header" style="text-align: left;"><img src="images/vlc16x16.png" alt="VLC" width="16" height="16"/> Viewer</div>
283 <div id="mediaViewer" class="ui-widget-content">
284 <div href="http://localhost:8081/stream.flv" style="display:block; width:100%" id="player"></div>
287 <div id="libraryContainer" class="ui-widget">
288 <div class="ui-widget-header" style="text-align: left;">
289 <img src="images/vlc16x16.png" alt="VLC" width="16" height="16"/> Library
291 <div align="left" class="ui-widget-content" style="overflow:hidden; white-space: nowrap;">
292 <div id="buttonShuffle" class="button ui-widget ui-state-default ui-corner-all" title="Shuffle"><span class="ui-icon ui-icon-shuffle"></span></div>
293 <div id="buttonLoop" class="button ui-widget ui-state-default ui-corner-all" title="Loop"><span class="ui-icon ui-icon-refresh"></span></div>
294 <div id="buttonRepeat" class="button ui-widget ui-state-default ui-corner-all" title="Repeat"><span class="ui-icon ui-icon-arrowreturnthick-1-w"></span></div>
295 <div id="buttonPlEmpty" class="button ui-widget ui-state-default ui-corner-all" title="Empty Playlist"><span class="ui-icon ui-icon-trash"></span></div>
296 <div id="buttonPlAdd" class="button ui-widget ui-state-default ui-corner-all" title="Queue Selected"><span class="ui-icon ui-icon-plus"></span></div>
297 <div id="buttonPlPlay" class="button ui-widget ui-state-default ui-corner-all" title="Play Selected"><span class="ui-icon ui-icon-play"></span></div>
298 <div id="buttonRefresh" class="button ui-widget ui-state-default ui-corner-all" title="Refresh List"><span class="ui-icon ui-icon-arrowrefresh-1-n"></span></div>
300 <div id="libraryTree" class="ui-widget-content"></div>
304 VLC <?vlc print(vlc.misc.version() .. " - Lua Web Interface - " .. vlc.misc.copyright()) ?>
308 <div id="windowStreamConfirm" title="Confirm Stream Settings">
310 By creating a stream, the <i>Main Controls</i> will operate the stream instead of the main interface.
311 The stream will be created using default settings, for more advanced configuration, or to modify the default settings,
312 select the <i>Manage Streams</i>
313 <span id="buttonStreams2" class="button ui-widget ui-state-default ui-corner-all" title="Manage Streams"><span class="ui-icon ui-icon-script"></span></span>
317 Once the stream is created, the <i>Media Viewer</i> window will display the stream.
318 Volume will be controlled by the player, and not the <i>Main Controls</i>.
321 The current playing item will be streamed. If there is no currently playing item, the first selected item from the <i>Library</i> will be the subject of the stream.
324 To stop the stream and resume normal controls, click the <i>Open Stream</i> button again.
327 Are you sure you wish to create the stream?
331 current_page = "index"
333 dialogs("browse_window.html","stream_window.html","create_stream.html","offset_window.html","mosaic_window.html");