Stream von Kamera speichern

DANKE, DANKE, DANKE!:slight_smile:

Jetzt funktioniert es!!

Joachim

Jetzt stehst Du vom gleichen Problem wie ich.:frowning:

Wie soll ich nur die mp4´s im WF anzeigen???

Ja…:wink:

Aber damit werde ich mich die nächsten Tage mal mit beschäftigen…:cool:

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:

  1. Wie lautet der HTML-Parameter-String? Offensichtlich können die Videos nur vom VLC-Player abgespielt werden.
  2. 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?
  3. 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…:wink:

Joachim

3608 Hits - ich führe meinen Monolog mal einfach weiter…:smiley:

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.:frowning:

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…:wink:

Joachim

Verbesserung?:eek:

Das sieht doch ganz ordentlich aus.:slight_smile:

Wie hast Du das gemacht. Gibt es irgendwann eine Anleitung?
Funktioniert es auch mit Chrome?

Wäre net wenn Du deinen Erfolg mit uns teilst.:smiley:

Hallo Christian,

ich versuche Dir mal den gegenwärtigen Stand zu zeigen. Vorab: In der Konfiguration funktioniert es nicht im Google Chrome. Wie schon an anderer Stelle beschrieben werden die Videos der Kameras in einem Ordner unterhalb des webfront/user gesichert und von dort auch aufgerufen.

In dem einen Bild siehst Du die derzeitige Struktur der Kategorien, Skripte und Variablen.

Das Skript „Action“ wird ausgeführt, wenn eine der Videos ausgewählt bzw. gelöscht werden soll:


$Ausloeser = $_IPS['VARIABLE'];
$Wert = $_IPS['VALUE'];

$object = IPS_GetObject($Ausloeser);    // Hole alle Scripteigenschaften
$Dateiname = $object['ObjectName'];

If ($Wert == 0)
	{
	SetValueString(23433 /*[IP-Cam Videos\Video\Video-Titel]*/ , "Abspielen: ".$Dateiname);
   $embFlash = '
   <object classid="6BF52A52-394A-11d3-B153-00C04F79FAA6" type="video/mp4" data="http://192.168.178.8:82/user/camsvideo/'.$Dateiname.'" width="800" height="600">
      <param name="URL" value="http://192.168.178.8:82/user/camsvideo/'.$Dateiname.'">
      <param name="autoStart" value="False">
      <param name="ShowControls" VALUE="true">
		<param name="ShowStatusBar" value="true">
		<param name="ShowDisplay" VALUE="false">
      <param name="AllowScriptAccess" value="always">
      <param name="quality" value="high">
      <param name="bgcolor" value="#ffffff">
      <param name="wmode" value="transparent"> </object>';
	SetValueString(48905 /*[IP-Cam Videos\Video\Video-Aufzeichnung]*/ ,$embFlash);

	}
If ($Wert == 1)
	{
	SetValueString(23433 /*[IP-Cam Videos\Video\Video-Titel]*/ , "Löschen: ".$Dateiname);
   IPS_DeleteVariable($Ausloeser);
	unlink("F:\IP-Symcon\webfront\user\camsvideo/$Dateiname");
	IPS_RunScript(28766 /*[IP-Cam Videos\Auswahl\Video-Auswahl\Videos]*/ );
	etValueString(23433 /*[IP-Cam Videos\Video\Video-Titel]*/ , "");
	}

In dem Parameterstring musst Du mal experimentieren, unter Umständen läuft es schon wenn Du "classid=„6BF52A52-394A-11d3-B153-00C04F79FAA6“ herausnimmst…

Das Skript „Videos“ hat den folgenden Inhalt:

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

$parentID = IPS_GetObject($IPS_SELF);
$parentID = $parentID['ParentID'];

$z = 0;

foreach ($dateien as $auswahl)
{
	If (IPS_GetVariableIDByName ($dateien[$z] , $parentID) === false)
	   {
		SetValueInteger(CreateVideoVariableByName($parentID, $dateien[$z], ($z + 1) * 10), 1);
		}
	$z = $z + 1;
}

return;


function CreateVideoVariableByName($id, $name, $position)
{
   global $IPS_SELF;
   $vid = @IPS_GetVariableIDByName($name, $id);
   if($vid === false)
   {
      $vid = IPS_CreateVariable(1);
      IPS_SetParent($vid, $id);
      IPS_SetName($vid, $name);
		IPS_SetPosition($vid, $position);
		IPS_SetVariableCustomAction($vid, 58732 /*[IP-Cam Videos\Auswahl\Video-Auswahl\Action]*/  );
      IPS_SetVariableCustomProfile($vid, "Videoliste");
   }
return $vid;
    }

Das Skript zeigt die im Verzeichnis gesicherten Videos im mp4-Format und wird getriggert wenn die Aufnahme-Variable der Kameras auf false wechselt. Es wird im Skript „Action“ aufgerufen, wenn man einen Film gelöscht hat um denn aktuellen Stand anzuzeigen.
Das andere Bild zeigt Dir das eigens dafür erstellt Profil „Videoliste“, es ist notwendig, damit die jeweiligen Zeilen die beiden Buttons „Abspielen“ und "Löschen hat. Hier wäre es vielleicht etwas schöner wenn sie die dafür gebräuchlichen Icons im Button wären…

