php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2009

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 23.07.2009, 09:03  
Neuer Benutzer
 
Registriert seit: 23.07.2009
Beiträge: 1
PHP-Kenntnisse:
Anfänger
thica befindet sich auf einem aufstrebenden Ast
Standard timing Probleme bzw Zusammenspiel PHP Javascript

Hallo zusammen,

arbeite mich gerede in die Web Programmierung ein und stehe bei einem Projekt vor folgendem Problem:

Projektvorstellung:
Es handelt sich ein Frontend für einen Musik-Player.
Mittels des Frontend soll ein eine Server Applikation gsteuert werden, welche sich per PHP ansprechen lässt.
Die Serverapplikation heist mpd (Music - Player - Daemon) welche die Wiedergabe von Musikdateien übernimmt, ohne jede GUI Ausgabe.
Das Frontend läuft auf einem Hardware Streaming Client (popcorn hour) welcher einen integrierten Browser sowie integrierten Webserver mit stark eingeschränkten Fähigkeiten hat.

- Kein Ajax
- kein Java
- reduziertes Javascript
- keine Frames

Nun zu meinem Problem:

mpd hat keinen notifier zum status der Applikation, man muss also den status jedesmal neu "pollen". Wenn man also ein Musikstück abspielt, kann man die aktuelle Spielzeit des Stückes nur durch regelmäßiges pollen herausbekommen (1.24 von 3:12).
Um dieses pollen zu vermeiden, setze ich beim Laden der Seite einen Javascript timer (sekündlich), welcher mir die Spielzeit hochzählt und auf dem Bildschirm anzeigt.

Da ich die Gesamtlänge des Stückes erst nach dem Start des Stückes herausbekomme, starte ich erst das Abspielen des Musikstückes, polle mir dann die Zeiten von mpd, (alles php) und trage dann dann die Zieten per php echo in die entsprechenden Javascript Variablen ein.
Dann starte ich den Timer innerhalb des html codes.
Das funktioniert auch alles! aber....
Das Musikstück beginnt zu spielen, bevor die Seite angezeigt wird. Wenn die Seite angezeigt und der Timer beginnt, sind schon 2-3 Sekunden vergangen, sodaß die angezeigte Zeit asynchron zum Musikstück ist.
Ich brauche aber die Zeiten des Musikstückes, welche ich erst nach Start des Abpielen bekomme, um den Timer zu initialiseren.

Bin kein PHP javascript Geek, vielleicht fehlen mir da ein paar Grundlagen , wie z.B. starten einer PHP Funktion aus Javascript, o.ä.

Ich hoffe, ich habe das halbwegs Verständlich erklärt und würde mich über antworten freuen.

Anbei ein Code Fragment:

PHP-Code:

<HTML> 

// HTM CSS zeugs hier
  
 <?php



 
// Hier ist einiges Zeugs wie Datenbank abfragen (entfernt) 

//

    
$mpd_time=0;
    
$mpd_playtime=60;

      
   
startPlay($mpdplay,$songs,$songid,$mpc);
  
getPlayTime($mpd_status,$mpd_playtime,$mpd_time,$mpc);

function 
startPlay(&$mpdplay,$songs,$songid,$mpc)
{
    if(
$mpdplay==1)
    {
        
$fp fopen '/opt/sybhttpd/localhost.drives/HARD_DISK/Music/umcmusic2.m3u''w' ); 
        
fputs ($fp,'/share/'.substr($songs[$songid]['pchPath'],49));
        
fclose ($fp);
    
        
exec($mpc.' clear');
        
exec($mpc.' consume=1');
        
exec($mpc.' single=1');
        
exec($mpc.' load umcmusic2');
        
exec($mpc.' play 0');
        
$mpdplay=0;
    }
}

function 
secondsFromTimeString($timestring)
{
        
$tokens=array('0');
        
$token strtok ($timestring':' );
        while ( 
$token)
        {
            
array_push($tokens,$token);
            
$token strtok(':');
        }
        return 
1*$tokens[1]*60+$tokens[2];
}
    
