2
0
mirror of https://github.com/fhem/fhem-mirror.git synced 2025-04-20 19:36:02 +00:00

49_SSCam: fix noQuotesForSID using in streaming devices type mjpeg

git-svn-id: https://svn.fhem.de/fhem/trunk@26187 2b470e98-0d58-463d-a4d8-8e2adae1ed80
This commit is contained in:
nasseeder1 2022-07-01 19:30:18 +00:00
parent 18c45fa09f
commit 8c67809844
2 changed files with 33 additions and 24 deletions

View File

@ -1,5 +1,6 @@
# Add changes at the top of the list. Keep it in ASCII, and 80-char wide. # Add changes at the top of the list. Keep it in ASCII, and 80-char wide.
# Do not insert empty lines here, update check depends on it. # Do not insert empty lines here, update check depends on it.
- bugfix: 49_SSCam: fix noQuotesForSID using in streaming devices type mjpeg
- feature: 74_GardenaSmartDevice: add lona readings, [fix] - setter procedure - feature: 74_GardenaSmartDevice: add lona readings, [fix] - setter procedure
- feature: 14_CUL_TCM97001: - feature: 14_CUL_TCM97001:
add KW9015 (TFA 30.3161) add KW9015 (TFA 30.3161)

View File

@ -185,6 +185,7 @@ BEGIN {
# Versions History intern # Versions History intern
my %vNotesIntern = ( my %vNotesIntern = (
"9.10.5" => "01.07.2022 fix noQuotesForSID using in streaming devices type mjpeg ",
"9.10.4" => "03.06.2022 avoid warning 'No data for Cache with key: {LASTSNAP}' if no snap exists ", "9.10.4" => "03.06.2022 avoid warning 'No data for Cache with key: {LASTSNAP}' if no snap exists ",
"9.10.3" => "23.11.2022 made SYNO.SurveillanceStation.AudioStream, SYNO.SurveillanceStation.VideoStream optional for SVS compatibility to 9.0.0 ", "9.10.3" => "23.11.2022 made SYNO.SurveillanceStation.AudioStream, SYNO.SurveillanceStation.VideoStream optional for SVS compatibility to 9.0.0 ",
"9.10.2" => "03.11.2021 set SVS compatibility to 8.2.10 ", "9.10.2" => "03.11.2021 set SVS compatibility to 8.2.10 ",
@ -2582,15 +2583,15 @@ sub _setrunView { ## no critic "not used"
$hash->{HELPER}{ALIAS} = "LiveView"; $hash->{HELPER}{ALIAS} = "LiveView";
$hash->{HELPER}{RUNVIEW} = "live_open"; $hash->{HELPER}{RUNVIEW} = "live_open";
$hash->{HELPER}{ACTSTRM} = ""; # sprechender Name des laufenden Streamtyps für SSCamSTRM $hash->{HELPER}{ACTSTRM} = ""; # sprechender Name des laufenden Streamtyps für SSCamSTRM
}
} elsif ($prop eq "live_link") { elsif ($prop eq "live_link") {
$hash->{HELPER}{OPENWINDOW} = 0; $hash->{HELPER}{OPENWINDOW} = 0;
$hash->{HELPER}{WLTYPE} = "link"; $hash->{HELPER}{WLTYPE} = "link";
$hash->{HELPER}{ALIAS} = "LiveView"; $hash->{HELPER}{ALIAS} = "LiveView";
$hash->{HELPER}{RUNVIEW} = "live_link"; $hash->{HELPER}{RUNVIEW} = "live_link";
$hash->{HELPER}{ACTSTRM} = ""; # sprechender Name des laufenden Streamtyps für SSCamSTRM $hash->{HELPER}{ACTSTRM} = ""; # sprechender Name des laufenden Streamtyps für SSCamSTRM
}
} elsif ($prop eq "lastrec_open") { elsif ($prop eq "lastrec_open") {
if ($prop1) { if ($prop1) {
$hash->{HELPER}{VIEWOPENROOM} = $prop1; $hash->{HELPER}{VIEWOPENROOM} = $prop1;
} }
@ -2603,36 +2604,36 @@ sub _setrunView { ## no critic "not used"
$hash->{HELPER}{ALIAS} = "LastRecording"; $hash->{HELPER}{ALIAS} = "LastRecording";
$hash->{HELPER}{RUNVIEW} = "lastrec_open"; $hash->{HELPER}{RUNVIEW} = "lastrec_open";
$hash->{HELPER}{ACTSTRM} = ""; # sprechender Name des laufenden Streamtyps für SSCamSTRM $hash->{HELPER}{ACTSTRM} = ""; # sprechender Name des laufenden Streamtyps für SSCamSTRM
}
} elsif ($prop eq "lastrec_fw") { # Video in iFrame eingebettet elsif ($prop eq "lastrec_fw") { # Video in iFrame eingebettet
$hash->{HELPER}{OPENWINDOW} = 0; $hash->{HELPER}{OPENWINDOW} = 0;
$hash->{HELPER}{WLTYPE} = "iframe"; $hash->{HELPER}{WLTYPE} = "iframe";
$hash->{HELPER}{ALIAS} = " "; $hash->{HELPER}{ALIAS} = " ";
$hash->{HELPER}{RUNVIEW} = "lastrec"; $hash->{HELPER}{RUNVIEW} = "lastrec";
$hash->{HELPER}{ACTSTRM} = "last Recording"; # sprechender Name des laufenden Streamtyps für SSCamSTRM $hash->{HELPER}{ACTSTRM} = "last Recording"; # sprechender Name des laufenden Streamtyps für SSCamSTRM
}
} elsif ($prop eq "lastrec_fw_MJPEG") { # “video/avi” MJPEG format event elsif ($prop eq "lastrec_fw_MJPEG") { # “video/avi” MJPEG format event
$hash->{HELPER}{OPENWINDOW} = 0; $hash->{HELPER}{OPENWINDOW} = 0;
$hash->{HELPER}{WLTYPE} = "image"; $hash->{HELPER}{WLTYPE} = "image";
$hash->{HELPER}{ALIAS} = " "; $hash->{HELPER}{ALIAS} = " ";
$hash->{HELPER}{RUNVIEW} = "lastrec"; $hash->{HELPER}{RUNVIEW} = "lastrec";
$hash->{HELPER}{ACTSTRM} = "last Recording"; # sprechender Name des laufenden Streamtyps für SSCamSTRM $hash->{HELPER}{ACTSTRM} = "last Recording"; # sprechender Name des laufenden Streamtyps für SSCamSTRM
}
} elsif ($prop eq "lastrec_fw_MPEG4/H.264") { # “video/mp4” MPEG4/H.264 format event elsif ($prop eq "lastrec_fw_MPEG4/H.264") { # “video/mp4” MPEG4/H.264 format event
$hash->{HELPER}{OPENWINDOW} = 0; $hash->{HELPER}{OPENWINDOW} = 0;
$hash->{HELPER}{WLTYPE} = "video"; $hash->{HELPER}{WLTYPE} = "video";
$hash->{HELPER}{ALIAS} = " "; $hash->{HELPER}{ALIAS} = " ";
$hash->{HELPER}{RUNVIEW} = "lastrec"; $hash->{HELPER}{RUNVIEW} = "lastrec";
$hash->{HELPER}{ACTSTRM} = "last Recording"; # sprechender Name des laufenden Streamtyps für SSCamSTRM $hash->{HELPER}{ACTSTRM} = "last Recording"; # sprechender Name des laufenden Streamtyps für SSCamSTRM
}
} elsif ($prop eq "live_fw") { elsif ($prop eq "live_fw") {
$hash->{HELPER}{OPENWINDOW} = 0; $hash->{HELPER}{OPENWINDOW} = 0;
$hash->{HELPER}{WLTYPE} = "image"; $hash->{HELPER}{WLTYPE} = "image";
$hash->{HELPER}{ALIAS} = " "; $hash->{HELPER}{ALIAS} = " ";
$hash->{HELPER}{RUNVIEW} = "live_fw"; $hash->{HELPER}{RUNVIEW} = "live_fw";
$hash->{HELPER}{ACTSTRM} = "MJPEG Livestream"; # sprechender Name des laufenden Streamtyps für SSCamSTRM $hash->{HELPER}{ACTSTRM} = "MJPEG Livestream"; # sprechender Name des laufenden Streamtyps für SSCamSTRM
}
} elsif ($prop eq "live_fw_hls") { elsif ($prop eq "live_fw_hls") {
if(!IsCapHLS($hash)) { if(!IsCapHLS($hash)) {
return qq{API "SYNO.SurveillanceStation.VideoStream" is not available or Reading "CamStreamFormat" is not "HLS". May be your API version is 2.8 or lower.}; return qq{API "SYNO.SurveillanceStation.VideoStream" is not available or Reading "CamStreamFormat" is not "HLS". May be your API version is 2.8 or lower.};
} }
@ -2642,8 +2643,8 @@ sub _setrunView { ## no critic "not used"
$hash->{HELPER}{ALIAS} = "View only on compatible browsers"; $hash->{HELPER}{ALIAS} = "View only on compatible browsers";
$hash->{HELPER}{RUNVIEW} = "live_fw_hls"; $hash->{HELPER}{RUNVIEW} = "live_fw_hls";
$hash->{HELPER}{ACTSTRM} = "HLS Livestream"; # sprechender Name des laufenden Streamtyps für SSCamSTRM $hash->{HELPER}{ACTSTRM} = "HLS Livestream"; # sprechender Name des laufenden Streamtyps für SSCamSTRM
}
} elsif ($prop eq "lastsnap_fw") { elsif ($prop eq "lastsnap_fw") {
$hash->{HELPER}{LSNAPBYSTRMDEV} = 1 if($prop1); # Anzeige durch SSCamSTRM-Device ausgelöst $hash->{HELPER}{LSNAPBYSTRMDEV} = 1 if($prop1); # Anzeige durch SSCamSTRM-Device ausgelöst
$hash->{HELPER}{LSNAPBYDEV} = 1 if(!$prop1); # Anzeige durch SSCam ausgelöst $hash->{HELPER}{LSNAPBYDEV} = 1 if(!$prop1); # Anzeige durch SSCam ausgelöst
$hash->{HELPER}{OPENWINDOW} = 0; $hash->{HELPER}{OPENWINDOW} = 0;
@ -5707,8 +5708,8 @@ sub _Oprunliveview {
if($part) { # API "SYNO.SurveillanceStation.VideoStream" vorhanden ? (removed ab API v2.8) if($part) { # API "SYNO.SurveillanceStation.VideoStream" vorhanden ? (removed ab API v2.8)
$exturl .= qq{/webapi/$hash->{HELPER}{API}{$vkey}{PATH}?}.$part; $exturl .= qq{/webapi/$hash->{HELPER}{API}{$vkey}{PATH}?}.$part;
$url = qq{$proto://$serveraddr:$serverport/webapi/$hash->{HELPER}{API}{$vkey}{PATH}?}.$part; # interne URL $url = qq{$proto://$serveraddr:$serverport/webapi/$hash->{HELPER}{API}{$vkey}{PATH}?}.$part; # interne URL
}
} elsif ($hash->{HELPER}{STMKEYMJPEGHTTP}) { elsif ($hash->{HELPER}{STMKEYMJPEGHTTP}) {
$url = $hash->{HELPER}{STMKEYMJPEGHTTP}; $url = $hash->{HELPER}{STMKEYMJPEGHTTP};
} }
} }
@ -7757,6 +7758,7 @@ sub streamDev { ## no critic 'comp
camid => $hash->{CAMID}, camid => $hash->{CAMID},
sid => $hash->{HELPER}{SID}, sid => $hash->{HELPER}{SID},
proto => $hash->{PROTOCOL}, proto => $hash->{PROTOCOL},
noQuotesForSID => AttrVal($camname, "noQuotesForSID",0),
cmdstop => $cmdstop, cmdstop => $cmdstop,
cmdhlsreact => $cmdhlsreact, cmdhlsreact => $cmdhlsreact,
cmdmjpegrun => $cmdmjpegrun, cmdmjpegrun => $cmdmjpegrun,
@ -7858,6 +7860,7 @@ sub _streamDevMJPEG { ## no critic 'complexity not
my $ha = $params->{ha}; my $ha = $params->{ha};
my $hb = $params->{hb}; my $hb = $params->{hb};
my $hau = $params->{hau}; my $hau = $params->{hau};
my $noQuotesForSID = $params->{noQuotesForSID};
my $serveraddr = $params->{serveraddr}; my $serveraddr = $params->{serveraddr};
my $serverport = $params->{serverport}; my $serverport = $params->{serverport};
@ -7879,6 +7882,7 @@ sub _streamDevMJPEG { ## no critic 'complexity not
my $imgdosnap = $params->{imgdosnap}; my $imgdosnap = $params->{imgdosnap};
my ($link,$audiolink); my ($link,$audiolink);
my $quote = $noQuotesForSID ? qq{"} : qq{};
my $ret = ""; my $ret = "";
if(ReadingsVal($camname, "SVSversion", "") eq "8.2.3-5828" && ReadingsVal($camname, "CamVideoType", "") !~ /MJPEG/x) { if(ReadingsVal($camname, "SVSversion", "") eq "8.2.3-5828" && ReadingsVal($camname, "CamVideoType", "") !~ /MJPEG/x) {
@ -7888,17 +7892,17 @@ sub _streamDevMJPEG { ## no critic 'complexity not
} }
else { else {
if($apivideostmsver) { if($apivideostmsver) {
$link = "$proto://$serveraddr:$serverport/webapi/$apivideostmspath?api=$apivideostms&version=$apivideostmsver&method=Stream&cameraId=$camid&format=mjpeg&_sid=$sid"; $link = qq{$proto://$serveraddr:$serverport/webapi/$apivideostmspath?api=$apivideostms&version=$apivideostmsver&method=Stream&cameraId=$camid&format=mjpeg&_sid=$quote.$sid.$quote};
} }
elsif ($hash->{HELPER}{STMKEYMJPEGHTTP}) { elsif ($hash->{HELPER}{STMKEYMJPEGHTTP}) {
$link = $hash->{HELPER}{STMKEYMJPEGHTTP}; $link = $hash->{HELPER}{STMKEYMJPEGHTTP};
$link =~ s/"//gx; # vermeidet Javascript Fehler "SyntaxError: " unterminated string literal" $link =~ s/"/%22/gx if($link); # vermeidet Javascript Fehler "SyntaxError: " unterminated string literal"
} }
return $ret if(!$link); return $ret if(!$link);
if($apiaudiostmver) { if($apiaudiostmver) {
$audiolink = "$proto://$serveraddr:$serverport/webapi/$apiaudiostmpath?api=$apiaudiostm&version=$apiaudiostmver&method=Stream&cameraId=$camid&_sid=$sid"; $audiolink = "$proto://$serveraddr:$serverport/webapi/$apiaudiostmpath?api=$apiaudiostm&version=$apiaudiostmver&method=Stream&cameraId=$camid&_sid=$quote.$sid.$quote";
} }
if(!$ftui) { if(!$ftui) {
@ -7974,6 +7978,7 @@ sub _streamDevLASTSNAP { ## no critic 'not
my ($link,$cause,$ret) = ("","",""); my ($link,$cause,$ret) = ("","","");
my $cache = cache($camname, "c_init"); # Cache initialisieren my $cache = cache($camname, "c_init"); # Cache initialisieren
Log3($camname, 1, "$camname - Fall back to internal Cache due to preceding failure.") if(!$cache); Log3($camname, 1, "$camname - Fall back to internal Cache due to preceding failure.") if(!$cache);
if(!$cache || $cache eq "internal" ) { if(!$cache || $cache eq "internal" ) {
@ -13288,7 +13293,8 @@ attr <name> genericStrmHtmlTag <img $HTMLATTR
<li><b>noQuotesForSID</b><br> <li><b>noQuotesForSID</b><br>
This attribute delete the quotes for SID and for StmKeys. This attribute delete the quotes for SID and for StmKeys.
The attribute may be helpful in some cases to avoid errormessages "402 - permission denied" or "105 - The attribute may be helpful in some cases to avoid errormessages "402 - permission denied" or "105 -
Insufficient user privilege" and makes login possible. Insufficient user privilege" and makes login possible. <br>
(default: 0)
</li><br> </li><br>
<a name="pollcaminfoall"></a> <a name="pollcaminfoall"></a>
@ -15314,7 +15320,9 @@ attr &lt;name&gt; genericStrmHtmlTag &lt;img $HTMLATTR
<li><b>noQuotesForSID</b><br> <li><b>noQuotesForSID</b><br>
Dieses Attribut entfernt Quotes für SID bzw. der StmKeys. Dieses Attribut entfernt Quotes für SID bzw. der StmKeys.
Es kann in bestimmten Fällen die Fehlermeldung "402 - permission denied" oder "105 - Insufficient user privilege" Es kann in bestimmten Fällen die Fehlermeldung "402 - permission denied" oder "105 - Insufficient user privilege"
vermeiden und ein login ermöglichen. </li><br> vermeiden und ein login ermöglichen. <br>
(default: 0)
</li><br>
<a name="pollcaminfoall"></a> <a name="pollcaminfoall"></a>
<li><b>pollcaminfoall</b><br> <li><b>pollcaminfoall</b><br>