Schau mal ob Du mit den Informationen schon zurecht kommst, ansonsten melde Dich noch mal.

Joachim

Vielen Dank Joachim,

läuft super mit Chrome.:loveips: ("classid=„6BF52A52-394A-11d3-B153-00C04F79FAA6“ muss raus)

Ein paar Änderungen habe ich gemacht da man das laufende Video wegen Zugriff nicht löschen konnte.

If ($Wert == 1)
    {
    SetValue($_IPS['VARIABLE'], $_IPS['VALUE']);
    SetValueString(36752 /*[Zuhaus\Kameras\CAM\Video\Video-Aufzeichnung]*/ ,"");
    SetValueString(43909 /*[Zuhaus\Kameras\CAM\Video\Video-Titel]*/ , "Löschen: ".$Dateiname);
    sleep (5);
    IPS_DeleteVariable($Ausloeser);
    unlink("C:\IPSYMCON\webfront\user\camsvideo/".$Dateiname);
    IPS_RunScript(25678 /*[Zuhaus\Kameras\CAM\Auswahl\Videos]*/);
    SetValueString(43909 /*[Zuhaus\Kameras\CAM\Video\Video-Titel]*/, "");
    }

Ich werde noch im Variableprofil „sichern“ hinzufügen.:smiley:

Klasse!

Das Skript ist sicherlich noch ausbaufähig, toll wäre eine automatisch Parametergenerierung je nach Browser…

Auch die Videos nach einer gewissen Zeit automatisch (oder über eine spezielle Funktion) zu löschen klingt sinnvoll - warum sollte ich mir die Videos aus drei Wochen Abwesenheit anschauen, wenn nichts „passiert“ ist…

Joachim

Hallo Christian,

ich habe im Videos-Skript noch folgende Änderung/Erweiterung durchgeführt:

foreach ($dateien as $auswahl)
{
	If (IPS_GetVariableIDByName ($dateien[$z] , $parentID) === false)
	   {
		SetValueInteger(CreateVideoVariableByName($parentID, $dateien[$z], ($z + 1) * 10), 1);
		}
	else
	   {
		IPS_SetPosition(IPS_GetVariableIDByName ($dateien[$z] , $parentID), ($z + 1) * 10);
		}
	$z = $z + 1;
}

Diese Erweiterung führt dazu, dass die Reihenfolge auch für die Elemente die schon vorhanden sind geändert bzw. angepasst wird…

Joachim

Hallo Joachim,

bei meinen IPS-Rechner (Win8 Chrome) und meinen Laptop (XP Chrome) funktioniert es einwandfrei.
Mein Büro-Rechner (Win7 Chrome) sieht es so aus. Leider kein Video zu sehen:

Kannst Du mir einen Rat geben?

PS: Die Sortierung wäre toll wenn das neuste oben wär.

Hallo Christian,

versuche mal „rsort“ statt „sort“ im Skript „Videos“.

Ich nutzte kein Chrome. Kann es sein, dass Du auf den funktionierenden Rechner irgendwelche Codecs installiert hast die auf dem anderen Rechner fehlen? Codecs installiert man z.B. durch Codec-Pakete oder durch Programme mit Videoplayer-Funktion (z.B. Nero, VLC-Player usw.).

Joachim

Nachtag: Ich nutze für den Play-Button inzwischen ein „>“ und für denn Löschen-Button ein „x“, ist platzsparender und sieht finde ich etwas besser aus…

Hallo zusammen,

mich hat immer noch ein wenig gestört, dass auf dem IPS-Server der VLC-Player bei Aktivierung im Vordergrund und damit als sichtbares Fenster geöffnet wurde.
Man kann den VLC-Player jedoch auch minimiert starten - finde ich angenehmer.
So geht’s (VLC Version 2.1.2):

  1. VLC-Player starten
  2. Aus dem Menü „Einstellungen wählen“ (oder CRTL+P)
  3. Im Fenster ganz links unten „Alle“ (statt „Einfach“) wählen
  4. In der Baumansicht „Interface -> Hauptinterfaces -> Qt“ wählen
  5. Rechts die Checkbox „VLC nur mit einem Icon in der Symbolleiste (Systray) starten“ aktivieren
  6. In der Baumansicht „Interface -> Hauptinterfaces -> Skins“ wählen
  7. Rechts die Checkbox „Systray-Icon“ aktivieren und die Checkbox „VLC in der Taskleiste anzeigen“ deaktivieren
  8. Einstellungen speichern, VLC beenden

Beim Triggern/Starten wird so im Systray für ein paar Sekunden eine Benachrichtigung für den Stream (auch ggf. mehrfach bei paralleler Aufzeichnung) angezeigt.

Viele Grüße
Wolfgang