Page 1 of 2
[PHP] Odtwarzanie wideo z youtube o określonej godzinie
Posted: 2015-01-23, 21:02
by anonim
Odpowiadając na jedno z pytań użytkownika
Miszczu napisałem prosty skrypt w php, ukazujący w jaki sposób odtwarzać materiał z serwisu youtube, o określonej godzinie z uwzględnieniem przesunięcia transmisji o czas który już upłynął.
Zawartość
plik.php:
Code: Select all
<?php
//youtube.com start time in jwplayer - example by jarek@stream-recorder.pl
$file = 'https://www.youtube.com/watch?v=ZNLXO9Mw6NQ'; // video from youtube
$start = '20:30'; // start time
$now = date('H:i');
if ((strtotime($now) - strtotime($start)) >= 0 ) {
?>
<script src="http://jwpsrv.com/library/pslaetIIEeOEtyIACrqE1A.js"></script>
<div id='playerazthWINebJKv'></div>
<script type='text/javascript'>
jwplayer('playerazthWINebJKv').setup({
file: '<? echo $file; ?>',
aspectratio: '16:9',
width: '580',
height: '320',
autostart: 'true',
controls: 'false',
});
setTimeout("jwplayer().seek(<? echo (strtotime($now) - strtotime($start)); ?>);",5000);
</script>
<?
} else { echo 'Transmisja rozpocznie się o godzinie '.$start; }
?>
W przykładzie, w opcjach jwplayera - ustawiłem parametr
controls: 'false' , czyli wyłączyłem kontrolki, tym samym uniemożliwiając użytkownikom przewijanie, oczywiście nie jest to konieczne.
Posted: 2015-01-23, 22:04
by anonim
To ja mam odrazu pytanie jak zakolejkowac kilka wideo i czy sie da i jak z czasem zakonczenia wideo bo tego nie zrozumialem i jeszcze opcja live zamiast paska z opcja przewijania?
Posted: 2015-01-25, 17:30
by anonim
Ad 1. jak zakolejkowac kilka wideo?
Wystarczy dopisać odpowiedni kod php np. taki:
Code: Select all
<html>
<head>
<meta charset="UTF-8">
</head>
<body style="margin:0px;">
<?php
//youtube.com start time in jwplayer - example by jarek@stream-recorder.pl
$lista[0]['start'] = '16:00';
$lista[0]['file'] = 'https://www.youtube.com/watch?v=ZNLXO9Mw6NQ';
$lista[1]['start'] = '20:00';
$lista[1]['file'] = 'https://www.youtube.com/watch?v=s1TC-CLR5b8';
$now = date('H:i');
foreach($lista as $n => $k) {
if ((strtotime($now) - strtotime($k['start'])) >= 0 ) {
?>
<script src="http://jwpsrv.com/library/pslaetIIEeOEtyIACrqE1A.js"></script>
<div id='playerazthWINebJKv'></div>
<script type='text/javascript'>
jwplayer('playerazthWINebJKv').setup({
file: '<? echo $k['file']; ?>',
aspectratio: '16:9',
width: '580',
height: '320',
autostart: 'true',
controls: 'false',
});
setTimeout("jwplayer().seek(<? echo (strtotime($now) - strtotime($k['start'])); ?>);",5000);
</script>
<button onclick="jwplayer().setFullscreen();">FullScreen</button>
<?
break;
}
}
?>
</body>
</html>
Ad 2. jak z czasem zakonczenia wideo?
Czas zakończenia wynika z czasu trwania materiału wideo. Jeżeli od rozpoczęcia minęło więcej czasu niż trwa film po prostu player się nie wyświetli.
Ad 3. opcja live zamiast paska z opcja przewijania?
Tzn pasek przewijania jest wyłączony, generalnie trzeba dostosować skin jeżeli masz jakieś specjalne wymagania. W powyższym przykładzie z pkt. 1 dodałem przycisk "fullscreen".
Posted: 2015-01-26, 01:56
by anonim
Nie działa listowanie po pierwszym wideo staje wszystko i nic sie nie dzieje a druga rzecz czy nie da sie wyminac by nie odpalalo za kazdym razem przez chwile poczatku zanim przeskoczy na tą minute co trzeba?
Posted: 2015-01-26, 18:05
by anonim
Ta linijka odpowiada za czas
Code: Select all
setTimeout("jwplayer().seek(<? echo (strtotime($now) - strtotime($k['start'])); ?>);",5000);
-teraz jest zmiana po 5 sekundach = 5000 ms.
Posted: 2015-01-27, 12:46
by anonim
Ale co z listowaniem bo nie działa?
Posted: 2015-01-27, 17:21
by anonim
Mój błąd - poprawka:
Code: Select all
<html>
<head>
<meta charset="UTF-8">
<head>
<body style="margin:0px;">
<?php
//youtube.com start time in jwplayer - example by jarek@stream-recorder.pl
$lista[0]['start'] = '16:00';
$lista[0]['end'] = '17:00';
$lista[0]['file'] = 'https://www.youtube.com/watch?v=ZNLXO9Mw6NQ';
$lista[1]['start'] = '18:00';
$lista[1]['end'] = '19:00';
$lista[1]['file'] = 'https://www.youtube.com/watch?v=s1TC-CLR5b8';
$now = date('H:i');
foreach($lista as $n => $k) {
if (((strtotime($now) - strtotime($k['start'])) >= 0 ) and ((strtotime($now) - strtotime($k['end'])) < 0 )) {
?>
<script src="http://jwpsrv.com/library/pslaetIIEeOEtyIACrqE1A.js"></script>
<div id='playerazthWINebJKv'></div>
<script type='text/javascript'>
jwplayer('playerazthWINebJKv').setup({
file: '<? echo $k['file']; ?>',
aspectratio: '16:9',
width: '580',
height: '320',
autostart: 'true',
controls: 'false',
});
setTimeout("jwplayer().seek(<? echo (strtotime($now) - strtotime($k['start'])); ?>);",5000);
</script>
<button onclick="jwplayer().setFullscreen();">FullScreen</button>
<?
break;
}
}
?>
<body>
</html>
Posted: 2015-01-28, 12:47
by anonim
Wszystko fajnie tylko że jak sie skonczy pierwsze wideo to staje i trzeba odswiezac zeby drugie wystartowalo
Posted: 2015-01-28, 17:46
by anonim
W takim razie dopisz linijke lub dwie w php odpowiadające za odświeżenie np.
Code: Select all
...
</script>
<button onclick="jwplayer().setFullscreen();">FullScreen</button>
<?
$refresh = (strtotime($k['end']) - strtotime($now));
header("Refresh: $refresh");
break;
}
}
?>
<body>
</html>
...
summa summarum:
http://wklej.org/hash/62679de437c/
I już powinno być ok