function 
getPlayTime(&$mpd_status,&$mpd_playtime,&$mpd_time,$mpc)
{
    
exec($mpc,$status);
    
$mpd_status="";

    if (
count($status)>1
    { 
        
$tokens=array('0');
        
$token strtok ($status[1], ' ' );
        while ( 
$token)
        {
            
array_push($tokens,$token);
            
$token strtok(' ');
        }

        
$mpd_status=$tokens[1];
    
        
$tokens2=array('0');
        
$token strtok ($tokens[3], '/' );
        while ( 
$token)
        {
            
array_push($tokens2,$token);
            
$token strtok('/');
        }

        
$mpd_time=secondsFromTimeString($tokens2[1]);
        
$mpd_playtime=secondsFromTimeString($tokens2[2]);

     }

    if (
$mpd_playtime==0)
        
$mpd_playtime=60;
  
}    

?> 

  
<script type="text/javascript">
    
    var count; 
    var starttime=<?php echo $mpd_time?>
    var endtime=<?php echo $mpd_playtime?>
    
    var a;
    
    var bRepeat=0;
    
    var sStatus="<?php echo $mpd_status?>"; 
    function init_page()
    {
    
     
        <?php
        $Artist
=rawurlencode($songs[$songid]['Artist']);
        
$AlbumTitle=rawurlencode($songs[$songid]['AlbumTitle']);
        
$Title=rawurlencode($songs[$songid]['Title']);
        
$Year=rawurlencode($songs[$songid]['PRODUCT_YEAR']);
        
$pchPath=rawurlencode($songs[$songid]['pchPath']);
        
$Info2="";
        
$AlbumPicturePrefix=rawurlencode($songs[$songid]['AlbumPicturePrefix']);
        
$AlbumBackDropPrefix=rawurlencode($songs[$songid]['AlbumBackDropPrefix']);
        
        echo 
"showSong(".$songid.",\"".$Artist."\",\"".$AlbumTitle."\",\"".$Title."\",\"".$Year."\",\"".$pchPath."\",\"".$Info2."\",\"".$mpd_playtime."\",\"".$AlbumPicturePrefix."\",\"".$AlbumBackDropPrefix."\");"

        
?>
    }
    
    function counter()
    {

        if((starttime-1) >= endtime)
        {
            starttime=0;

            SendCommand("nextsong");
            return;
        }
        
        if (sStatus=="[playing]")
        {
            document.getElementById("time").firstChild.nodeValue = time_to_string(starttime++);
            a = window.setTimeout('counter()', 1000);
        }
  
    }
    
    function time_to_string(time)
    {
        var mins=0;
        var secs=0;
        
        if (time > 60)
        {
            mins = Math.floor(time/60);
            secs = time - (mins *60);
        }
        else
        {
            secs = time;
        }
        
        if (mins < 10)
        {
                mins = "0" + mins;    
        }
        
        if (secs < 10)
        {
            secs = "0" + secs;
        }
        
        return mins  + ":" + secs;
    }


// weterer Javascript - Code....
thica ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 19.02.2010, 12:04  
Benutzer
 
Registriert seit: 28.01.2010
Beiträge: 38
PHP-Kenntnisse:
Fortgeschritten
SunnyMarx befindet sich auf einem aufstrebenden Ast
SunnyMarx eine Nachricht über ICQ schicken SunnyMarx eine Nachricht über AIM schicken SunnyMarx eine Nachricht über MSN schicken SunnyMarx eine Nachricht über Yahoo! schicken
Standard

Ich glaube, dein Problem wird sich so ohne weiteres nicht lösen lassen. Ich denke, Du hast diese Art der Wiedergabe bei WebRadios gesehen. Die haben aber höchst wahrscheinlich andere Scripte, mit denen sie die aktuelle Wiedergabezeit anzeigen lassen.

1. Der Server bekommt den Befehl, das Stück zu streamen.
2. Der Client fordert Informationen vom Server, wie lang das Stück ist.
3. Der Server antwortet mit der aktuellen Wiedergabezeit und der Gesamtlänge des Stücks.
4. Der Browser empfängt die Daten und JavaScript stellt die Inhalte auf dem Browser her.

Zwischen Schritt 1 und 4 gehen 2 mal Befehle von Server zu Client und von Client zu Server. Das sind deine 2 bis 3 Sekunden. Aber dies auch wahrscheinlich nur bei DSL 6000. Bei DSL 20.000 wird die Zeit kürzer sein. Bei DSL 1000 etwas länger.

Also eine Syncronisation in dieser Art und Weise stelle ich mir extrem schwierig vor.

Die WebRadios, die diese Funktion nutzen verwenden wahrscheinlich fertige Scripte, die Funktionen nutzen, die mir bisher unbekannt sind. Können ja was weiß ich wie viele Sprachen sein, die die verwenden. Von einfachem JavaScript über CGI bis hin zu Java-Aplikationen ist da ja alles möglich.

Du solltest also mal Google nach deinem Vorhaben befragen und erst einmal heraus zufinden, wie andere diese Funktion realisiert haben. Ich glaube nicht, dass hier überhaupt jemand in der Lage ist, Dir da einen sinnvollen Ansatz zu präsentieren, ohne Dir gleich die ganze Arbeit abzunehmen.
__________________
SunnyMarx ist offline  
Alt 19.02.2010, 19:06  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.987
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Zitat:
kann man die aktuelle Spielzeit des Stückes nur durch regelmäßiges pollen herausbekommen (1.24 von 3:12).
Dann pollst Du eben so lange, bis Du ne Startzeit hast und zählst dann weiter.. Was beim Stocken des Streams passiert, kannst Du Dir dann aber auch denken.
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Erledigt] Reload einer Seite (Zusammenspiel zwischen php und Javascript) ***tisc*** JavaScript, Ajax und mehr 7 20.05.2009 09:09
[Erledigt] Variable von Javascript mit 1x1px-Bild an PHP übergeben beneblack PHP Tipps 2009 18 03.05.2009 22:40
JS: Einführung - Javascript im Schichtenmodell nikosch Tutorials 4 11.04.2009 17:06
1101: 10x JavaScript und kein Ende ist abzusehen… Nikolaus 2.0 Adventskalender 2008 9 13.12.2008 20:11
JavaScript Baum bring Probleme FireFIghter HTML, Usability und Barrierefreiheit 1 06.10.2006 10:59
problem mit javascript und smarty snatch-ic HTML, Usability und Barrierefreiheit 2 08.06.2006 22:11
PHP + Javascript + MYSQL socke PHP Tipps 2006 4 02.04.2006 22:02
javascript probleme bei Ajax anwendung Sclot HTML, Usability und Barrierefreiheit 11 22.03.2006 13:06
Variable wird geändert bei Übergabe an Javascript PHP Tipps 2007 4 17.12.2005 16:53
integration/einbetten von JavaScript in PHP macht probleme PHP Tipps 2005-2 6 17.10.2005 15:28
Probleme mit Checkbox (JavaScript) HTML, Usability und Barrierefreiheit 1 26.07.2005 12:52
JavaScript in JavaScript geschriebene Html-Datei einbinden. woods HTML, Usability und Barrierefreiheit 6 06.09.2004 18:33
Javascript HTML, Usability und Barrierefreiheit 5 31.08.2004 18:30
php + Javascript, Variablenübergabe PHP Tipps 2004 14 28.07.2004 15:42

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
www.startpley.de, javascript timing, java script gegen störungen bei der musik, javascript pollen, javascrip t timer, timing problem mit datenbankabfrage und ajax, javascript html timing, timing probleme, javascript abfrage, mpd timer, javascript timing problem, zusammenspiel php javascript einführung, php pollen datenbank, mpd->sendcommand, jscript pollen, timer javascript, timings datenbankabfragen, mpd lied stockt -mp3, probeme js und php, php javascript zusammenspiel html css

Alle Zeitangaben in WEZ +2. Es ist jetzt 16:22 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum