Zanonimizowana wersja forum tylko do odczytu

[PHP] Odtwarzanie wideo z youtube o określonej godzinie

Tworzenie stron internetowych, promowanie, pozycjonowanie, hosting.
anonim
Weteran
Posts: 826
Joined: 2013-05-04, 15:44

[PHP] Odtwarzanie wideo z youtube o określonej godzinie

Post 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.

anonim
Weteran
Posts: 932
Joined: 2013-09-04, 17:49

Post 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?

anonim
Weteran
Posts: 826
Joined: 2013-05-04, 15:44

Post 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".

anonim
Weteran
Posts: 932
Joined: 2013-09-04, 17:49

Post 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?

anonim
Weteran
Posts: 826
Joined: 2013-05-04, 15:44

Post 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.

anonim
Weteran
Posts: 932
Joined: 2013-09-04, 17:49

Post by anonim »

Ale co z listowaniem bo nie działa?

anonim
Weteran
Posts: 826
Joined: 2013-05-04, 15:44

Post 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>

anonim
Weteran
Posts: 932
Joined: 2013-09-04, 17:49

Post by anonim »

Wszystko fajnie tylko że jak sie skonczy pierwsze wideo to staje i trzeba odswiezac zeby drugie wystartowalo

anonim
Weteran
Posts: 826
Joined: 2013-05-04, 15:44

Post 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 ;-)

anonim
Początkujący
Posts: 16
Joined: 2014-01-15, 16:28

Post 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? :-|

Code: Select all

http://wklej.org/id/1615754/

anonim
Weteran
Posts: 826
Joined: 2013-05-04, 15:44

Post 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>

anonim
Początkujący
Posts: 16
Joined: 2014-01-15, 16:28

Post 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. :-(

anonim
Weteran
Posts: 826
Joined: 2013-05-04, 15:44

Post 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>
Last edited by anonim on 2015-01-30, 22:17, edited 1 time in total.

anonim
Początkujący
Posts: 16
Joined: 2014-01-15, 16:28

Post by anonim »

Dziękuje :->

anonim
Weteran
Posts: 826
Joined: 2013-05-04, 15:44

Post 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>

Post Reply