Warum baust Du nicht den Zeitstempel in den Dateinamen ein, unter dem das Video abgespeichert wird? So siehst Du bei der Wiedergabe im Fenstertitel den Zeitpunkt und Du überschreibst Dir nicht die alten Aufnahmen…
Hallo,
den Stream speichern ist eine Sache die sehr gut funktioniert.
Aber wie kann ich im WF die gespeicherten Aufnahmen anzeigen?
Wie habt ihr das gelöst?
Hallo Bussard013, hallo Martinwk,
was ich speichere sind ja immer kurze Videosequenzen. Diese füge ich ständig mit mencoder zu einer Datei zusammen, welche ich im Frontend anzeigen lasse. Wöchentlich wird dann eine Datei mit allen Sequenzen erstellt und gespeichert, als eine Art Archiv. Ich kann mir denn immer ein Video vom aktuellen Tag und eines pro Woche ansehen. Hier hätte ich natürlich gern den Timecode direkt im Video. Ich wüsste nicht, wie ich den aus dem Dateinamen extrahieren sollte.
Für die Anzeige benutze ich Flexplayer www.video-flash.de » FlexVideoPlayer Dazu müssen die Videos natürlich in flv umgewandelt werden. Auch dazu benutze ich mencoder. Ist natürlich alles noch nicht fertig.
Hallo Leute,
ich möchte noch mal auf meine Postings in diesem Thread zurückkommen:
Kann mir jemand einen vlc-Aufruf posten, der auf jeden Fall eine „sichtbare“ Reaktion des VLC-Players generieren sollte? (Damit ich eine WHS2011-Rechte-Probleme ausschließen kann)
Joachim
Hallo,
@JPaeper
Ich habe es mit „Fenster zeigen“ getestet:
IPS_ExecuteEx(„C:/Program Files/VideoLAN/VLC/vlc.exe“, $params, true, false, 1);
@normi
Dein Vorschlag hört sich nicht schlecht an.
Kannst Du mir ein paar ansetze posten?
Vermutlich machst Du das von IPS heraus.
Hallo Christian,
vielen Dank für Deine Antwort!
Leider führt
IPS_ExecuteEx("C:/Program Files (x86)/VideoLAN/VLC/vlc.exe", $params, true, false, 0);
auch zu der Fehlermeldung
Warning: A call to an OS function failed in [IP-Cam Hausfront\IP-Cam Steuerung\IP-Cam Steuerung\Laufende Aufnahme\Aufnahme] on line 12
Möglicherweise liegt es ja an meinen Parametern?
$params = "http://192.168.178.11/videostream.cgi?user=user&pwd=passwort --sout=#duplicate{dst=std{access=file,mux=mp4,vcodec =mp4v,vb=768,acodec=mp4a,ab=128,dst=F:\\IP-Symcon\\camsvideo\\Test.mp4}} --run-time 30 vlc://quit";
Ist irgendein grundlegender Fehler sichtbar?
Wenn ich im VLC diesen Teil direkt eingebe, dann bekomme ich im VLC den korrekten Stream angezeigt:
http://192.168.178.11/videostream.cgi?user=user&pwd=passwort
Joachim
Beim mir funktioniert ExecuteEx auch nicht mehr.
Probiert´s mal mit:
IPS_Execute('C:\Program Files (x86)\VideoLAN\VLC\vlc.exe', $params, false, false);
Hallo zusammen,
ich teste es zunächst immer erst ohne IPS, einfach von einer Batch-Datei, also z.B. so:
„C:\Program Files\VideoLAN\VLC\vlc.exe“ -vvv rtsp://192.168.2.xxx:xxx/video.mp4 --sout=#duplicate{dst=std{access=file,vcodec=h264,acodec=mp4a,dst=c: emp\xxx.mp4}} --run-time 10 vlc://quit
Wenn dies dann funktioniert, ziehe ich es in IPS nach.
Bei „IPS_Execute“ ist immer ein wenig problematisch die SessionID, hierzu gibt es auch diverse Threads bei anderern Szenarien, bei mir funktioniert es zuverlässig seit Monaten mit der „2“.
Edit: Meine natürlich „IPS_ExecuteEx“, das nutze ich in meinen Skripts.
Wolfgang
…mit dem Änderungsvorschlag von Christian ist zumindest die Fehlermeldung weg, es wird aber keine Datei erzeugt.
Bei Euch ist teilweise ein „-vvv“ im Parameterstring, und ein „rstp“ statt „http“…
Könnt Ihr noch mal bitte auf meinen Parameterstring schauen?
Joachim
VLC speichert mit diesen Anweisungen Streams, sinnvollerweise also „rtsp“. Versuche es doch erst mal mit dem Batch-File.
Wolfgang
Meine Parameter:
$params = "http://192.168.2.15/videostream.cgi?user=***&pwd=*** --sout=#duplicate{dst=std{access=file,mux=asf,dst=c:\\cam\\haustuer_" . date("Ymd-Hi") . ".mp4}} --run-time " . $duration . " vlc://quit";
DANKE, DANKE, DANKE!
Jetzt funktioniert es!!
Joachim
Jetzt stehst Du vom gleichen Problem wie ich.
Wie soll ich nur die mp4´s im WF anzeigen???
Ja…
Aber damit werde ich mich die nächsten Tage mal mit beschäftigen…
Joachim
Okay…
Also nun soll es darum gehen die gesicherten Videos im Webfront abspielbar zu machen.
Mein Ansatz wäre eine HTML-Box…
Dazu mal ein paar Fragen an die Webfront/Video-Einbindungsprofis:
- Wie lautet der HTML-Parameter-String? Offensichtlich können die Videos nur vom VLC-Player abgespielt werden.
- Wie muss der Pfad zur Datei eingebracht werden? So wie er auf dem IPS-Server liegt oder wie er im Netzwerk vom jeweiligen Klienten lautet?
- Muss die Datei vielleicht sogar in ein Verzeichnis unterhalb des Webfront-Ordners vorliegen?
Joachim
Nachtrag:
Wird die Parameterzeile wie in Posting 17 beschrieben um „mux=mp4,vcodec =mp4v,vb=768,acodec=mp4a,ab=128“ ergänzt, kann die Datei sowohl vom vlc-Player als auch vom Windows-Media-Player abgespielt werden - ich denke das sollte flexibler machen…
Dennoch ist es mir noch nicht gelungen ein Video im Webfront anzuzeigen, die Fehlermeldung lautet „ungültige Quelle“ - wobei ich derzeit noch nicht so genau weiß woher diese rührt (siehe 2+3)…
Hallo Leute,
ich habe inzwischen mit dem Versuch die aufgezeichneten Videos im Webfront anzuzeigen schon einige Fortschritte gemacht. Ich habe in mehrerer Stunden verschiedene Videocodierungen bei der Sicherung und verschiedene Parameter bei der Einbindung im Webfront getestet und mir ist es inzwischen gelungen das Video im Firefox anzeigen zu lassen - nur im Internet Explorer will es mir nicht so recht gelingen - irgendeinen heißen Tipp für mich??
Joachim
…wieder ein Stück weiter…
Bei der Aufzeichnung habe ich folgende Modifikationen vorgenommen:
$duration = 30;
$params = "http://".$k_IP_CAM_HAUSFRONT['IP']."/videostream.cgi?user=".$k_IP_CAM_HAUSFRONT['User']."&pwd=".$k_IP_CAM_HAUSFRONT['Password']." --sout=#duplicate{dst=std{access=file,mux=mp4,vcodec=h264,vb=768,acodec=mpga,ab=128,dst=f:\\IP-Symcon\\webfront\\user\\camsvideo\\haustuer_" . date("Ymd-Hi") . ".mp4}} --run-time " . $duration . " vlc://quit";
If($_IPS['SENDER'] == 'TimerEvent')
{
IPS_SetScriptTimer(57727 /*[IP-Cam Hausfront\IP-Cam Steuerung\IP-Cam Steuerung\Laufende Aufnahme\IP-CAM Aufnahme]*/ , 0);
SetValue(37449 /*[IP-Cam Hausfront\IP-Cam Steuerung\IP-Cam Steuerung\Laufende Aufnahme]*/ , false);
}
else
{
If (GetValueBoolean(37449 /*[IP-Cam Hausfront\IP-Cam Steuerung\IP-Cam Steuerung\Laufende Aufnahme]*/ ) == false)
{
SetValue(37449 /*[IP-Cam Hausfront\IP-Cam Steuerung\IP-Cam Steuerung\Laufende Aufnahme]*/ , true);
IPS_Execute("C:/Program Files (x86)/VideoLAN/VLC/vlc.exe", $params, false, false);
IPS_SetScriptTimer(57727 /*[IP-Cam Hausfront\IP-Cam Steuerung\IP-Cam Steuerung\Laufende Aufnahme\IP-CAM Aufnahme]*/ , $duration + 3);
}
}
return;
Wichtig ist dabei wohl die Einstellung von Video- und Audiocodec.
Zum Abspielen im Webfront wird einer HTML-Box folgender Wert zugewiesen:
$embFlash = '
<object classid="6BF52A52-394A-11d3-B153-00C04F79FAA6" type="video/mp4" data="http://192.168.178.8:82/user/camsvideo/video.mp4" width="480" height="320">
<param name="URL" value="http://192.168.178.8:82/user/camsvideo/video.mp4">
<param name="AllowScriptAccess" value="always">
<param name="quality" value="high">
<param name="bgcolor" value="#ffffff">
<param name="wmode" value="transparent">
</object>
';
SetValueString(48905 /*[Server\Testobjekte\Win 7 Message\mp4-Video]*/ ,$embFlash);
Die Dateien befinden sich dabei in einem Ordner unterhalb des Webfront-Ordners im IPS. Ohne die classid=„6BF52A52-394A-11d3-B153-00C04F79FAA6“ wird das Video im Firefox gezeigt, mit im Internet Explorer - vielleicht kann da jemand programmtechnische Umsetzung der Browser-Selbsterkennung beisteuern?
Soweit das Prinzip. Damit sind m.E. die Grundlagen geschaffen, jetzt geht es darum durch eine sinnvolle Anordnung von Buttons und Textfeldern im Webfront eine gute Umsetzung der Auswahl- und Löschmöglichkeit zu schaffen…
Ich würde mich über Ideen und Unterstützung freuen…
Joachim
3608 Hits - ich führe meinen Monolog mal einfach weiter…
Mit dieser Funktion die ich im Internet gefunden und etwas modifiziert habe bekommt man eine Liste der verfügbaren Videos im Verzeichnis:
//Ordnername definieren
$ordner = 'F:\IP-Symcon\webfront\user\camsvideo';
//Verzeichnis durchgehen und alle passenden Dateien in einem Array speichern
$dir = opendir($ordner);
while ($element = readdir($dir)) {
if (($element != '.') && ($element != '..')) {
if ((is_file($ordner.'/'.$element)) && (substr($ordner.'/'.$element, -3) == 'mp4')) {
$dateien[] = $element;
}
}
}
closedir($dir);
//Array sortieren
sort($dateien);
//evt. hier noch ein reset($dateien); einfügen
//Ausgabe
print_r($dateien);
return;
Aber welches Steuerelement im Webfront wäre geeignet um diese Dateien aufzulisten, abzuspielen oder zu löschen??
Joachim
Hallo Joachim,
ich würde Dir gerne helfen. Aber ich versteh hier nur Bahnhof.
Ich lösche - da ich auch keine bessere Lösung habe - die Videos die älter als 2 Tage sind.
<?
$dir = 'C:/cam'; // Verzeichnis
$files = (scandir($dir));
//print_r($files);
$yesterday = strtotime("-1 day"); //files die älter als zwei Tage sind sollen gelöscht werden
//echo $yesterday."\r";
$yesterday = date("Ymd",$yesterday);
$today = date("Ymd");
//echo $yesterday."\r";
//echo $today."\r";
foreach ($files as $file)
{
if (strpos($file, $yesterday)===false and strpos($file, $today)===false) //wenn Namensübereinstimmung
{
echo "lösche: ".$dir."/".$file."\r";
@unlink($dir."/".$file); //Datei löschen
}
}
?>
…so, die ersten Bilder wie es derzeit aussieht…
Was schon funktioniert:
- Einlesen des Verzeichnisses in dem die Videos von vlc gesichert werden
- Abspielen der Videos im Player
- Löschen der Videos in der Webfront-Liste und im Verzeichnis
Woran ich noch mal ran muss (mindestens):
- Triggern der Listenaktualisierung nach Aufzeichnung eines Videos
- Mal sehen was von Euch noch an Verbesserungsvorschlägen kommt…
Joachim