Posted: 2015-01-29, 23:58
by anonim
Jarek,jeśli można mam pytanie; zamiast JwPlayera podłożyłem Vlc,ale znowu mam problem jak zapisać bufor - umieściłem zapis w 2 miejscach ale to nie działa... Pomożesz?
Posted: 2015-01-30, 21:52
by anonim
Już odpowiadałem na to pytanie którego byłeś autorem w tym temacie:
Code: Select all
http://stream-recorder.pl/viewtopic.php?t=877
Ponownie zachęcam do zapoznania się ze stroną:
Code: Select all
https://wiki.videolan.org/Documentation:WebPlugin
Tutaj twój poprawiony kod:
Code: Select all
<html>
<body>
<head>
<meta charset="UTF-8">
<head>
<body style="margin:0px;">
<?php
//youtube.com start time in vlc - example by jarek@stream-recorder.pl
$lista[0]['start'] = '20:59';
$lista[0]['end'] = '23:59';
$lista[0]['file'] = 'LINK DO PLIKU';
$now = date('H:i');
foreach($lista as $n => $k) {
if (((strtotime($now) - strtotime($k['start'])) >= 0 ) and ((strtotime($now) - strtotime($k['end'])) < 0 )) {
?>
<center>
<embed type="application/x-vlc-plugin" pluginspage="http://www.videolan.org"
version="VideoLAN.VLCPlugin.2" id="vlc" loop="no" autoplay="yes" height="320" width="580">
<script>
var vlc = document.getElementById("vlc");
vlc.playlist.add("<? echo $k['file']; ?>", "live",
":network-caching=100000");
vlc.playlist.play();
</script>
</center>
<?
$refresh = (strtotime($k['end']) - strtotime($now));
header("Refresh: $refresh");
break;
}
}
?>
<body>
</html>
Posted: 2015-01-30, 22:05
by anonim
Bardzo,bardzo dziękuje za pomoc. Oczywiście wszystko działa.
Z dokumentacją vlc na stronie zapoznawałem się dość długo,ale moje skromna wiedza nie pozwala na ogarnięcie tego.

