]> git.sesse.net Git - vlc/blob - projects/activex/test.html
activex: missing media_list lock/unlock
[vlc] / projects / activex / test.html
1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">\r
2 <HTML>\r
3 <TITLE>VLC Plugin test page</TITLE>\r
4 \r
5 <SCRIPT language="JavaScript"><!--\r
6 function init()\r
7 {\r
8     if( navigator.appName.indexOf("Microsoft Internet")==-1 )\r
9     {\r
10         onVLCPluginReady()\r
11     }\r
12     else if( document.readyState == 'complete' )\r
13     {\r
14         onVLCPluginReady();\r
15     }\r
16     else\r
17     {\r
18         /* Explorer loads plugins asynchronously */\r
19         document.onreadystatechange=function()\r
20         {\r
21             if( document.readyState == 'complete' )\r
22             {\r
23                 onVLCPluginReady();\r
24             }\r
25         }\r
26     }\r
27 }\r
28 \r
29 function getVLC(name)\r
30 {\r
31     if (window.document[name])\r
32     {\r
33         return window.document[name];\r
34     }\r
35     if (navigator.appName.indexOf("Microsoft Internet")==-1)\r
36     {\r
37         if (document.embeds && document.embeds[name])\r
38             return document.embeds[name];\r
39     }\r
40     else // if (navigator.appName.indexOf("Microsoft Internet")!=-1)\r
41     {\r
42         return document.getElementById(name);\r
43     }\r
44 }\r
45 \r
46 function onVLCPluginReady()\r
47 {\r
48     updateVolume(0);\r
49 }\r
50 \r
51 //--></SCRIPT>\r
52 \r
53 <BODY onLoad="init();">\r
54 <TABLE>\r
55 <TR><TD colspan="2">\r
56 MRL:\r
57 <INPUT size="90" id="targetTextField" value="">\r
58 <INPUT type=submit value="Go" onClick="doGo(document.getElementById('targetTextField').value);">\r
59 <INPUT type=submit value="Add" onClick="doAdd(document.getElementById('targetTextField').value);">\r
60 </TD></TR>\r
61 <TR><TD align="center" colspan="2">\r
62 <!--\r
63 Insert VideoLAN.VLCPlugin.2\r
64 -->\r
65 <OBJECT classid="clsid:9BE31822-FDAD-461B-AD51-BE1D1C159921"\r
66         width="640"\r
67         height="480"\r
68         id="vlc"\r
69         events="True">\r
70 <param name="MRL" value="" />\r
71 <param name="ShowDisplay" value="True" />\r
72 <param name="AutoLoop" value="False" />\r
73 <param name="AutoPlay" value="False" />\r
74 <param name="Volume" value="50" />\r
75 <param name="toolbar" value="true" />\r
76 <param name="StartTime" value="0" />\r
77 <EMBED pluginspage="http://www.videolan.org"\r
78        type="application/x-vlc-plugin"\r
79        version="VideoLAN.VLCPlugin.2"\r
80        width="640"\r
81        height="480"\r
82        toolbar="true"\r
83        text="Waiting for video"\r
84        name="vlc">\r
85 </EMBED>\r
86 </OBJECT>\r
87 </TD></TR>\r
88 <TR><TD colspan="2">\r
89 <TABLE><TR>\r
90 <TD valign="top" width="550">\r
91 <!--\r
92 Insert Slider widget\r
93 -->\r
94 </TD><TD width="15%">\r
95 <DIV id="info" style="text-align:center">-:--:--/-:--:--</DIV>\r
96 <DIV id="state" style="text-align:center">Stopped...</DIV>\r
97 </TD></TR></TABLE>\r
98 </TD></TR>\r
99 <TR><TD>\r
100 <INPUT type=button id="PlayOrPause" value=" Play " onClick='doPlayOrPause();'>\r
101 <INPUT type=button value="Stop" onClick='doStop();'>\r
102 &nbsp;\r
103 <INPUT type=button value=" << " onClick='doPlaySlower();'>\r
104 <INPUT type=button value="Reverse" onClick='doReverse();'>\r
105 <INPUT type=button value=" >> " onClick='doPlayFaster();'>\r
106 &nbsp;\r
107 <INPUT type=button value="Fullscreen" onClick='getVLC("vlc").video.toggleFullscreen();'>\r
108 <INPUT type=button value="Version" onClick='alert("vlc " + getVLC("vlc").VersionInfo);'>\r
109 <INPUT type=button value=" State " onClick='alert("state: " + getVLC("vlc").input.state);'>\r
110 </TD><TD align="right">\r
111 <SPAN style="text-align:center">Volume:</SPAN>\r
112 <INPUT type=button value=" - " onClick='updateVolume(-10)'>\r
113 <SPAN id="volumeTextField" style="text-align:center">--</SPAN>\r
114 <INPUT type=button value=" + " onClick='updateVolume(+10)'>\r
115 <INPUT type=button value="Mute" onClick='getVLC("vlc").audio.toggleMute();'>\r
116 </TD>\r
117 </TR>\r
118 <TR><TD>Playlist:\r
119 <INPUT type=button value="Prev" onClick='getVLC("vlc").playlist.prev();'>\r
120 <INPUT type=button value="Next" onClick='getVLC("vlc").playlist.next();'>\r
121 <INPUT type=button value="Clear All" onClick='doPlaylistClearAll();'>\r
122     Aspect Ratio:\r
123     <SELECT readonly onChange='doAspectRatio(this.value)'>\r
124       <OPTION value="default">Default</OPTION>\r
125       <OPTION value="1:1">1:1</OPTION>\r
126       <OPTION value="4:3">4:3</OPTION>\r
127       <OPTION value="16:9">16:9</OPTION>\r
128       <OPTION value="221:100">221:100</OPTION>\r
129       <OPTION value="5:4">5:4</OPTION>\r
130     </SELECT>\r
131 </TD><TD align="right">\r
132 <INPUT type=button id="itemCount" value=" Items 0 " onClick='doItemCount();'>\r
133 <INPUT size=4 value="" id="removeid"><INPUT type=submit value="Delete" onClick="doRemoveItem(document.getElementById('removeid').value);">\r
134 </TD>\r
135 </TR>\r
136 <TR><TD>Audio Channel:\r
137   <SELECT readonly onClick='doAudioChannel(this.value);'>\r
138     <OPTION value=1>Stereo</OPTION>\r
139     <OPTION value=2>Reverse Stereo</OPTION>\r
140     <OPTION value=3>Left</OPTION>\r
141     <OPTION value=4>Right</OPTION>\r
142     <OPTION value=5>Dolby</OPTION>\r
143   </SELECT>\r
144 </TD>\r
145 <TD>\r
146 <INPUT type=button value="current channel" onClick='alert(getVLC("vlc").audio.channel);'>\r
147 </TD>\r
148 </TR>\r
149 <TR><TD> Audio Track:\r
150 <INPUT type=button value=" + " onClick='doAudioTrack(1);'>\r
151 <SPAN id="trackTextField" style="text-align:center">--</SPAN>\r
152 <INPUT type=button value=" - " onClick='doAudioTrack(-1);'>\r
153 <INPUT type=button value="current track" onClick='alert(getVLC("vlc").audio.description(vlc.audio.track));'>\r
154 <INPUT type=button value="number of track" onClick='alert(getVLC("vlc").audio.count);'>\r
155 </TD>\r
156 <TD>\r
157 <INPUT type=button value="set slider" onClick='doSetSlider();'>\r
158 <INPUT type=button value="get position" onClick='doGetPosition();'>\r
159 </TD>\r
160 </TR>\r
161 <TR>\r
162 <TD>Video Subtitle:\r
163     <INPUT type=button value=" + " onClick='doSubtitle(1);'>\r
164     <SPAN id="spuTextField" style="text-align:center">--</SPAN>\r
165     <INPUT type=button value=" - " onClick='doSubtitle(-1);'>\r
166     <INPUT type=button value="current subtitle" onClick='alert(getVLC("vlc").subtitle.description(vlc.subtitle.track));'>\r
167     <INPUT type=button value="number of subtitle" onClick='alert(getVLC("vlc").subtitle.count);'>\r
168 </TD>\r
169 </TR>\r
170 <TR>\r
171 <TD>Deinterlacing:\r
172     <INPUT type=button value="BLEND" onClick='getVLC("vlc").video.deinterlace.enable("blend");'>\r
173     <INPUT type=button value="  X  " onClick='getVLC("vlc").video.deinterlace.enable("x");'>\r
174     <INPUT type=button value="Disable" onClick='getVLC("vlc").video.deinterlace.disable();'>\r
175 </TD>\r
176 </TR>\r
177 <TR>\r
178 <TD>Marquee video filter:\r
179     <INPUT type=button value="Enable" onClick='getVLC("vlc").video.marquee.enable();'>\r
180     <INPUT type=button value="Disable" onClick='getVLC("vlc").video.marquee.disable();'>\r
181     <INPUT size=4 value="" id="marqueeIntValue">\r
182     <SELECT readonly onClick="doMarqueeOption(this.value,document.getElementById('marqueeIntValue').value);">\r
183         <OPTION value=1>Color</OPTION>\r
184         <OPTION value=2>Opacity</OPTION>\r
185         <OPTION value=3>Position</OPTION>\r
186         <OPTION value=4>Refresh</OPTION>\r
187         <OPTION value=5>Size</OPTION>\r
188         <OPTION value=6>Text</OPTION>\r
189         <OPTION value=7>Timeout</OPTION>\r
190         <OPTION value=8>X</OPTION>\r
191         <OPTION value=9>Y</OPTION>\r
192     </SELECT>\r
193 </TD>\r
194 </TR>
195 <TR>\r
196 <TD>Logo video filter:\r
197     <INPUT type=button value="Enable" onClick='getVLC("vlc").video.logo.enable();'>\r
198     <INPUT type=button value="Disable" onClick='getVLC("vlc").video.logo.disable();'>\r
199     <INPUT size=4 value="" id="logoIntValue">\r
200     <SELECT readonly onClick="doLogoOption(this.value,document.getElementById('logoIntValue').value);">\r
201         <OPTION value=1>File</OPTION>\r
202         <OPTION value=2>Position</OPTION>\r
203         <OPTION value=3>Opacity</OPTION>\r
204         <OPTION value=4>Repeat</OPTION>\r
205         <OPTION value=5>Delay</OPTION>\r
206         <OPTION value=6>X</OPTION>\r
207         <OPTION value=7>Y</OPTION>
208     </SELECT>\r
209 </TD>\r
210 </TR>\r\r
211 <TR>\r
212 <TD>\r
213     <INPUT type=button id="telx" value="Teletext off" onClick='doToggleTeletext();'>\r
214     Teletext page:\r
215     <INPUT size=4 value="100" id="telxPage" onClick='doTelxPage(document.getElementById("telxPage").value);'>\r
216 </TD>\r
217 </TR>\r
218 </TABLE>\r
219 <SCRIPT language="javascript">\r
220 <!--\r
221 \r
222 var rate = 0;\r
223 var prevState = 0;\r
224 var telxState = false;\r
225 \r
226 function doSetSlider()\r
227 {\r
228     var vlc = getVLC("vlc");\r
229 \r
230     // set slider to new position\r
231     if( vlc )\r
232         vlc.input.time = (vlc.input.length/2);\r
233 }\r
234 \r
235 function doGetPosition()\r
236 {\r
237     var vlc = getVLC("vlc");\r
238 \r
239     // set slider to new position\r
240     if (vlc)\r
241         alert( "position is " + vlc.input.time);\r
242 }\r
243 \r
244 function doReverse(rate)\r
245 {\r
246     var vlc = getVLC("vlc");\r
247     if( vlc )\r
248         vlc.input.rate = -1.0 * vlc.input.rate;\r
249 }\r
250 \r
251 function doAudioChannel(value)\r
252 {\r
253     var vlc = getVLC("vlc");\r
254     if( vlc )\r
255         vlc.audio.channel = parseInt(value);\r
256 }\r
257 \r
258 function doAudioTrack(value)\r
259 {\r
260     var vlc = getVLC("vlc");\r
261     if( vlc )\r
262     {\r
263         vlc.audio.track = vlc.audio.track + value;\r
264         document.getElementById("trackTextField").innerHTML = vlc.audio.track;\r
265     }\r
266 }\r
267 \r
268 function doAspectRatio(value)\r
269 {\r
270     var vlc = getVLC("vlc");\r
271     if( vlc )\r
272         vlc.video.aspectRatio = value;\r
273 }\r
274 \r
275 function doSubtitle(value)\r
276 {\r
277     var vlc = getVLC("vlc");\r
278     if( vlc )\r
279     {\r
280         vlc.subtitle.track = vlc.subtitle.track + value;\r
281         document.getElementById("spuTextField").innerHTML = vlc.subtitle.track;\r
282     }\r
283 }\r
284 \r
285 function doTelxPage(value)\r
286 {\r
287     var vlc = getVLC("vlc");\r
288     if( vlc )\r
289         vlc.video.teletext = parseInt(value);\r
290 }\r
291 \r
292 function doToggleTeletext()\r
293 {\r
294     var vlc = getVLC("vlc");\r
295 \r
296     if( vlc )\r
297     {\r
298         vlc.video.toggleTeletext();\r
299         if (telxState)\r
300         {\r
301             document.getElementById("telx").innerHTML = "Teletext on";\r
302             telxState = true;\r
303         }\r
304         else\r
305         {\r
306             document.getElementById("telx").innerHTML = "Teletext off";\r
307             telxState = false;\r
308         }\r
309     }\r
310 }\r
311 \r
312 function doItemCount()\r
313 {\r
314     var vlc = getVLC("vlc");\r
315     if( vlc )\r
316     {\r
317         var count = vlc.playlist.items.count;\r
318         document.getElementById("itemCount").value = " Items " + count + " ";\r
319     }\r
320 }\r
321 \r
322 function doRemoveItem(item)\r
323 {\r
324     var vlc = getVLC("vlc");\r
325     if( vlc )\r
326         vlc.playlist.items.remove(item);\r
327 }\r
328 \r
329 function doPlaylistClearAll()\r
330 {\r
331     var vlc = getVLC("vlc");\r
332     if( vlc )\r
333     {\r
334         vlc.playlist.items.clear();\r
335         while( vlc.playlist.items.count > 0)\r
336         {\r
337             // wait till playlist empties.\r
338         }\r
339         doItemCount();\r
340     }\r
341 }\r
342 \r
343 function updateVolume(deltaVol)\r
344 {\r
345     var vlc = getVLC("vlc");\r
346     if( vlc )\r
347     {\r
348         vlc.audio.volume += deltaVol;\r
349         document.getElementById("volumeTextField").innerHTML = vlc.audio.volume+"%";\r
350     }\r
351 }\r
352 \r
353 function formatTime(timeVal)\r
354 {\r
355     if( typeof timeVal != 'number' )\r
356         return "-:--:--";\r
357 \r
358     var timeHour = Math.round(timeVal / 1000);\r
359     var timeSec = timeHour % 60;\r
360     if( timeSec < 10 )\r
361         timeSec = '0'+timeSec;\r
362     timeHour = (timeHour - timeSec)/60;\r
363     var timeMin = timeHour % 60;\r
364     if( timeMin < 10 )\r
365         timeMin = '0'+timeMin;\r
366     timeHour = (timeHour - timeMin)/60;\r
367     if( timeHour > 0 )\r
368         return timeHour+":"+timeMin+":"+timeSec;\r
369     else\r
370         return timeMin+":"+timeSec;\r
371 }\r
372 \r
373 function doState()\r
374 {\r
375     var vlc = getVLC("vlc");\r
376     var newState = 0;\r
377 \r
378     if( vlc )\r
379         newState = vlc.input.state;\r
380 \r
381     if( newState == 0 )\r
382     {\r
383         // current media has stopped\r
384         onEnd();\r
385     }\r
386     else if( newState == 1 )\r
387     {\r
388         // current media is openning/connecting\r
389         onOpen();\r
390     }\r
391     else if( newState == 2 )\r
392     {\r
393         // current media is buffering data\r
394         onBuffer();\r
395     }\r
396     else if( newState == 3 )\r
397     {\r
398         // current media is now playing\r
399         onPlay();\r
400     }\r
401     else if( newState == 4 )\r
402     {\r
403         // current media is now paused\r
404         onPause();\r
405     }\r
406     else if( newState == 5 )\r
407     {\r
408         // current media has stopped\r
409         onStop();\r
410     }\r
411     else if( newState == 6 )\r
412     {\r
413         // current media has ended\r
414         onEnd();\r
415     }\r
416     else if( newState == 7 )\r
417     {\r
418         // current media encountered error\r
419         onError();\r
420     }\r
421 }\r
422 \r
423 function monitor()\r
424 {\r
425     var vlc = getVLC("vlc");\r
426     var newState = 0;\r
427 \r
428     if( vlc )\r
429     {\r
430         newState = vlc.input.state;\r
431     }\r
432 \r
433     if( prevState != newState )\r
434     {\r
435         if( newState == 0 )\r
436         {\r
437             // current media has stopped\r
438             onEnd();\r
439         }\r
440         else if( newState == 1 )\r
441         {\r
442             // current media is openning/connecting\r
443             onOpen();\r
444         }\r
445         else if( newState == 2 )\r
446         {\r
447             // current media is buffering data\r
448             onBuffer();\r
449         }\r
450         else if( newState == 3 )\r
451         {\r
452             // current media is now playing\r
453             onPlay();\r
454         }\r
455         else if( newState == 4 )\r
456         {\r
457             // current media is now paused\r
458             onPause();\r
459         }\r
460         else if( newState == 5 )\r
461         {\r
462             // current media has stopped\r
463                 onStop();\r
464         }\r
465         else if( newState == 6 )\r
466         {\r
467             // current media has ended\r
468             onEnd();\r
469         }\r
470         else if( newState == 7 )\r
471         {\r
472             // current media encountered error\r
473             onError();\r
474         }\r
475         prevState = newState;\r
476     }\r
477     else if( newState == 3 )\r
478     {\r
479         // current media is playing\r
480         onPlaying();\r
481     }\r
482 };\r
483 \r
484 /* actions */\r
485 \r
486 function doGo(targetURL)\r
487 {\r
488     var vlc = getVLC("vlc");\r
489 \r
490     if( vlc )\r
491     {\r
492         vlc.playlist.items.clear();\r
493         while( vlc.playlist.items.count > 0 )\r
494         {\r
495             // clear() may return before the playlist has actually been cleared\r
496             // just wait for it to finish its job\r
497         }\r
498         var options = [":rtsp-tcp"];\r
499         var itemId = vlc.playlist.add(targetURL,"",options);\r
500         options = [];\r
501         if( itemId != -1 )\r
502         {\r
503             // play MRL\r
504             vlc.playlist.playItem(itemId);\r
505             monitor();\r
506         }\r
507         else\r
508         {\r
509             alert("cannot play at the moment !");\r
510         }\r
511         doItemCount();\r
512     }\r
513 }\r
514 \r
515 function doAdd(targetURL)\r
516 {\r
517     var vlc = getVLC("vlc");\r
518     var options = [":vout-filter=deinterlace", ":deinterlace-mode=linear"];\r
519     if( vlc )\r
520     {\r
521         vlc.playlist.add(targetURL, "", options);\r
522         options = [];\r
523         doItemCount();\r
524     }\r
525 }\r
526 \r
527 function doPlayOrPause()\r
528 {\r
529     var vlc = getVLC("vlc");\r
530     if( vlc )\r
531     {\r
532         if( vlc.playlist.isPlaying )\r
533         {\r
534             vlc.playlist.togglePause();\r
535             monitor();\r
536         }\r
537         else if( vlc.playlist.items.count > 0 )\r
538         {\r
539             vlc.playlist.play();\r
540             monitor();\r
541         }\r
542         else\r
543         {\r
544             alert('nothing to play !');\r
545         }\r
546     }\r
547 }\r
548 \r
549 function doStop()\r
550 {\r
551     var vlc = getVLC("vlc");\r
552 \r
553     if( vlc )\r
554         vlc.playlist.stop();\r
555 \r
556     onStop();\r
557 }\r
558 \r
559 function doPlaySlower()\r
560 {\r
561     var vlc = getVLC("vlc");\r
562     if( vlc )\r
563         vlc.input.rate = vlc.input.rate / 2;\r
564 }\r
565 \r
566 function doPlayFaster()\r
567 {\r
568     var vlc = getVLC("vlc");\r
569     if( vlc )\r
570         vlc.input.rate = vlc.input.rate * 2;\r
571 }\r
572 \r
573 /* events */\r
574 \r
575 function onOpen()\r
576 {\r
577     document.getElementById("state").innerHTML = "Opening...";\r
578     document.getElementById("PlayOrPause").value = "Pause";\r
579 }\r
580 \r
581 function onBuffer()\r
582 {\r
583     document.getElementById("state").innerHTML = "Buffering...";\r
584     document.getElementById("PlayOrPause").value = "Pause";\r
585 }\r
586 \r
587 function onPlay()\r
588 {\r
589     document.getElementById("state").innerHTML = "Playing...";\r
590     document.getElementById("PlayOrPause").value = "Pause";\r
591     onPlaying();\r
592 }\r
593 \r
594 function onEnd()\r
595 {\r
596     document.getElementById("state").innerHTML = "End...";\r
597     doStop();\r
598 }\r
599 \r
600 var liveFeedText = ["Live", "((Live))", "(( Live ))", "((  Live  ))"];\r
601 var liveFeedRoll = 0;\r
602 \r
603 function onPlaying()\r
604 {\r
605         var vlc = getVLC("vlc");\r
606         var info = document.getElementById("info");\r
607         if( vlc )\r
608         {\r
609             var mediaLen = vlc.input.length;\r
610             if( mediaLen > 0 )\r
611             {\r
612                 info.innerHTML = formatTime(vlc.input.time)+"/"+formatTime(mediaLen);\r
613             }\r
614             else\r
615             {\r
616                 // non-seekable "live" media\r
617                 liveFeedRoll = liveFeedRoll & 3;\r
618                 info.innerHTML = liveFeedText[liveFeedRoll++];\r
619             }\r
620         }\r
621     }\r
622 }\r
623 \r
624 function onPause()\r
625 {\r
626     document.getElementById("state").innerHTML = "Paused...";\r
627     document.getElementById("PlayOrPause").value = " Play ";\r
628 }\r
629 \r
630 function onStop()\r
631 {\r
632     document.getElementById("info").innerHTML = "-:--:--/-:--:--";\r
633     document.getElementById("state").innerHTML = "Stopped...";\r
634     document.getElementById("PlayOrPause").value = " Play ";\r
635 }\r
636 \r
637 function onError()\r
638 {\r
639     document.getElementById("state").innerHTML = "Error...";\r
640 }\r
641 \r
642 function doMarqueeOption(option, value)\r
643 {\r
644     var vlc = getVLC("vlc");\r
645     val = parseInt(value);\r
646     if( vlc )\r
647     {\r
648         if (option == 1)\r
649             vlc.video.marquee.color = val;\r
650         if (option == 2)\r
651             vlc.video.marquee.opacity = val;\r
652         if (option == 3)\r
653             vlc.video.marquee.position = value;\r
654         if (option == 4)\r
655             vlc.video.marquee.refresh = val;\r
656         if (option == 5)\r
657             vlc.video.marquee.size = val;\r
658         if (option == 6)\r
659             vlc.video.marquee.text = value;\r
660         if (option == 7)\r
661             vlc.video.marquee.timeout = val;\r
662         if (option == 8)\r
663             vlc.video.marquee.x = val;\r
664         if (option == 9)\r
665             vlc.video.marquee.y = val;\r
666     }\r
667 }\r
668
669 function doLogoOption(option, value)\r
670 {\r
671     var vlc = getVLC("vlc");\r
672     if( vlc )\r
673     {\r
674         if (option == 1)\r
675             vlc.video.logo.file(value);\r
676         if (option == 2)\r
677             vlc.video.logo.position = value;\r
678         val = parseInt(value);\r
679         if (option == 3)\r
680             vlc.video.logo.opacity = val;\r
681         if (option == 4)\r
682             vlc.video.logo.repeat = val;\r
683         if (option == 5)\r
684             vlc.video.logo.delay = val;\r
685         if (option == 6)\r
686             vlc.video.logo.x = val;\r
687         if (option == 7)\r
688             vlc.video.logo.y = val;\r
689     }\r
690 }\r
691 \r
692 //-->\r
693 </SCRIPT>\r
694 </BODY>\r
695 </HTML>\r