Posted: 2015-01-30, 22:15
by anonim
Dodatkowo też można przewijać, z taką różnicą, że czas podaje się w milisekundach:
Code: Select all
...
<script>
var vlc = document.getElementById("vlc");
vlc.playlist.add("<? echo $k['file']; ?>", "live",
":network-caching=100");
vlc.playlist.play();
vlc.input.time = vlc.input.time + <? echo (strtotime($now) - strtotime($k['start']))*1000; ?>;
</script>
...
Cały przykład:
Code: Select all
<html>
<body>
<head>
<meta charset="UTF-8">
<head>
<body style="margin:0px;">
<?php
//youtube.com start time in vlc - example by jarek@stream-recorder.pl
$lista[0]['start'] = '22:05';
$lista[0]['end'] = '23:59';
$lista[0]['file'] = 'LINK DO PLIKU';
$now = date('H:i');
foreach($lista as $n => $k) {
if (((strtotime($now) - strtotime($k['start'])) >= 0 ) and ((strtotime($now) - strtotime($k['end'])) < 0 )) {
?>
<center>
<embed type="application/x-vlc-plugin" pluginspage="http://www.videolan.org"
version="VideoLAN.VLCPlugin.2" id="vlc" loop="no" autoplay="yes" height="320" width="580">
<script>
var vlc = document.getElementById("vlc");
vlc.playlist.add("<? echo $k['file']; ?>", "live",
":network-caching=100");
vlc.playlist.play();
vlc.input.time = vlc.input.time + <? echo (strtotime($now) - strtotime($k['start']))*1000; ?>;
</script>
</center>
<?
$refresh = (strtotime($k['end']) - strtotime($now));
header("Refresh: $refresh");
break;
}
}
?>
<body>
</html>
Posted: 2015-01-30, 22:16
by anonim
Dziękuje

Posted: 2015-03-04, 20:05
by anonim
W związku z zapytaniem, wersja uzupełniona o sekundy:
Code: Select all
<html>
<head>
<meta charset="UTF-8">
<head>
<body style="margin:0px;">
<?php
//youtube.com start time in jwplayer - example by jarek@stream-recorder.pl
$lista[0]['start'] = '16:00:00';
$lista[0]['end'] = '17:00:00';
$lista[0]['file'] = 'https://www.youtube.com/watch?v=ZNLXO9Mw6NQ';
$lista[1]['start'] = '20:00:00';
$lista[1]['end'] = '20:30:00';
$lista[1]['file'] = 'https://www.youtube.com/watch?v=s1TC-CLR5b8';
$now = date('H:i:s');
foreach($lista as $n => $k) {
if (((strtotime($now) - strtotime($k['start'])) >= 0 ) and ((strtotime($now) - strtotime($k['end'])) < 0 )) {
?>
<script src="http://jwpsrv.com/library/pslaetIIEeOEtyIACrqE1A.js"></script>
<div id='playerazthWINebJKv'></div>
<script type='text/javascript'>
jwplayer('playerazthWINebJKv').setup({
file: '<? echo $k['file']; ?>',
aspectratio: '16:9',
width: '580',
height: '320',
autostart: 'true',
controls: 'true',
});
setTimeout("jwplayer().seek(<? echo (strtotime($now) - strtotime($k['start'])); ?>);",5000);
</script>
<button onclick="jwplayer().setFullscreen();">FullScreen</button>
<?
$refresh = (strtotime($k['end']) - strtotime($now)) + 7000;
header("Refresh: $refresh");
break;
}
}
?>
<body>
</html>