diff --git a/.github/workflows/codeLintGlobal.yml b/.github/workflows/codeLintGlobal.yml deleted file mode 100644 index d10bd11..0000000 --- a/.github/workflows/codeLintGlobal.yml +++ /dev/null @@ -1,62 +0,0 @@ -on: - # Trigger the workflow on push or pull request, - # but only for the main branch - push: - branches: - - beta - pull_request: - branches: - - beta - - master - -name : 'Code Lint Global' - -jobs: - run-linters: - name: Test Linters - runs-on: ubuntu-latest - - steps: - - name: Check out Git repository - uses: actions/checkout@v3 - - - name: Set up PHP - uses: shivammathur/setup-php@v2 - with: - php-version: "7.4" - coverage: none - tools: phpcs - - - name: Set up Python - uses: actions/setup-python@v1 - with: - python-version: 3.8 - - - name: Set up Node.js - uses: actions/setup-node@v1 - with: - node-version: 14 - - # ESLint and Prettier must be in `package.json` - - name: Install Node.js dependencies - run: npm i prettier - - - name: Install Python dependencies - run: pip install flake8 black - - - name: Run linters - uses: wearerequired/lint-action@v2 - with: - php_codesniffer: false - # Optional: Ignore warnings - php_codesniffer_args: "-n --ignore-annotations ./core ./desktop ./plugin_info" - flake8: true - prettier: true - prettier_extensions: css,html,js,json,jsx,md,sass,scss,ts,tsx,vue,yaml - auto_fix: true - prettier_auto_fix: true - git_email: commit@jeedom.com - git_name: 'JeedomBot lint Pretty' - commit: false - black: true - black_auto_fix: true diff --git a/.github/workflows/lint_Php73.yml b/.github/workflows/lint_Php73.yml deleted file mode 100644 index e9f65cf..0000000 --- a/.github/workflows/lint_Php73.yml +++ /dev/null @@ -1,28 +0,0 @@ -name : 'Php 7.3' - -on: - push: - branches: - - beta - paths: - - "**.php" - pull_request: - branches: - - beta - - master - paths: - - "**.php" - -jobs: - run-linters: - name: Run linters - runs-on: ubuntu-latest - - steps: - - name: Check out Git repository - uses: actions/checkout@v3 - - - name: PHP syntax checker 7.3 - uses: prestashop/github-action-php-lint/7.3@v1 - with: - folder-to-exclude: "! -path \"./3rdparty/*\"" diff --git a/.github/workflows/lint_Php74.yml b/.github/workflows/lint_Php74.yml deleted file mode 100644 index e87f508..0000000 --- a/.github/workflows/lint_Php74.yml +++ /dev/null @@ -1,28 +0,0 @@ -name : 'Php 7.4' - -on: - push: - branches: - - beta - paths: - - "**.php" - pull_request: - branches: - - beta - - master - paths: - - "**.php" - -jobs: - run-linters: - name: Run linters - runs-on: ubuntu-latest - - steps: - - name: Check out Git repository - uses: actions/checkout@v3 - - - name: PHP syntax checker 7.4 - uses: prestashop/github-action-php-lint/7.4@v1 - with: - folder-to-exclude: "! -path \"./3rdparty/*\"" diff --git a/.github/workflows/php.yml b/.github/workflows/php.yml deleted file mode 100644 index b6669dc..0000000 --- a/.github/workflows/php.yml +++ /dev/null @@ -1,23 +0,0 @@ -name: "PHP" - -on: - push: - branches: - - beta - paths: - - "**.php" - pull_request: - branches: - - beta - - master - paths: - - "**.php" - -jobs: - phpcs: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - - uses: michaelw90/PHP-Lint@master - - diff --git a/.github/workflows/prettier.yml b/.github/workflows/prettier.yml index 26d8687..08026e2 100644 --- a/.github/workflows/prettier.yml +++ b/.github/workflows/prettier.yml @@ -1,6 +1,5 @@ on: - # Trigger the workflow on push or pull request, - # but only for the main branch + # Create branch > prettier / this workflows create commit on branch prettier. push: branches: - prettier @@ -8,49 +7,8 @@ on: branches: - prettier -name : 'Prettier' +name : 'Prettier Plugin Jeedom' jobs: - run-linters: - name: Test Linters - runs-on: ubuntu-latest - - steps: - - name: Check out Git repository - uses: actions/checkout@v3 - - - name: Set up PHP - uses: shivammathur/setup-php@v2 - with: - php-version: "7.4" - coverage: none - tools: phpcs - - - name: Set up Python - uses: actions/setup-python@v1 - with: - python-version: 3.8 - - - name: Set up Node.js - uses: actions/setup-node@v1 - with: - node-version: 14 - - # ESLint and Prettier must be in `package.json` - - name: Install Node.js dependencies - run: npm i prettier - - - name: Install Python dependencies - run: pip install black - - - name: Run linters - uses: wearerequired/lint-action@v2 - with: - prettier: true - prettier_extensions: css,html,js,json,jsx,md,sass,scss,ts,tsx,vue,yaml - auto_fix: true - prettier_auto_fix: true - git_email: commit@jeedom.com - git_name: 'JeedomBot lint Pretty' - black: true - black_auto_fix: true + prettier: + uses: jeedom/workflows/.github/workflows/prettier.yml@main diff --git a/.github/workflows/work.yml b/.github/workflows/work.yml new file mode 100644 index 0000000..345021e --- /dev/null +++ b/.github/workflows/work.yml @@ -0,0 +1,15 @@ +on: + # Workflows check plugin Jeedom + push: + branches: + - beta + pull_request: + branches: + - beta + - master + +name : 'Full Workflows Plugin Jeedom' + +jobs: + plugin: + uses: jeedom/workflows/.github/workflows/plugin.yml@main diff --git a/3rdparty/rtsp-to-hls-copy.sh b/3rdparty/rtsp-to-hls-copy.sh new file mode 100644 index 0000000..0a20aea --- /dev/null +++ b/3rdparty/rtsp-to-hls-copy.sh @@ -0,0 +1,25 @@ +#!/bin/sh + +#[ $# -eq 0 ] && { echo "Usage: $0 rtsp://... <name>"; exit 1; } + +BASEDIR=$(dirname "$0") +SOURCE="$1" +DEST="$2" +NAME=${2:-cctv} +#ARCHIVE=${ARCHIVE:-archive} + +HLS_TIME=${HLS_TIME:-5} +HLS_LIST_SIZE=${HLS_LIST_SIZE:-5} + +ffmpeg -rtsp_transport tcp -i "$SOURCE" \ +-f hls \ +-vsync 0 -copyts -vcodec copy -acodec copy \ +-tune zerolatency \ +-movflags frag_keyframe+empty_moov \ +-hls_flags delete_segments+append_list \ +-hls_init_time 1 \ +-hls_time $HLS_TIME \ +-hls_list_size $HLS_LIST_SIZE \ +-hls_base_url "segments/" \ +-hls_segment_filename ${BASEDIR}"/../data/segments/$NAME-%d.ts" \ +${BASEDIR}"/../data/$NAME.m3u8" \ No newline at end of file diff --git a/3rdparty/rtsp-to-hls-x264.sh b/3rdparty/rtsp-to-hls-x264.sh new file mode 100644 index 0000000..c930606 --- /dev/null +++ b/3rdparty/rtsp-to-hls-x264.sh @@ -0,0 +1,25 @@ +#!/bin/sh + +#[ $# -eq 0 ] && { echo "Usage: $0 rtsp://... <name>"; exit 1; } + +BASEDIR=$(dirname "$0") +SOURCE="$1" +DEST="$2" +NAME=${2:-cctv} +#ARCHIVE=${ARCHIVE:-archive} + +HLS_TIME=${HLS_TIME:-5} +HLS_LIST_SIZE=${HLS_LIST_SIZE:-5} + +ffmpeg -rtsp_transport tcp -i "$SOURCE" \ +-f hls \ +-vsync 0 -copyts -c:v libx264 -preset ultrafast -tune zerolatency -profile:v main \ +-c:a copy \ +-movflags frag_keyframe+empty_moov \ +-hls_flags delete_segments+append_list \ +-hls_init_time 1 \ +-hls_time $HLS_TIME \ +-hls_list_size $HLS_LIST_SIZE \ +-hls_base_url "segments/" \ +-hls_segment_filename ${BASEDIR}"/../data/segments/$NAME-%d.ts" \ +${BASEDIR}"/../data/$NAME.m3u8" \ No newline at end of file diff --git a/core/ajax/camera.ajax.php b/core/ajax/camera.ajax.php index 5310519..dd995ca 100644 --- a/core/ajax/camera.ajax.php +++ b/core/ajax/camera.ajax.php @@ -31,7 +31,8 @@ if(!is_object($camera)){ throw new \Exception(__('Impossible de trouver la camera : ',__FILE__).init('id')); } - if(count(system::ps('rtsp-to-hls.sh.*'.$camera->getConfiguration('localApiKey'))) == 0){ + $rtspScript = dirname(__FILE__) . '/../../3rdparty/rtsp-to-hls-' . ($camera->getConfiguration('encodeX264RTSP', 0) == 1 ? 'x264' : 'copy') . '.sh '; + if(count(system::ps('rtsp-to-hls-*.sh.*'.$camera->getConfiguration('localApiKey'))) == 0){ shell_exec('(ps ax || ps w) | grep ffmpeg.*'.$camera->getConfiguration('localApiKey').' | awk \'{print $2}\' | xargs sudo kill -9'); $replace = array( '#username#' => urlencode($camera->getConfiguration('username')), @@ -43,8 +44,8 @@ if (!file_exists(dirname(__FILE__) . '/../../data/segments')) { mkdir(dirname(__FILE__) . '/../../data/segments', 0777, true); } - log::add('camera', 'debug', 'nohup '.dirname(__FILE__) . '/../../3rdparty/rtsp-to-hls.sh ' . trim(str_replace(array_keys($replace), $replace, $camera->getConfiguration('cameraStreamAccessUrl'))).' "' . $camera->getConfiguration('localApiKey') . '" > /dev/null 2>&1 &'); - exec('nohup ' .dirname(__FILE__) . '/../../3rdparty/rtsp-to-hls.sh ' . trim(str_replace(array_keys($replace), $replace, $camera->getConfiguration('cameraStreamAccessUrl'))).' "' . $camera->getConfiguration('localApiKey') . '" > /dev/null 2>&1 &'); + log::add('camera', 'debug', 'nohup ' . $rtspScript . trim(str_replace(array_keys($replace), $replace, $camera->getConfiguration('cameraStreamAccessUrl'))).' "' . $camera->getConfiguration('localApiKey') . '" > /dev/null 2>&1 &'); + exec('nohup ' . $rtspScript . trim(str_replace(array_keys($replace), $replace, $camera->getConfiguration('cameraStreamAccessUrl'))).' "' . $camera->getConfiguration('localApiKey') . '" > /dev/null 2>&1 &'); $i=0; while(!file_exists(__DIR__.'/../../data/'.$camera->getConfiguration('localApiKey').'.m3u8')){ sleep(1); @@ -56,72 +57,70 @@ } $camera->setCache('lastStreamCall',strtotime('now')); shell_exec(system::getCmdSudo().' find '.__DIR__.'/../../data/segments/'.$camera->getConfiguration('localApiKey').'-*.ts -mmin +5 -type f -exec rm -f {} \; 2>&1 > /dev/null'); - ajax::success(); - } - - if (!isConnect('admin')) { - throw new Exception(__('401 - Accès non autorisé', __FILE__)); - } - - - - if (init('action') == 'addDiscoverCam') { - camera::addDiscoverCam(json_decode(init('config'), true)); - ajax::success(); - } - - if (init('action') == 'removeRecord') { - $file = init('file'); - $file = str_replace('..', '', $file); - $record_dir = calculPath(config::byKey('recordDir', 'camera')); - shell_exec('rm -rf ' . $record_dir . '/' . $file); - ajax::success(); + ajax::success(); + } + + if (init('action') == 'getCamera') { + if (init('object_id') == '') { + $object = jeeObject::byId($_SESSION['user']->getOptions('defaultDashboardObject')); + } else { + $object = jeeObject::byId(init('object_id')); } - - if (init('action') == 'removeAllSnapshot') { - $camera = camera::byId(init('id')); - if (!is_object($camera)) { - throw new Exception(__('Impossible de trouver la caméra : ' . init('id'), __FILE__)); - } - $camera->removeAllSnapshot(); - ajax::success(); + if (!is_object($object)) { + $object = jeeObject::rootObject(); } - - if (init('action') == 'getCamera') { - if (init('object_id') == '') { - $object = jeeObject::byId($_SESSION['user']->getOptions('defaultDashboardObject')); - } else { - $object = jeeObject::byId(init('object_id')); - } - if (!is_object($object)) { - $object = jeeObject::rootObject(); - } - $return = array(); - $return['eqLogics'] = array(); - if (init('object_id') == '') { - foreach (jeeObject::all() as $object) { - foreach ($object->getEqLogic(true, false, 'camera') as $camera) { - $return['eqLogics'][] = $camera->toHtml(init('version')); - } - } - } else { + $return = array(); + $return['eqLogics'] = array(); + if (init('object_id') == '') { + foreach (jeeObject::all() as $object) { foreach ($object->getEqLogic(true, false, 'camera') as $camera) { $return['eqLogics'][] = $camera->toHtml(init('version')); } - foreach (jeeObject::buildTree($object) as $child) { - $cameras = $child->getEqLogic(true, false, 'camera'); - if (count($cameras) > 0) { - foreach ($cameras as $camera) { - $return['eqLogics'][] = $camera->toHtml(init('version')); - } + } + } else { + foreach ($object->getEqLogic(true, false, 'camera') as $camera) { + $return['eqLogics'][] = $camera->toHtml(init('version')); + } + foreach (jeeObject::buildTree($object) as $child) { + $cameras = $child->getEqLogic(true, false, 'camera'); + if (count($cameras) > 0) { + foreach ($cameras as $camera) { + $return['eqLogics'][] = $camera->toHtml(init('version')); } } } - ajax::success($return); } - - throw new Exception(__('Aucune methode correspondante à : ', __FILE__) . init('action')); - /* * *********Catch exeption*************** */ - } catch (Exception $e) { - ajax::error(displayException($e), $e->getCode()); + ajax::success($return); + } + + if (!isConnect('admin')) { + throw new Exception(__('401 - Accès non autorisé', __FILE__)); } + + if (init('action') == 'addDiscoverCam') { + camera::addDiscoverCam(json_decode(init('config'), true)); + ajax::success(); + } + + if (init('action') == 'removeRecord') { + $file = init('file'); + $file = str_replace('..', '', $file); + $record_dir = calculPath(config::byKey('recordDir', 'camera')); + shell_exec('rm -rf ' . $record_dir . '/' . $file); + ajax::success(); + } + + if (init('action') == 'removeAllSnapshot') { + $camera = camera::byId(init('id')); + if (!is_object($camera)) { + throw new Exception(__('Impossible de trouver la caméra : ' . init('id'), __FILE__)); + } + $camera->removeAllSnapshot(); + ajax::success(); + } + + throw new Exception(__('Aucune methode correspondante à : ', __FILE__) . init('action')); + /* * *********Catch exeption*************** */ +} catch (Exception $e) { + ajax::error(displayException($e), $e->getCode()); +} diff --git a/core/class/camera.class.php b/core/class/camera.class.php index c5654cd..85bdc6e 100644 --- a/core/class/camera.class.php +++ b/core/class/camera.class.php @@ -229,7 +229,7 @@ public static function cronHourly() { } } - public static function cronDayly() { + public static function cronDaily() { foreach (camera::byType('camera') as $camera) { try { shell_exec('(ps ax || ps w) | grep ffmpeg.*' . $camera->getConfiguration('localApiKey') . ' | awk \'{print $2}\' | xargs sudo kill -9'); @@ -338,7 +338,7 @@ public static function addDiscoverCam($_config) { /* * *********************Methode d'instance************************* */ public function configOnvif() { - try{ + try { $onvif = new Ponvif(); $onvif->setUsername($this->getConfiguration('username')); $onvif->setPassword($this->getConfiguration('password')); @@ -349,7 +349,7 @@ public function configOnvif() { $this->setConfiguration('cameraStreamProfileToken', $sources[0][0]['profiletoken']); //save profiletoken for sending onvif ptz cmd $this->setConfiguration('cameraStreamAccessUrl', $mediaUri); } catch (Exception $e) { - log::add('camera','error','[ONVIF] '.$e->getMessage()); + log::add('camera', 'error', '[ONVIF] ' . $e->getMessage()); } } @@ -583,17 +583,22 @@ public function toHtml($_version = 'dashboard', $_fluxOnly = false) { '#name#' => ($cmd->getDisplay('icon') != '') ? $cmd->getDisplay('icon') : $cmd->getName(), ); $action .= template_replace($replaceCmd, getTemplate('core', $version, 'camera_action', 'camera')) . ' '; + if ($cmd->getDisplay('forceReturnLineAfter', 0) == 1) { + $action .= '
'; + } } else { if ($cmd->getType() == 'info') { $info .= $cmd->toHtml($_version); + if ($cmd->getDisplay('forceReturnLineAfter', 0) == 1) { + $info .= '
'; + } } else { $action .= $cmd->toHtml($_version); + if ($cmd->getDisplay('forceReturnLineAfter', 0) == 1) { + $action .= '
'; + } } } - - if ($cmd->getDisplay('forceReturnLineAfter', 0) == 1) { - $action .= '
'; - } } } } @@ -608,12 +613,12 @@ public function toHtml($_version = 'dashboard', $_fluxOnly = false) { ); $on = $this->getCmd(null, 'on'); $off = $this->getCmd(null, 'off'); - if (is_object($on)) { + if (is_object($on) && $on->getIsVisible() == 1) { $replace['#cmd_on_id#'] = $on->getId(); } else { $replace['#cmd_on_id#'] = '""'; } - if (is_object($off)) { + if (is_object($off) && $off->getIsVisible() == 1) { $replace['#cmd_off_id#'] = $off->getId(); } else { $replace['#cmd_off_id#'] = '""'; @@ -957,12 +962,22 @@ public function export($_withCmd = true) { } public function getImage() { + if (method_exists($this, 'getCustomImage')) { + $customImage = $this->getCustomImage(); + if ($customImage !== null) { + return $customImage; + } + } if (file_exists(__DIR__ . '/../config/devices/' . self::getImgFilePath($this->getConfiguration('device')) . '.png')) { return 'plugins/camera/core/config/devices/' . self::getImgFilePath($this->getConfiguration('device')) . '.png'; } return 'plugins/camera/core/config/devices/' . self::getImgFilePath($this->getConfiguration('device')) . '.jpg'; } + public static function backupExclude() { + // retourne le répertoire des datas à ne pas enregistrer dans le backup Jeedom + return ['data']; + } /* * **********************Getteur Setteur*************************** */ } @@ -1005,19 +1020,20 @@ public function execute($_options = null) { break; } $eqLogic = $this->getEqLogic(); - if ($this->getLogicalId() == 'recordCmd') { + $logicalId = $this->getLogicalId(); + if ($logicalId === 'recordCmd') { $eqLogic->recordCam($_options['slider']); return true; } - if ($this->getLogicalId() == 'stopRecordCmd') { + if ($logicalId === 'stopRecordCmd') { $eqLogic->stopRecord(); return true; } - if ($this->getLogicalId() == 'takeSnapshot') { + if ($logicalId === 'takeSnapshot') { $eqLogic->takeSnapshot(); return true; } - if ($this->getLogicalId() == 'on') { + if ($logicalId === 'on') { $cmd = cmd::byId(str_replace('#', '', $eqLogic->getConfiguration('commandOn'))); if (is_object(!$cmd)) { throw new Exception(__('Impossible de trouver la commande ON', __FILE__)); @@ -1025,7 +1041,7 @@ public function execute($_options = null) { $cmd->execCmd(); return true; } - if ($this->getLogicalId() == 'off') { + if ($logicalId === 'off') { if ($eqLogic->getCmd(null, 'recordState')->execCmd() == 1) { $eqLogic->stopCam(); return true; @@ -1038,7 +1054,7 @@ public function execute($_options = null) { $cmd->execCmd(); return true; } - if ($this->getLogicalId() == 'sendSnapshot') { + if ($logicalId === 'sendSnapshot') { if (!isset($_options['title'])) { $_options['title'] = ''; } @@ -1048,70 +1064,70 @@ public function execute($_options = null) { $eqLogic->recordCam($_options['title'], $_options['message']); return true; } - if ($eqLogic->getConfiguration('device') == 'onvif') { - $profileToken = $eqLogic->getConfiguration('cameraStreamProfileToken'); - $speedX = $eqLogic->getConfiguration('speed_x', 1); - $speedY = $eqLogic->getConfiguration('speed_y', 1); - $speedZ = $eqLogic->getConfiguration('speed_z', 1); - $sleep = $eqLogic->getConfiguration('delay_stop', 0) * 1000; - - $onvif = new Ponvif(); - $onvif->setUsername($eqLogic->getConfiguration('username')); - $onvif->setPassword($eqLogic->getConfiguration('password')); - $onvif->setIPAddress($eqLogic->getConfiguration('ip') . ':' . $eqLogic->getConfiguration('onvif_port', 80)); - $onvif->initialize(); - - $action = false; - - try { - switch ($this->getLogicalId()) { - case 'ptzleft': - $onvif->ptz_ContinuousMove($profileToken, -$speedX, 0); - $action = true; - break; - case 'ptzright': - $onvif->ptz_ContinuousMove($profileToken, $speedX, 0); - $action = true; - break; - case 'ptzup': - $onvif->ptz_ContinuousMove($profileToken, 0, $speedY); - $action = true; - break; - case 'ptzdown': - $onvif->ptz_ContinuousMove($profileToken, 0, -$speedY); - $action = true; - break; - case 'ptzzoomin': - case 'ptzzoomout': - $onvif->ptz_ContinuousMoveZoom($profileToken, ($logicalId === 'ptzzoomout') ? -$speedZ : $speedZ); - $action = true; - break; - case 'ptzmovestop': - $onvif->ptz_ContinuousMove($profileToken, 0, 0); - break; - case 'ptzstop': - $onvif->ptz_Stop($profileToken, 'true', 'true'); - break; - case 'ptzreboot': - $onvif->core_SystemReboot(); - break; - case 'gotohome': - $onvif->ptz_GotoHomePosition($profileToken, 0, 0); - break; - } - - if ($action && strpos($request = $this->getConfiguration('stopCmdUrl'), '#') === 0) { - usleep($sleep); - $cmd = cmd::byId(str_replace('#', '', $request)); - if (is_object($cmd)) { - $cmd->execCmd(); - } - return true; - } - } catch (Exception $e) { - log::add('camera', 'debug', 'onvif error reason for ' . $this->getLogicalId() . ' : ' . json_encode($onvif->getLastResponse())); - } - } + if ($eqLogic->getConfiguration('device') == 'onvif') { + $profileToken = $eqLogic->getConfiguration('cameraStreamProfileToken'); + $speedX = $eqLogic->getConfiguration('speed_x', 1); + $speedY = $eqLogic->getConfiguration('speed_y', 1); + $speedZ = $eqLogic->getConfiguration('speed_z', 1); + $sleep = $eqLogic->getConfiguration('delay_stop', 0) * 1000; + + $onvif = new Ponvif(); + $onvif->setUsername($eqLogic->getConfiguration('username')); + $onvif->setPassword($eqLogic->getConfiguration('password')); + $onvif->setIPAddress($eqLogic->getConfiguration('ip') . ':' . $eqLogic->getConfiguration('onvif_port', 80)); + $onvif->initialize(); + + $action = false; + + try { + switch ($logicalId) { + case 'ptzleft': + $onvif->ptz_ContinuousMove($profileToken, -$speedX, 0); + $action = true; + break; + case 'ptzright': + $onvif->ptz_ContinuousMove($profileToken, $speedX, 0); + $action = true; + break; + case 'ptzup': + $onvif->ptz_ContinuousMove($profileToken, 0, $speedY); + $action = true; + break; + case 'ptzdown': + $onvif->ptz_ContinuousMove($profileToken, 0, -$speedY); + $action = true; + break; + case 'ptzzoomin': + case 'ptzzoomout': + $onvif->ptz_ContinuousMoveZoom($profileToken, ($logicalId === 'ptzzoomout') ? -$speedZ : $speedZ); + $action = true; + break; + case 'ptzmovestop': + $onvif->ptz_ContinuousMove($profileToken, 0, 0); + break; + case 'ptzstop': + $onvif->ptz_Stop($profileToken, 'true', 'true'); + break; + case 'ptzreboot': + $onvif->core_SystemReboot(); + break; + case 'gotohome': + $onvif->ptz_GotoHomePosition($profileToken, 0, 0); + break; + } + + if ($action && strpos($request = $this->getConfiguration('stopCmdUrl'), '#') === 0) { + usleep($sleep); + $cmd = cmd::byId(str_replace('#', '', $request)); + if (is_object($cmd)) { + $cmd->execCmd(); + } + return true; + } + } catch (Exception $e) { + log::add('camera', 'debug', 'onvif error reason for ' . $logicalId . ' : ' . json_encode($onvif->getLastResponse())); + } + } if (strpos($request, '#') === 0) { $cmd = cmd::byId(str_replace('#', '', $request)); if (is_object($cmd)) { diff --git a/core/config/devices/freebox/rocketcam.json b/core/config/devices/freebox/rocketcam.json index 87f3a1d..520b648 100644 --- a/core/config/devices/freebox/rocketcam.json +++ b/core/config/devices/freebox/rocketcam.json @@ -2,8 +2,9 @@ "name" : "RocketCam", "manufacturer" : "Freebox", "configuration": { + "username" : "freeboxcam", "urlStream": "\/img\/snapshot.cgi?size=4&quality=1", - "cameraStreamAccessUrl" : "rtsp:\/\/#username#:#password#@#ip#\/img\/live", + "cameraStreamAccessUrl" : "http:\/\/#username#:#password#@#ip#\/img\/stream.m3u8", "protocole": "http" }, "commands": [] diff --git a/core/config/devices/reolink/reolink.trackMix.json b/core/config/devices/reolink/reolink.trackMix.json new file mode 100644 index 0000000..4a9b585 --- /dev/null +++ b/core/config/devices/reolink/reolink.trackMix.json @@ -0,0 +1,108 @@ +{ + "name" : "Reolink TrackMix", + "manufacturer" : "Reolink", + "buylink" : "https://reolink.com/fr/product/reolink-trackmix-poe/", + "configuration": { + "port": "", + "urlStream": "\/cgi-bin\/api.cgi?cmd=Snap&channel=0&user=#username#&password=#password#", + "cameraStreamAccessUrl" : "rtsp:\/\/#username#:#password#@#ip#\/h264Preview_01_sub", + "protocole": "https" + }, + "commands": [ + { + "eqType": "camera", + "name": "Motion alarme", + "type": "info", + "subType": "binary", + "isHistorized": "1", + "isVisible": "1", + "logicalId" : "motionDetectAlarm", + "display" : { + "invertBinary" : "1" + }, + "template" : { + "dashboard" : "timePresence", + "mobile" : "timePresence" + }, + "configuration": { + "repeatEventManagement": "never" + } + }, + { + "eqType": "camera", + "name": "Motion Pet alarme", + "type": "info", + "subType": "binary", + "isHistorized": "0", + "isVisible": "1", + "logicalId" : "motionDogcatAlarm", + "display" : { + "invertBinary" : "1" + }, + "template" : { + "dashboard" : "timePresence", + "mobile" : "timePresence" + }, + "configuration": { + "repeatEventManagement": "never" + } + }, + { + "eqType": "camera", + "name": "Motion People alarme", + "type": "info", + "subType": "binary", + "isHistorized": "0", + "isVisible": "1", + "logicalId" : "motionPeopleAlarm", + "display" : { + "invertBinary" : "1" + }, + "template" : { + "dashboard" : "timePresence", + "mobile" : "timePresence" + }, + "configuration": { + "repeatEventManagement": "never" + } + }, + { + "eqType": "camera", + "name": "Motion Vehicle alarme", + "type": "info", + "subType": "binary", + "isHistorized": "0", + "isVisible": "1", + "logicalId" : "motionVehicleAlarm", + "display" : { + "invertBinary" : "1" + }, + "template" : { + "dashboard" : "timePresence", + "mobile" : "timePresence" + }, + "configuration": { + "repeatEventManagement": "never" + } + }, + { + "eqType": "camera", + "name": "Motion Face alarme", + "type": "info", + "subType": "binary", + "isHistorized": "0", + "isVisible": "1", + "logicalId" : "motionFaceAlarm", + "display" : { + "invertBinary" : "1" + }, + "template" : { + "dashboard" : "timePresence", + "mobile" : "timePresence" + }, + "configuration": { + "repeatEventManagement": "never" + } + } + ] +} \ No newline at end of file diff --git a/core/config/devices/reolink/reolink.trackMix.php b/core/config/devices/reolink/reolink.trackMix.php new file mode 100644 index 0000000..7ff46d6 --- /dev/null +++ b/core/config/devices/reolink/reolink.trackMix.php @@ -0,0 +1,46 @@ +getConfiguration('ip') . ':' . $_eqLogic->getConfiguration('port',80); + $url .= '/cgi-bin/api.cgi?cmd=GetMdState&user=' . $_eqLogic->getConfiguration('username') . '&password=' . $_eqLogic->getConfiguration('password'); + $request_http = new com_http($url); + try { + $result = $request_http->exec(); + $data = json_decode($result, true); + $cmd = $_eqLogic->getCmd('info', 'motionDetectAlarm'); + if (is_object($cmd)){ + if (isset($data[0])) { + if(array_key_exists("value", $data[0])) { + if(array_key_exists("state", $data[0]['value'])) { + $_eqLogic->checkAndUpdateCmd($cmd, $data[0]['value']['state']); + } + } + } + } + } catch (Exception $e) { + log::add('camera', 'debug', 'Erreur com_http ! (GetMdState)'); + } + + $url = $_eqLogic->getConfiguration('ip') . ':' . $_eqLogic->getConfiguration('port',80); + $url .= '/cgi-bin/api.cgi?cmd=GetAiState&user=' . $_eqLogic->getConfiguration('username') . '&password=' . $_eqLogic->getConfiguration('password'); + $request_http = new com_http($url); + try { + $result = $request_http->exec(); + $data = json_decode($result, true); + if (isset($data[0])) { + if(array_key_exists("value", $data[0])) { + foreach ($data[0]['value'] as $key => $value) { + if(is_array($value) && array_key_exists("support", $value) && $value['support'] == 1) { // return support or not + $cmd = $_eqLogic->getCmd('info', 'motion' . ucfirst(str_replace('_', '', $key)) . 'Alarm'); + if (is_object($cmd) && array_key_exists("alarm_state", $value)) { + $_eqLogic->checkAndUpdateCmd($cmd, $value['alarm_state']); + } + } + } + } + } + } catch (Exception $e) { + log::add('camera', 'debug', 'Erreur com_http ! (GetAiState)'); + } + +} +?> \ No newline at end of file diff --git a/core/config/devices/reolink/reolink.trackMix.png b/core/config/devices/reolink/reolink.trackMix.png new file mode 100644 index 0000000..328a6ed Binary files /dev/null and b/core/config/devices/reolink/reolink.trackMix.png differ diff --git a/core/config/devices/ubiquiti/ubiquiti.UVC G5 Turret Ultra.json b/core/config/devices/ubiquiti/ubiquiti.UVC G5 Turret Ultra.json new file mode 100644 index 0000000..e6dd62c --- /dev/null +++ b/core/config/devices/ubiquiti/ubiquiti.UVC G5 Turret Ultra.json @@ -0,0 +1,9 @@ +{ + "name": "Ubiquiti G5 Turret Ultra", + "manufacturer": "Ubiquiti", + "configuration": { + "urlStream": "\/snap.jpeg", + "protocole": "http" + }, + "commands": [] +} \ No newline at end of file diff --git a/core/config/devices/ubiquiti/ubiquiti.UVC G5 Turret Ultra.png b/core/config/devices/ubiquiti/ubiquiti.UVC G5 Turret Ultra.png new file mode 100644 index 0000000..c8e9935 Binary files /dev/null and b/core/config/devices/ubiquiti/ubiquiti.UVC G5 Turret Ultra.png differ diff --git a/core/i18n/de_DE.json b/core/i18n/de_DE.json index bd981b4..df2185b 100644 --- a/core/i18n/de_DE.json +++ b/core/i18n/de_DE.json @@ -119,8 +119,9 @@ "URL du flux": "Feed-URL", "URL du flux, RTSP": "Stream-URL, RTSP", "Stream du flux RTSP": "Stream des RTSP-Streams", - "Option flux video": "Video-Stream-Option", - "Previsualiser": "Vorschau", + "Convertir en x264 le flux RTSP": "Konvertieren Sie den RTSP-Stream in x264", + "Option flux vidéo": "Video-Stream-Option", + "Prévisualiser": "Vorschau", "N'oubliez pas de sauvegarder pour voir vos modifications avant la prévisualisation": "Vergessen Sie nicht, vor der Vorschau zu speichern, um Ihre Änderungen anzuzeigen", "Position sur le panel": "Position auf dem Panel", "Informations": "Information", @@ -138,7 +139,7 @@ "Normal": "Normal", "Vidéo": "Video", "Durée maximum d'un enregistrement (s)": "Maximale Dauer einer Aufnahme (n)", - "Toujours faire une video": "Mach immer ein Video", + "Toujours faire une vidéo": "Mach immer ein Video", "Nombre d'images par seconde de la vidéo": "Anzahl der Bilder pro Sekunde des Videos", "Supprimer toutes les captures de la caméra": "Löschen Sie alle Kameraaufnahmen", "Commande ON": "EIN-Befehl", diff --git a/core/i18n/en_US.json b/core/i18n/en_US.json index 75a7d4c..96cc2f1 100644 --- a/core/i18n/en_US.json +++ b/core/i18n/en_US.json @@ -119,8 +119,9 @@ "URL du flux": "Feed URL", "URL du flux, RTSP": "URL of RTSP stream", "Stream du flux RTSP": "Stream of RTSP stream", - "Option flux video": "Video stream option", - "Previsualiser": "Preview", + "Convertir en x264 le flux RTSP": "Convert RTSP stream to x264", + "Option flux vidéo": "Video stream option", + "Prévisualiser": "Preview", "N'oubliez pas de sauvegarder pour voir vos modifications avant la prévisualisation": "Don't forget to save to see your changes before previewing", "Position sur le panel": "Positon on the panel", "Informations": "Information", @@ -138,7 +139,7 @@ "Normal": "Normal", "Vidéo": "Video", "Durée maximum d'un enregistrement (s)": "Maximum duration of a recording (s)", - "Toujours faire une video": "Always make a video", + "Toujours faire une vidéo": "Always make a video", "Nombre d'images par seconde de la vidéo": "Number of frames per second of the video", "Supprimer toutes les captures de la caméra": "Delete all camera captures", "Commande ON": "ON command", diff --git a/core/i18n/es_ES.json b/core/i18n/es_ES.json index f2ec0ff..a5c75e2 100644 --- a/core/i18n/es_ES.json +++ b/core/i18n/es_ES.json @@ -119,8 +119,9 @@ "URL du flux": "URL del feed", "URL du flux, RTSP": "URL de transmisión, RTSP", "Stream du flux RTSP": "Flujo de flujo RTSP", - "Option flux video": "Opción de transmisión de video", - "Previsualiser": "Avance", + "Convertir en x264 le flux RTSP": "Convertir transmisión RTSP a x264", + "Option flux vidéo": "Opción de transmisión de video", + "Prévisualiser": "Avance", "N'oubliez pas de sauvegarder pour voir vos modifications avant la prévisualisation": "No olvide guardar para ver los cambios antes de obtener una vista previa", "Position sur le panel": "Posición en el panel", "Informations": "Información", @@ -138,7 +139,7 @@ "Normal": "Normal", "Vidéo": "Vídeo", "Durée maximum d'un enregistrement (s)": "Duración máxima de una grabación (s)", - "Toujours faire une video": "Siempre haz un video", + "Toujours faire une vidéo": "Siempre haz un video", "Nombre d'images par seconde de la vidéo": "Número de fotogramas por segundo del video", "Supprimer toutes les captures de la caméra": "Eliminar todas las capturas de cámara", "Commande ON": "Comando ON", diff --git a/core/i18n/fr_FR.json b/core/i18n/fr_FR.json index 7969041..58d7929 100644 --- a/core/i18n/fr_FR.json +++ b/core/i18n/fr_FR.json @@ -119,8 +119,9 @@ "URL du flux": "URL du flux", "URL du flux, RTSP": "URL du flux, RTSP", "Stream du flux RTSP": "Stream du flux RTSP", - "Option flux video": "Option flux video", - "Previsualiser": "Previsualiser", + "Convertir en x264 le flux RTSP": "Convertir en x264 le flux RTSP", + "Option flux vidéo": "Option flux vidéo", + "Prévisualiser": "Prévisualiser", "N'oubliez pas de sauvegarder pour voir vos modifications avant la prévisualisation": "N'oubliez pas de sauvegarder pour voir vos modifications avant la prévisualisation", "Position sur le panel": "Position sur le panel", "Informations": "Informations", @@ -138,7 +139,7 @@ "Normal": "Normal", "Vidéo": "Vidéo", "Durée maximum d'un enregistrement (s)": "Durée maximum d'un enregistrement (s)", - "Toujours faire une video": "Toujours faire une video", + "Toujours faire une vidéo": "Toujours faire une vidéo", "Nombre d'images par seconde de la vidéo": "Nombre d'images par seconde de la vidéo", "Supprimer toutes les captures de la caméra": "Supprimer toutes les captures de la caméra", "Commande ON": "Commande ON", diff --git a/core/i18n/id_ID.json b/core/i18n/id_ID.json index 6843544..39fb2da 100644 --- a/core/i18n/id_ID.json +++ b/core/i18n/id_ID.json @@ -119,8 +119,9 @@ "URL du flux": "URL du flux", "URL du flux, RTSP": "URL du flux, RTSP", "Stream du flux RTSP": "Stream du flux RTSP", - "Option flux video": "Option flux video", - "Previsualiser": "Previsualiser", + "Convertir en x264 le flux RTSP": "Convertir en x264 le flux RTSP", + "Option flux vidéo": "Option flux video", + "Prévisualiser": "Previsualiser", "N'oubliez pas de sauvegarder pour voir vos modifications avant la prévisualisation": "N'oubliez pas de sauvegarder pour voir vos modifications avant la prévisualisation", "Position sur le panel": "Position sur le panel", "Informations": "Informasi", @@ -138,7 +139,7 @@ "Normal": "Normal", "Vidéo": "Vidéo", "Durée maximum d'un enregistrement (s)": "Durée maximum d'un enregistrement (s)", - "Toujours faire une video": "Toujours faire une video", + "Toujours faire une vidéo": "Toujours faire une video", "Nombre d'images par seconde de la vidéo": "Nombre d'images par seconde de la vidéo", "Supprimer toutes les captures de la caméra": "Supprimer toutes les captures de la caméra", "Commande ON": "Commande ON", diff --git a/core/i18n/it_IT.json b/core/i18n/it_IT.json index 41abb4c..6634f04 100644 --- a/core/i18n/it_IT.json +++ b/core/i18n/it_IT.json @@ -119,8 +119,9 @@ "URL du flux": "URL du flux", "URL du flux, RTSP": "URL du flux, RTSP", "Stream du flux RTSP": "Stream du flux RTSP", - "Option flux video": "Option flux video", - "Previsualiser": "Previsualiser", + "Convertir en x264 le flux RTSP": "Convertir en x264 le flux RTSP", + "Option flux vidéo": "Option flux video", + "Prévisualiser": "Previsualiser", "N'oubliez pas de sauvegarder pour voir vos modifications avant la prévisualisation": "N'oubliez pas de sauvegarder pour voir vos modifications avant la prévisualisation", "Position sur le panel": "Position sur le panel", "Informations": "Informazioni", @@ -138,7 +139,7 @@ "Normal": "Normale", "Vidéo": "Vidéo", "Durée maximum d'un enregistrement (s)": "Durée maximum d'un enregistrement (s)", - "Toujours faire une video": "Toujours faire une video", + "Toujours faire une vidéo": "Toujours faire une video", "Nombre d'images par seconde de la vidéo": "Nombre d'images par seconde de la vidéo", "Supprimer toutes les captures de la caméra": "Supprimer toutes les captures de la caméra", "Commande ON": "Commande ON", diff --git a/core/i18n/ja_JP.json b/core/i18n/ja_JP.json index cd3b15c..58ffff6 100644 --- a/core/i18n/ja_JP.json +++ b/core/i18n/ja_JP.json @@ -119,8 +119,9 @@ "URL du flux": "URL du flux", "URL du flux, RTSP": "URL du flux, RTSP", "Stream du flux RTSP": "Stream du flux RTSP", - "Option flux video": "Option flux video", - "Previsualiser": "Previsualiser", + "Convertir en x264 le flux RTSP": "Convertir en x264 le flux RTSP", + "Option flux vidéo": "Option flux video", + "Prévisualiser": "Previsualiser", "N'oubliez pas de sauvegarder pour voir vos modifications avant la prévisualisation": "N'oubliez pas de sauvegarder pour voir vos modifications avant la prévisualisation", "Position sur le panel": "Position sur le panel", "Informations": "情報", @@ -138,7 +139,7 @@ "Normal": "ノーマル", "Vidéo": "ビデオ", "Durée maximum d'un enregistrement (s)": "Durée maximum d'un enregistrement (s)", - "Toujours faire une video": "Toujours faire une video", + "Toujours faire une vidéo": "Toujours faire une video", "Nombre d'images par seconde de la vidéo": "Nombre d'images par seconde de la vidéo", "Supprimer toutes les captures de la caméra": "Supprimer toutes les captures de la caméra", "Commande ON": "Commande ON", diff --git a/core/i18n/pt_PT.json b/core/i18n/pt_PT.json index 1abbf7f..314b32d 100644 --- a/core/i18n/pt_PT.json +++ b/core/i18n/pt_PT.json @@ -119,8 +119,9 @@ "URL du flux": "URL do feed", "URL du flux, RTSP": "URL de fluxo, RTSP", "Stream du flux RTSP": "Fluxo de fluxo RTSP", - "Option flux video": "Opção de transmissão de vídeo", - "Previsualiser": "Antevisão", + "Convertir en x264 le flux RTSP": "Converter fluxo RTSP para x264", + "Option flux vidéo": "Opção de transmissão de vídeo", + "Prévisualiser": "Antevisão", "N'oubliez pas de sauvegarder pour voir vos modifications avant la prévisualisation": "Não se esqueça de salvar para ver suas alterações antes de visualizar", "Position sur le panel": "Posição no painel", "Informations": "Informação", @@ -138,7 +139,7 @@ "Normal": "Normal", "Vidéo": "Vídeo", "Durée maximum d'un enregistrement (s)": "Duração máxima de uma gravação", - "Toujours faire une video": "Sempre faça um vídeo", + "Toujours faire une vidéo": "Sempre faça um vídeo", "Nombre d'images par seconde de la vidéo": "Número de quadros por segundo do vídeo", "Supprimer toutes les captures de la caméra": "Excluir todas as capturas de câmera", "Commande ON": "Comando ON", diff --git a/core/i18n/ru_RU.json b/core/i18n/ru_RU.json index a2f851d..c9b9858 100644 --- a/core/i18n/ru_RU.json +++ b/core/i18n/ru_RU.json @@ -119,8 +119,9 @@ "URL du flux": "URL du flux", "URL du flux, RTSP": "URL du flux, RTSP", "Stream du flux RTSP": "Stream du flux RTSP", - "Option flux video": "Option flux video", - "Previsualiser": "Previsualiser", + "Convertir en x264 le flux RTSP": "Convertir en x264 le flux RTSP", + "Option flux vidéo": "Option flux video", + "Prévisualiser": "Previsualiser", "N'oubliez pas de sauvegarder pour voir vos modifications avant la prévisualisation": "N'oubliez pas de sauvegarder pour voir vos modifications avant la prévisualisation", "Position sur le panel": "Position sur le panel", "Informations": "Информация", @@ -138,7 +139,7 @@ "Normal": "нормальный", "Vidéo": "Vidéo", "Durée maximum d'un enregistrement (s)": "Durée maximum d'un enregistrement (s)", - "Toujours faire une video": "Toujours faire une video", + "Toujours faire une vidéo": "Toujours faire une video", "Nombre d'images par seconde de la vidéo": "Nombre d'images par seconde de la vidéo", "Supprimer toutes les captures de la caméra": "Supprimer toutes les captures de la caméra", "Commande ON": "Commande ON", diff --git a/core/i18n/tr.json b/core/i18n/tr.json index 9ea6eef..7a692fb 100644 --- a/core/i18n/tr.json +++ b/core/i18n/tr.json @@ -119,8 +119,9 @@ "URL du flux": "URL du flux", "URL du flux, RTSP": "URL du flux, RTSP", "Stream du flux RTSP": "Stream du flux RTSP", - "Option flux video": "Option flux video", - "Previsualiser": "Previsualiser", + "Convertir en x264 le flux RTSP": "Convertir en x264 le flux RTSP", + "Option flux vidéo": "Option flux video", + "Prévisualiser": "Previsualiser", "N'oubliez pas de sauvegarder pour voir vos modifications avant la prévisualisation": "N'oubliez pas de sauvegarder pour voir vos modifications avant la prévisualisation", "Position sur le panel": "Position sur le panel", "Informations": "Bilgiler", @@ -138,7 +139,7 @@ "Normal": "Normal", "Vidéo": "Vidéo", "Durée maximum d'un enregistrement (s)": "Durée maximum d'un enregistrement (s)", - "Toujours faire une video": "Toujours faire une video", + "Toujours faire une vidéo": "Toujours faire une video", "Nombre d'images par seconde de la vidéo": "Nombre d'images par seconde de la vidéo", "Supprimer toutes les captures de la caméra": "Supprimer toutes les captures de la caméra", "Commande ON": "Commande ON", diff --git a/core/template/dashboard/camera.html b/core/template/dashboard/camera.html index 785f273..6210cfd 100644 --- a/core/template/dashboard/camera.html +++ b/core/template/dashboard/camera.html @@ -54,10 +54,12 @@ maxWidth:eqLogic_#id#.width() + 'px' }); setTimeout(function(){ - Object.assign(document.querySelector('.eqLogic[data-eqLogic_id="#id#"] .directDisplay img').style, { - maxHeight:(eqLogic_#id#.height() - 60) + 'px', - maxWidth:eqLogic_#id#.width() + 'px' - }); + if (document.querySelector('.eqLogic[data-eqLogic_id="#id#"] .directDisplay img')) { + Object.assign(document.querySelector('.eqLogic[data-eqLogic_id="#id#"] .directDisplay img').style, { + maxHeight:(eqLogic_#id#.height() - 60) + 'px', + maxWidth:eqLogic_#id#.width() + 'px' + }); + } }, 1000); eqLogic_#id#.off('resize').on('resize',function(){ diff --git a/core/template/dashboard/camera_stream.html b/core/template/dashboard/camera_stream.html index a4054a9..c4df77f 100644 --- a/core/template/dashboard/camera_stream.html +++ b/core/template/dashboard/camera_stream.html @@ -68,6 +68,10 @@ video#id#.play(); }); }); + hls#id#.on(Hls.Events.ERROR, function (event, data) { + + console.log('error', event, data) + }); }else if (video#id#.canPlayType('application/vnd.apple.mpegurl')) { video#id#.src = '#url#'; video#id#.addEventListener('loadedmetadata',function() { @@ -80,4 +84,4 @@ } }); - + \ No newline at end of file diff --git a/core/template/dashboard/camera_stream_only.html b/core/template/dashboard/camera_stream_only.html index 31a572d..70a26c0 100644 --- a/core/template/dashboard/camera_stream_only.html +++ b/core/template/dashboard/camera_stream_only.html @@ -47,4 +47,4 @@ } }); - + \ No newline at end of file diff --git a/desktop/modal/camera.displayImage.php b/desktop/modal/camera.displayImage.php index 1b5b3ac..c4a63e2 100644 --- a/desktop/modal/camera.displayImage.php +++ b/desktop/modal/camera.displayImage.php @@ -8,4 +8,4 @@ if (strpos(init('src'), 'camera') === false) { throw new Exception('{{401 - Accès non autorisé}}'); } -echo '
'; +echo '
'; diff --git a/desktop/modal/camera.displayVideo.php b/desktop/modal/camera.displayVideo.php index 9379d45..e43ba9a 100644 --- a/desktop/modal/camera.displayVideo.php +++ b/desktop/modal/camera.displayVideo.php @@ -2,13 +2,13 @@ if (!isConnect()) { throw new Exception('{{401 - Accès non autorisé}}'); } -if (!substr_compare(init('src'), '.mp4', -strlen('.mp4')) !== 0) { +if (substr_compare(init('src'), '.mp4', -strlen('.mp4')) !== 0) { throw new Exception('{{401 - Accès non autorisé}}'); } if (strpos(init('src'), 'camera') === false) { throw new Exception('{{401 - Accès non autorisé}}'); } echo ''; diff --git a/desktop/modal/camera.history.php b/desktop/modal/camera.history.php index 3719990..33e1ae7 100644 --- a/desktop/modal/camera.history.php +++ b/desktop/modal/camera.history.php @@ -50,20 +50,25 @@ echo '
'; krsort($file); foreach ($file as $time => $filename) { - $fontType = 'fas-camera'; + $fontType = 'fa-camera'; if (strpos($filename, '.mp4')) { - $fontType = 'fas-video-camera'; + $fontType = 'fa-video'; $i++; } - echo '
'; - echo '
' . str_replace('-', ':', $time) . '
'; + echo '
'; + echo '
' . str_replace('-', ':', $time) . '
'; if (strpos($filename, '.mp4')) { - echo ''; + echo ''; } else { - echo '
'; + echo '
'; } - echo '
'; - echo '
'; + echo '
'; + echo ''; + echo ' '; + if (strpos($filename, '.mp4')) { + echo ' '; + } + echo '
'; echo '
'; } echo '
'; @@ -78,7 +83,7 @@ $('#md_modal2').dialog({ title: "Image" }); - $('#md_modal2').load('index.php?v=d&plugin=camera&modal=camera.displayImage&src=' + $(this).attr('src')).dialog('open'); + $('#md_modal2').load('index.php?v=d&plugin=camera&modal=camera.displayImage&src=' + $(this).attr('data-src')).dialog('open'); }); $('.displayVideo').on('click', function() { $('#md_modal2').dialog({ diff --git a/desktop/modal/health.php b/desktop/modal/health.php index 93e1b6d..114c7a5 100644 --- a/desktop/modal/health.php +++ b/desktop/modal/health.php @@ -44,8 +44,8 @@ getIsEnable()) ? '' : 'disableCard'; - if (file_exists(dirname(__FILE__) . '/../../core/config/devices/' . $eqLogic->getConfiguration('device') . '.jpg')) { - $img = ''; + if ($eqLogic->getConfiguration('device') != "" && camera::getImgFilePath($eqLogic->getConfiguration('device')) !== false) { + $img = ''; } else { $img = ''; } @@ -75,12 +75,12 @@ } else { echo '' . $framerate . '/s'; } - - echo '' . $eqLogic->getConfiguration('refreshDelaySlow',1) . '/s'; - echo '' . $eqLogic->getConfiguration('refreshDelayFast',1) . '/s'; + + echo '' . $eqLogic->getConfiguration('refreshDelaySlow', 1) . '/s'; + echo '' . $eqLogic->getConfiguration('refreshDelayFast', 1) . '/s'; echo '' . $eqLogic->getConfiguration('maxReccordTime') . 's'; echo '' . $eqLogic->getConfiguration('createtime') . ''; } ?> - + \ No newline at end of file diff --git a/desktop/php/camera.php b/desktop/php/camera.php index 14d74ba..676618c 100644 --- a/desktop/php/camera.php +++ b/desktop/php/camera.php @@ -48,18 +48,17 @@ echo '
'; foreach ($eqLogics as $eqLogic) { $opacity = ($eqLogic->getIsEnable()) ? '' : 'disableCard'; - echo '
'; + echo '
'; if ($eqLogic->getConfiguration('device') != "" && camera::getImgFilePath($eqLogic->getConfiguration('device')) !== false) { - echo ''; - } - else { + echo ''; + } else { echo ''; } echo '
'; echo '' . $eqLogic->getHumanName(true, true) . ''; echo ''; @@ -214,13 +213,19 @@
- + +
+ +
+
+
+
- +
@@ -237,208 +242,208 @@ -
+
-
- - {{Informations}} -
{{Si votre caméra n'est pas dans la liste vous pouvez trouver}} {{ici}} {{les informations de configuration pour pas mal de camera}}
-
- -
- + {{Informations}} +
{{Si votre caméra n'est pas dans la liste vous pouvez trouver}} {{ici}} {{les informations de configuration pour pas mal de camera}}
+
+ +
+ +
+
+
+
+ +
+ +
+
-
-
-
- -
- + + + +
+ +
+
+
+
+ {{Configuration}} +
+ +
+ +
-
-
- - - -
+
+ {{Miniature}} + + + + + + + + + + + + + + + + + + + + + + + + + +
{{Dashboard}}{{Mobile}}
+ {{Normal}} + + + + + + + + + + + + + + + + + + + + + + + + + +
{{Dashboard}}{{Mobile}}
+ + +
-
-
-
-
- {{Configuration}} -
- -
- -
-
+

- {{Miniature}} - - - - - - - - - - - - - - - - - - - - - - - - - -
{{Dashboard}}{{Mobile}}
- {{Normal}} - + +
+ {{Vidéo}} +
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ + +
+
+ + + +
+
+
+
+
+ +
+
+ + + + +
+
+
+
+ +
+
+ + + + +
+
+
+
+ +
+ + +
- - - + + + + + + - - - - - - - - - - - - - - -
{{Dashboard}}{{Mobile}}{{Id}}{{Nom}}{{Type}}{{Requête}}{{Options}}{{Action}}
-
- -
- -
-
-
-
- {{Vidéo}} -
- -
- -
-
-
- -
- -
-
-
- -
- -
-
-
- - -
-
-
-
- -
-
-
-
-
- -
-
- - - - -
-
-
-
- -
-
- - - - -
-
-
-
-
- - -
- {{Ajouter une commande}} -

- - - - - - - - - - - - - -
{{Id}}{{Nom}}{{Type}}{{Requête}}{{Options}}{{Action}}
-
- - + + - + \ No newline at end of file diff --git a/docs/de_DE/changelog.md b/docs/de_DE/changelog.md index 9472baa..aaaab1f 100644 --- a/docs/de_DE/changelog.md +++ b/docs/de_DE/changelog.md @@ -4,6 +4,13 @@ > >Wenn es keine Informationen über die Aktualisierung gibt, bedeutet dies, dass es sich nur um die Aktualisierung von Dokumentation, Übersetzung oder Text handelt. +- Ein Fehler beim Zugriff auf Videoaufzeichnungen wurde behoben +- Verbesserte Handhabung von Zeilenumbrüchen im Widget [VERKNÜPFUNG](https://github.com/jeedom/plugin-camera/pull/85) + +# 24.01.2024 + +- Widget-Verbesserung + # 17.01.2024 - Fehlerbehebung beim Widget diff --git a/docs/de_DE/index.md b/docs/de_DE/index.md index 9a39bb3..6bbf7e8 100644 --- a/docs/de_DE/index.md +++ b/docs/de_DE/index.md @@ -9,7 +9,7 @@ Plugin zum Erstellen und Verwalten von WLAN-Kameras (Anzeige und Aufzeichnung). Nach der Installation des Plugins müssen Sie es nur noch aktivieren. Einige Parameter müssen in der Plugin-Konfiguration eingegeben werden : - **Pfad aufzeichnen** : Gibt den Pfad an, in dem Jeedom die von Ihren Kameras aufgenommenen Bilder speichern soll (es wird nicht empfohlen, sie zu berühren). Wenn sich Ihr Pfad nicht im Jeedom-Installationspfad befindet, können Sie die Erfassungen in Jeedom nicht anzeigen. -- **Maximale Größe des Aufnahmeordners (MB)** : Gibt die maximale Größe an, die für den Ordner autorisiert ist, in dem die Fänge gespeichert sind (es wird nicht empfohlen, ihn zu berühren). Wenn diese Quote erreicht ist, löscht Jeedom die ältesten Fänge. +- **Maximale Größe des Aufnahmeordners (MB)** : Gibt die maximale Größe an, die für den Ordner autorisiert ist, in dem die Fänge gespeichert sind (es wird nicht empfohlen, ihn zu berühren). Wenn dieses Kontingent erreicht ist, löscht Jeedom die ältesten Aufnahmen. - **Das Kamera-Plugin muss auf Interaktionen reagieren** : Schlüsselwörter / Phrasen, auf die das Plugin über Jeedom-Interaktionen reagiert. - **Platte** : Mit dieser Option können Sie das Bedienfeld anzeigen (Startmenü → Kamera) und alle Ihre Kameras anzeigen (siehe unten)). Vergessen Sie nicht, das Panel in der Konfiguration des Plugins zu aktivieren, um später darauf zugreifen zu können. @@ -31,13 +31,14 @@ Hier haben Sie die wichtigsten Informationen Ihrer Kamera : - **Hafen** : der Anschluss, an den die Kamera angeschlossen werden soll. - **Protokolle** : das Kommunikationsprotokoll Ihrer Kamera (http oder https). - **Benutzername** : Benutzername, um sich bei der Kamera anzumelden (falls erforderlich)). Bitte beachten Sie, dass das Plugin keine Sonderzeichen unterstützt (Sie müssen sich daher auf Zahlen, Klein- / Großbuchstaben beschränken). -- **Passwort** : Passwort für die Verbindung zur Kamera (falls erforderlich)).Bitte beachten Sie, dass das Plugin für einige Kameras einen url_encode für den Benutzernamen und das Passwort erfordert, dies jedoch bei anderen zu Problemen führen kann. Wenn Sie ein Problem haben, versuchen Sie es ohne Sonderzeichen (beschränken Sie sich auf Zahlen, Klein-/Großbuchstaben). +- **Passwort** : Passwort für die Verbindung zur Kamera (falls erforderlich)). Bitte beachten Sie, dass das Plugin für einige Kameras einen URL-Code für den Benutzernamen und das Passwort zwingend vorschreibt, dies kann jedoch bei anderen zu Problemen führen. Wenn Sie ein Problem haben, versuchen Sie es ohne Sonderzeichen (beschränken Sie sich auf Zahlen, Kleinbuchstaben/Großbuchstaben)). - **Snapshot-URL** : Kamera-Snapshot-URL. Ändern Sie je nach Kamera. Achten Sie darauf, dass Sie keine Flow-URL unter die Strafe des Absturzes von Jeedom stellen. Sie können die Tags \ hinzufügen#username\# und \#password\#, Diese werden bei Verwendung dieses Befehls automatisch durch den Benutzernamen und das Kennwort ersetzt. - **Feed-URL** : Typ Kamera Video Stream URL ``rtsp://#username#:#password#@#ip#:554/videoMain`` (Beispiel für Foscam-Kameras). -- **RTSP-Stream-Stream** : Wenn Sie sich im Videostream-Modus befinden (Stream-URL ausgefüllt), können Sie die Kamera als Videostream anstelle von Frame für Frame sehen. Bitte beachten Sie, dass diese Option viele Ressourcen verbraucht und das erste Bild sehr schnell ankommt. +- **RTSP-Stream-Stream** : Wenn Sie sich im Videostream-Modus befinden (Stream-URLs ausgefüllt), können Sie die Kamera als Videostream statt Bild für Bild anzeigen. Seien Sie vorsichtig, diese Option verbraucht viele Ressourcen und sorgt dafür, dass das erste Bild nur sehr langsam ankommt. +- **Konvertieren Sie den RTSP-Stream in x264** : Wenn Ihre Kamera im H265-Videocodec konfiguriert ist, erfolgt die Konvertierung im Handumdrehen in H264. Seien Sie vorsichtig, diese Option verbraucht viele Ressourcen und erhöht die Verzögerung. - **Vorschau** : ermöglicht Ihnen zu sehen, ob jeedom den Videostream wiederherstellt (denken Sie daran, vor dem Testen zu speichern, um zu sehen, ob Ihre Änderungen funktionieren) -- **Videostream-Option** : Wenn Sie sich im Video-Stream-Modus befinden (Stream-URL ausgefüllt), können Sie hier zusätzliche Parameter an ffmpeg und avconv übergeben (für Experten reserviert)) -- **Modell** : ermöglicht die Auswahl des Kameramodells. Achtung : Wenn Sie dies ändern, werden Ihre Konfigurationseinstellungen überschrieben. +- **Videostream-Option** : Wenn Sie sich im Videostream-Modus befinden (Stream-URLs gefüllt), können Sie hier zusätzliche Parameter an ffmpeg und avconv übergeben (für Experten reserviert)) +- **Modell** : ermöglicht die Auswahl des Kameramodells. Achtung : Wenn Sie es ändern, werden Ihre Konfigurationseinstellungen überschrieben. ONVIF-Einstellungen : - **ONVIF-Port** : der für onvif verwendete Port @@ -48,7 +49,7 @@ ONVIF-Einstellungen : > **Notiz** > -> Sie können finden [Hier](https://www.ispyconnect.com/cameras) Konfiguration für viele Kameras und daher in der Lage sein, Ihre Kamera selbst in Jeedom zu integrieren, wenn es nicht in der Liste ist +> Sie können finden [Hier](https://www.ispyconnect.com/cameras) Konfigurationen für eine ganze Reihe von Kameras und können so Ihre Kamera selbst in Jeedom integrieren, wenn sie nicht in der Liste enthalten ist ## Image @@ -157,4 +158,4 @@ Natürlich vor dem Erstellen eines Info-Befehls auf Ihrer Kamera >**Unter welchen Bedingungen muss meine Kamera Jeedom-kompatibel sein (sofern sie nicht in der Kompatibilitätsliste enthalten ist?) ?** > -> Die einzige Bedingung ist, dass die Kamera eine URL hat, die ein Bild zurücksendet (also ein Bild, kein Videostream). +> Die einzige Bedingung ist, dass die Kamera eine URL hat, die ein Bild zurücksendet (also ein Bild, kein Videostream). \ No newline at end of file diff --git a/docs/en_US/changelog.md b/docs/en_US/changelog.md index 6bf02aa..cf79ccb 100644 --- a/docs/en_US/changelog.md +++ b/docs/en_US/changelog.md @@ -4,6 +4,13 @@ > >If there is no information on the update, it means that it concerns only the update of documentation, translation or text. +- Fixed a bug on access to video recordings +- Improved handling of line breaks in the widget [LINK](https://github.com/jeedom/plugin-camera/pull/85) + +# 01/24/2024 + +- Widget improvement + # 01/17/2024 - Bug fix on widget diff --git a/docs/en_US/index.md b/docs/en_US/index.md index 54dc6a0..abe3798 100644 --- a/docs/en_US/index.md +++ b/docs/en_US/index.md @@ -9,7 +9,7 @@ Plugin to create and manage wifi cameras (display and recording). After installing the plugin, you just need to activate it. Some parameters must be entered in the plugin configuration : - **Record path** : indicates the path where Jeedom should store the images it captures from your cameras (it is not recommended to touch it). If your path is not in the Jeedom installation path then you will not be able to view the captures in Jeedom. -- **Maximum recording folder size (MB)** : indicates the maximum size authorized for the folder where the catches are saved (it is not recommended to touch it). If this quota is reached Jeedom will delete the oldest catches. +- **Maximum recording folder size (MB)** : indicates the maximum size authorized for the folder where the catches are saved (it is not recommended to touch it). If this quota is reached Jeedom will delete the oldest captures. - **The camera plugin must react to interactions** : keywords / phrases to which the plugin will react via Jeedom interactions. - **Panel** : allows you to display the panel (Home Menu → Camera) and to have a view of all your cameras (see below). Do not forget to activate the panel in the configuration of the plugin to access it later. @@ -31,12 +31,13 @@ Here you have the main information of your camera : - **Port** : the port for which to attach the camera. - **Protocol** : the communication protocol of your camera (http or https). - **Username** : username to log in to the camera (if required). Please note the plugin does not support special characters (you must therefore limit yourself to numbers, lowercase / uppercase letters). -- **Password** : password to connect to the camera (if necessary).Be careful, the plugin makes a url_encode for the username and password required for some cameras but this can cause problems for others, if you have a problem try without special characters (be limited to numbers, lowercase / uppercase letters). +- **Password** : password to connect to the camera (if necessary). Please note, the plugin makes a url_encode for the username and password mandatory for some cameras but this can cause problems for others, if you have a problem, try without special characters (limit yourself to numbers, lowercase letters/ capital letter). - **Snapshot URL** : Camera snapshot URL. Change depending on the cameras. Be careful not to put a flow url under penalty of crashing Jeedom. You can add the tags \#username\# and \#password\#, which will be automatically replaced by the username and password when using this command. - **Feed URL** : type camera video stream url ``rtsp://#username#:#password#@#ip#:554/videoMain`` (example for Foscam cameras). -- **RTSP stream stream** : if you are in video stream mode (stream URL filled in) then you can see the camera as a video stream instead of frame by frame. Please note this option consumes a lot of resources and makes the 1st image very to arrive. +- **RTSP stream stream** : If you are in video stream mode (stream URLs filled in), then you can view the camera as a video stream instead of frame by frame. Be careful, this option consumes a lot of resources and makes the first image very slow to arrive. +- **Convert RTSP stream to x264** : if your camera is configured in H265 video codec, converts on the fly to H264. Be careful, this option consumes a lot of resources and increases lag. - **Preview** : allows you to see if jeedom recovers the video stream (remember to save before testing to see if your modifications work) -- **Video stream option** : if you are in video stream mode (stream URL filled in) then you can pass additional parameters here to ffmpeg and avconv (reserved for experts) +- **Video stream option** : if you are in video stream mode (stream URLs filled), then you can pass additional parameters here to ffmpeg and avconv (reserved for experts) - **Model** : allows to choose the camera model. Be careful : if you change it will overwrite your configuration settings. ONVIF settings : @@ -48,7 +49,7 @@ ONVIF settings : > **NOTE** > -> You can find [here](https://www.ispyconnect.com/cameras) configuration for a lot of camera and therefore be able to integrate your camera yourself in Jeedom if it is not in the list +> You can find [here](https://www.ispyconnect.com/cameras) configurations for quite a few cameras and therefore be able to integrate your camera yourself into Jeedom if it is not in the list ## Image @@ -157,4 +158,4 @@ Obviously, before creating an info type command on your camera >**What are the conditions for my camera to be Jeedom compatible (if it is not in the compatibility list) ?** > -> The only condition is that the camera has an url which sends back an image (well an image not a video stream). +> The only condition is that the camera has an url which sends back an image (well an image not a video stream). \ No newline at end of file diff --git a/docs/es_ES/changelog.md b/docs/es_ES/changelog.md index 2fe0798..39f1db7 100644 --- a/docs/es_ES/changelog.md +++ b/docs/es_ES/changelog.md @@ -4,6 +4,13 @@ > >Si no hay información sobre la actualización, significa que se trata solo de la actualización de la documentación, la traducción o el texto. +- Se corrigió un error en el acceso a grabaciones de video +- Manejo mejorado de saltos de línea en el widget [ENLACE](https://github.com/jeedom/plugin-camera/pull/85) + +# 24/01/2024 + +- Mejora de widgets + # 17/01/2024 - Corrección de errores en el widget diff --git a/docs/es_ES/index.md b/docs/es_ES/index.md index 0244409..59dcc6a 100644 --- a/docs/es_ES/index.md +++ b/docs/es_ES/index.md @@ -31,13 +31,14 @@ Aquí tienes la información principal de tu cámara : - **Puerto** : el puerto para el que se conecta la cámara. - **Protocolo** : El protocolo de comunicación de su cámara (http o https). - **Nombre de usuario** : nombre de usuario para iniciar sesión en la cámara (si es necesario). Tenga en cuenta que el complemento no admite caracteres especiales (por lo tanto, debe limitarse a números, letras minúsculas / mayúsculas)). -- **Contraseña** : contraseña para conectarse a la cámara (si es necesario).Tenga en cuenta que el complemento crea un url_encode para el nombre de usuario y la contraseña requeridos para algunas cámaras, pero esto puede causar problemas a otras, si tiene un problema, intente sin caracteres especiales (limítese a números, letras minúsculas / mayúsculas). +- **Contraseña** : contraseña para conectarse a la cámara (si es necesario). Tenga en cuenta que el complemento hace que un código URL para el nombre de usuario y la contraseña sea obligatorio para algunas cámaras, pero esto puede causar problemas a otras. Si tiene algún problema, intente sin caracteres especiales (limítese a números, letras minúsculas/mayúsculas)). - **URL de instantánea** : URL de instantánea de cámara. Cambiar según las cámaras. Tenga cuidado de no poner una url de flujo bajo pena de estrellar Jeedom. Puedes agregar las etiquetas \#username\# y \#password\#, que será reemplazado automáticamente por el nombre de usuario y la contraseña al usar este comando. - **URL del feed** : escriba la URL de la secuencia de vídeo de la cámara ``rtsp://#username#:#password#@#ip#:554/videoMain`` (ejemplo para cámaras Foscam). -- **Flujo de flujo RTSP** : Si está en modo de transmisión de video (URL de transmisión completa), puede ver la cámara como una transmisión de video en lugar de cuadro por cuadro. Tenga en cuenta que esta opción consume muchos recursos y hace que la primera imagen esté muy por llegar. +- **Flujo de flujo RTSP** : Si está en el modo de transmisión de video (las URL de transmisión están completas), puede ver la cámara como una transmisión de video en lugar de cuadro por cuadro. Ojo, esta opción consume muchos recursos y hace que la primera imagen tarde mucho en llegar. +- **Convertir transmisión RTSP a x264** : Si su cámara está configurada en el códec de video H265, se convierte sobre la marcha a H264. Ojo, esta opción consume muchos recursos y aumenta el retraso. - **Avance** : le permite ver si jeedom recupera la transmisión de video (recuerde guardar antes de probar para ver si sus modificaciones funcionan) -- **Opción de transmisión de video** : Si está en modo de transmisión de video (URL de transmisión completa), puede pasar parámetros adicionales aquí a ffmpeg y avconv (reservado para expertos) -- **Modelo** : permite elegir el modelo de cámara. Atención : si lo cambia, sobrescribirá sus ajustes de configuración. +- **Opción de transmisión de video** : Si está en modo de transmisión de video (las URL de transmisión están completas), puede pasar parámetros adicionales aquí a ffmpeg y avconv (reservados para expertos)) +- **Modelo** : permite elegir el modelo de cámara. Atención : Si lo cambia, sobrescribirá sus ajustes de configuración. Configuración ONVIF : - **Puerto ONVIF** : el puerto utilizado para onvif @@ -48,7 +49,7 @@ Configuración ONVIF : > **Nota** > -> Puedes encontrar [aquí](https://www.ispyconnect.com/cameras) configuración para una gran cantidad de cámara y, por lo tanto, poder integrar su cámara usted mismo en Jeedom si no está en la lista +> Puedes encontrar [aquí](https://www.ispyconnect.com/cameras) configuraciones para bastantes cámaras y por lo tanto poder integrar tu cámara tú mismo en Jeedom si no está en la lista ## Image @@ -157,4 +158,4 @@ Obviamente, antes de crear un comando de tipo de información en su cámara >**¿Cuáles son las condiciones para que mi cámara sea compatible con Jeedom (si no está en la lista de compatibilidad) ?** > -> La única condición es que la cámara tenga una URL que envíe una imagen (bueno, una imagen, no una transmisión de video). +> La única condición es que la cámara tenga una URL que envíe una imagen (bueno, una imagen, no una transmisión de video). \ No newline at end of file diff --git a/docs/fr_FR/changelog.md b/docs/fr_FR/changelog.md index b20fabc..10a1fd7 100644 --- a/docs/fr_FR/changelog.md +++ b/docs/fr_FR/changelog.md @@ -4,6 +4,16 @@ > >S'il n'y a pas d'information sur la mise à jour, c'est que celle-ci concerne uniquement de la mise à jour de documentation, de traduction ou de texte. +# 23/07/2026 + +- Ajout d'une option pour convertir les fluxs H265 en H264 +- Correction d'un bug sur l'accès aux enregistrements vidéo +- Amélioration de la gestion des retours a la ligne dans le widget +- Ajout de la camera Reolink TrackMix +- Ajout de la caméra Ubiquiti G5 Turret Ultra +- Correction de la tâche de nettoyage quotidienne *(arrêt des flux HLS obsolètes et rotation de la clé d'accès locale)* +- Version minimale du core Jeedom requise : 4.3.1 + # 24/01/2024 - Amélioration du widget @@ -39,12 +49,12 @@ # 11/12/2021 - Support de nouvelles caméras -- Ajout d'un bouton pour voir une prévisualisation de la camera sur la page de configuration +- Ajout d'un bouton pour voir une prévisualisation de la caméra sur la page de configuration # 31/08/2021 - Modification pour autoriser la recuperation depuis une fonction d'un autre plugin (sera utilisé pour un futur plugin Unifi Protect) -- Ajout de la camera Ubiquiti G4 bullet (attention il faut sur la camera activer les connexion anonyme) +- Ajout de la caméra Ubiquiti G4 bullet (attention il faut sur la caméra activer les connexion anonyme) # 04/02/2021 @@ -54,7 +64,6 @@ - Correction d'un soucis d'affichage d'image sur les designs - # 24/11/2020 - Nouvelle présentation de la liste des objets @@ -67,16 +76,16 @@ # 07/07/2020 - Correction d'un soucis sur le port par default de l'url de flux pour les caméras Foscam merci @nebz -- Ajout de la camera Reolink RLC-410-5MP merci @Dorsad +- Ajout de la caméra Reolink RLC-410-5MP merci @Dorsad - Ajout de RocketCam (Freebox) merci @JAG # 26/06/2020 - Ajout de caméra Dahua -- Ajout de camera Foscam +- Ajout de caméra Foscam - Supression de la detection de mouvements - Ajout de panasonic wc np502 merci @Flobul -- Ajout de camera IOS merci @Flobul +- Ajout de caméra IOS merci @Flobul # 16/06/2020 @@ -85,7 +94,7 @@ # 14/06/2020 - Amélioration du systeme de nettoyage des fichiers de flux video (attention la fonction est toujours en beta il est possible que notre reglage soit un peu trop agressif) -- Correction d'un bug sur la recuperation des informations de mouvement des camera foscam HD +- Correction d'un bug sur la recuperation des informations de mouvement des caméras foscam HD - Correction d'un soucis si un utilisateur non admin voulait visionner le flux video - Correction de bug d'affichage sur les design en mode "flux only" - Correction de bugs @@ -93,17 +102,17 @@ # 11/0/2020 - Ajout de configuration -- Possibilité de voir la camera en flux video (et non plus image par image) - Beta -- Refonte du systeme de pre-configuration des cameras +- Possibilité de voir la caméra en flux video (et non plus image par image) - Beta +- Refonte du systeme de pre-configuration des caméras # 11/05/2020 - Retour de la fonction de decouverte ONVIF (merci @Aidom) -- Possibilité d'utiliser des commandes (type script) pour le controle des cameras +- Possibilité d'utiliser des commandes (type script) pour le controle des caméras # 17/10/2019 -- Optimisation de la fonction de nettoyage des dossiers de capture des cameras +- Optimisation de la fonction de nettoyage des dossiers de capture des caméras # 10/10/2019 @@ -124,8 +133,8 @@ # 14/09/2019 - - Correction d'un bug ou la tache cronHourly du plugin camera n'arrivait pas a finir - - Correction d'un bug sur la prévisualisation de l'historique des captures +- Correction d'un bug ou la tache cronHourly du plugin caméra n'arrivait pas à finir +- Correction d'un bug sur la prévisualisation de l'historique des captures # 28/08/2019 @@ -150,7 +159,7 @@ # 15/01/2019 -- Ajout de la camera Wanscam q3(s) +- Ajout de la caméra Wanscam q3(s) - Selection du mode automatiquement en fonction de l'url de capture et du flux vidéo (RTSP) - Correction de bugs - Ajout du remplacement de #username# et #password# dans les commandes @@ -158,7 +167,7 @@ # 01/06/2018 -- Refonte du panel, on choisi maintenant le nombre de camera par ligne dans la configuration du plugin, leur dimension est calculé automatiquement +- Refonte du panel, on choisi maintenant le nombre de caméra par ligne dans la configuration du plugin, leur dimension est calculé automatiquement - Amélioration du widget en mobile - Support des flux video RTSP/MJPEG... Attention vu qu'il y a une conversion de faite ce n'est à utiliser que si vous n'avez pas le choix, il faut priviliegé les snapshot (plus rapide et moins de charge sur Jeedom) diff --git a/docs/fr_FR/index.md b/docs/fr_FR/index.md index 86ad724..b3c9bdb 100644 --- a/docs/fr_FR/index.md +++ b/docs/fr_FR/index.md @@ -9,7 +9,7 @@ Plugin permettant de créer et gérer des caméras wifi (affichage et enregistre Après installation du plugin, il vous suffit de l'activer. Quelques paramètres sont à renseigner dans la configuration du plugin : - **Chemin des enregistrements** : indique le chemin où Jeedom doit stocker les images qu'il capture de vos caméras (il est déconseillé d'y toucher). Si votre chemin n'est pas dans le chemin d'installation de Jeedom alors vous ne pourrez visualiser les captures dans Jeedom. -- **Taille maximum du dossier d'enregistrement (Mo)** : indique la taille maximum autorisée pour le dossier où les captures sont enregistrées (il est déconseillé d'y toucher). Si ce quotas est atteint Jeedom supprimera les captures les plus anciennes. +- **Taille maximum du dossier d'enregistrement (Mo)** : indique la taille maximum autorisée pour le dossier où les captures sont enregistrées (il est déconseillé d'y toucher). Si ce quota est atteint Jeedom supprimera les captures les plus anciennes. - **Le plugin caméra doit réagir aux interactions** : mots clés / phrases auxquel(le)s le plugin réagira via les interactions de Jeedom. - **Panel** : permet d'afficher le panel (Menu Accueil → Caméra) et d'avoir une vue sur l'ensemble de vos caméras (voir plus bas). N'oubliez pas d'activer le panel dans la configuration du plugin pour y avoir accès plus tard. @@ -31,13 +31,14 @@ Ici vous avez les informations principales de votre caméra : - **Port** : le port pour sur lequel joindre la caméra. - **Protocole** : le protocole de communication de votre caméra (http ou https). - **Nom d'utilisateur** : nom d'utilisateur pour se connecter à la caméra (si nécessaire). Attention le plugin ne supporte pas les caractères spéciaux (il faut donc se limiter aux chiffres, lettres minuscule/majuscule). -- **Mot de passe** : mot de passe pour se connecter à la caméra (si nécessaire).Attention le plugin fait un url_encode pour le nom d'utilisateur et mot de passe obligatoire pour certaine camera mais cela peut poser soucis pour d'autre, si vous avez un soucis essayez sans caractères spéciaux (se limiter aux chiffres, lettres minuscule/majuscule). +- **Mot de passe** : mot de passe pour se connecter à la caméra (si nécessaire). Attention, le plugin fait un url_encode pour le nom d'utilisateur et mot de passe obligatoire pour certaines cameras mais cela peut poser soucis pour d'autres, si vous avez un souci, essayez sans caractères spéciaux (se limiter aux chiffres, lettres minuscule/majuscule). - **URL de snapshot** : URL de "snapshot" de la caméra. Change en fonction des caméras. Attention à ne pas mettre une url de flux sous peine de planter Jeedom. Vous pouvez ajouter les tags \#username\# et \#password\#, qui seront automatiquement remplacés par le nom d'utilisateur et le mot de passe lors de l'utilisation de cette commande. - **URL du flux** : url du flux video de la caméra de type ``rtsp://#username#:#password#@#ip#:554/videoMain`` (exemple pour les caméras Foscam). -- **Stream du flux RTSP** : si vous etês en mode flux video (URL du flux remplis) alors vous pouvez voir la camera sous forme de flux video au lieu d'image par image. Attention cette option est très consommatrice de ressources et rend la 1er image très à arriver. -- **Previsualiser** : permet de voir si jeedom recupere bien le flux video (pensez bien a sauvegarder avant de test pour voir si vos modifications marchent) -- **Option flux video** : si vous etês en mode flux video (URL du flux remplis) alors vous pouvez passer des parametres suplementaire ici à ffmpeg et avconv (reservé aux experts) -- **Modèle** : permet de choisir le modèle de la caméra. Attention : si vous changez cela écrasera vos paramètres de configuration. +- **Stream du flux RTSP** : si vous etês en mode flux vidéo (URL du flux remplis), alors vous pouvez voir la caméra sous forme de flux vidéo au lieu d'image par image. Attention, cette option est très consommatrice de ressources et rend la 1re image très lente à arriver. +- **Convertir en x264 le flux RTSP** : si votre caméra est configurée en codec vidéo H265, convertit à la volée en H264. Attention, cette option est très consommatrice de ressources et augmente le décalage. +- **Previsualiser** : permet de voir si jeedom recupère bien le flux vidéo (pensez bien a sauvegarder avant de test pour voir si vos modifications marchent) +- **Option flux video** : si vous êtes en mode flux vidéo (URL du flux remplis), alors vous pouvez passer des paramètres supplémentaires ici à ffmpeg et avconv (reservé aux experts) +- **Modèle** : permet de choisir le modèle de la caméra. Attention : si vous changez, cela écrasera vos paramètres de configuration. Les paramètres ONVIF : - **Port ONVIF** : le port servant pour onvif @@ -48,7 +49,7 @@ Les paramètres ONVIF : > **NOTE** > -> Vous pouvez retrouver [ici](https://www.ispyconnect.com/cameras) des configuration pour pas mal de camera et donc pouvoir integrer votre camera vous meme à Jeedom si elle n'est pas dans la liste +> Vous pouvez retrouver [ici](https://www.ispyconnect.com/cameras) des configurations pour pas mal de cameras et donc pouvoir intégrer votre camera vous-même à Jeedom si elle n'est pas dans la liste ## Image @@ -157,4 +158,4 @@ Il faut bien entendu avant avoir créé une commande de type info sur votre cam >**Quelles sont les conditions pour que ma caméra soit compatible Jeedom (si elle n'est pas dans la liste de compatibilité) ?** > -> La seule condition c'est que la caméra possède une url qui renvoi une image (et bien une image pas un flux video). +> La seule condition c'est que la caméra possède une url qui renvoi une image (et bien une image pas un flux video). \ No newline at end of file diff --git a/docs/i18n/de_DE.json b/docs/i18n/de_DE.json index e9866b7..213744c 100644 --- a/docs/i18n/de_DE.json +++ b/docs/i18n/de_DE.json @@ -2,6 +2,10 @@ "changelog.md": { "Changelog Caméra": "Changelog Kamera", "S'il n'y a pas d'information sur la mise à jour, c'est que celle-ci concerne uniquement de la mise à jour de documentation, de traduction ou de texte": "Wenn es keine Informationen über die Aktualisierung gibt, bedeutet dies, dass es sich nur um die Aktualisierung von Dokumentation, Übersetzung oder Text handelt", + "Correction d'un bug sur l'accès aux enregistrements videos": "Ein Fehler beim Zugriff auf Videoaufzeichnungen wurde behoben", + "Amélioration de la gestion des retours a la ligne dans le widget": "Verbesserte Handhabung von Zeilenumbrüchen im Widget", + "24\/01\/2024": "24.01.2024", + "Amélioration du widget": "Widget-Verbesserung", "17\/01\/2024": "17.01.2024", "Correction de bug sur le widget": "Fehlerbehebung beim Widget", "16\/01\/2024": "16.01.2024", @@ -103,6 +107,13 @@ "[IMPORTANT]": "[Wichtig]", "*IMPORTANT*": "*Wichtig*", " IMPORTANT*": " Wichtig*", + " LIEN.": " VERKNÜPFUNG.", + " LIEN?": " VERKNÜPFUNG?", + "LIEN ": "VERKNÜPFUNG ", + " LIEN]": " VERKNÜPFUNG]", + "[LIEN]": "[VERKNÜPFUNG]", + "*LIEN*": "*VERKNÜPFUNG*", + " LIEN*": " VERKNÜPFUNG*", " et.": " und.", " et?": " und?", "et ": "und ", @@ -122,7 +133,7 @@ "Si votre chemin n'est pas dans le chemin d'installation de Jeedom alors vous ne pourrez visualiser les captures dans Jeedom": "Wenn sich Ihr Pfad nicht im Jeedom-Installationspfad befindet, können Sie die Erfassungen in Jeedom nicht anzeigen", "Taille maximum du dossier d'enregistrement (Mo": "Maximale Größe des Aufnahmeordners (MB", "indique la taille maximum autorisée pour le dossier où les captures sont enregistrées (il est déconseillé d'y toucher": "Gibt die maximale Größe an, die für den Ordner autorisiert ist, in dem die Fänge gespeichert sind (es wird nicht empfohlen, ihn zu berühren", - "Si ce quotas est atteint Jeedom supprimera les captures les plus anciennes": "Wenn diese Quote erreicht ist, löscht Jeedom die ältesten Fänge", + "Si ce quota est atteint Jeedom supprimera les captures les plus anciennes": "Wenn dieses Kontingent erreicht ist, löscht Jeedom die ältesten Aufnahmen", "Le plugin caméra doit réagir aux interactions": "Das Kamera-Plugin muss auf Interaktionen reagieren", "mots clés \/ phrases auxquel(le)s le plugin réagira via les interactions de Jeedom": "Schlüsselwörter \/ Phrasen, auf die das Plugin über Jeedom-Interaktionen reagiert", "permet d'afficher le panel (Menu Accueil → Caméra) et d'avoir une vue sur l'ensemble de vos caméras (voir plus bas": "Mit dieser Option können Sie das Bedienfeld anzeigen (Startmenü → Kamera) und alle Ihre Kameras anzeigen (siehe unten)", @@ -145,7 +156,7 @@ "Attention le plugin ne supporte pas les caractères spéciaux (il faut donc se limiter aux chiffres, lettres minuscule\/majuscule": "Bitte beachten Sie, dass das Plugin keine Sonderzeichen unterstützt (Sie müssen sich daher auf Zahlen, Klein- \/ Großbuchstaben beschränken", "Mot de passe": "Passwort", "mot de passe pour se connecter à la caméra (si nécessaire": "Passwort für die Verbindung zur Kamera (falls erforderlich)", - "Attention le plugin fait un url_encode pour le nom d'utilisateur et mot de passe obligatoire pour certaine camera mais cela peut poser soucis pour d'autre, si vous avez un soucis essayez sans caractères spéciaux (se limiter aux chiffres, lettres minuscule\/majuscule": "Bitte beachten Sie, dass das Plugin für einige Kameras einen url_encode für den Benutzernamen und das Passwort erfordert, dies jedoch bei anderen zu Problemen führen kann. Wenn Sie ein Problem haben, versuchen Sie es ohne Sonderzeichen (beschränken Sie sich auf Zahlen, Klein-\/Großbuchstaben", + "Attention, le plugin fait un url_encode pour le nom d'utilisateur et mot de passe obligatoire pour certaines cameras mais cela peut poser soucis pour d'autres, si vous avez un souci, essayez sans caractères spéciaux (se limiter aux chiffres, lettres minuscule\/majuscule": "Bitte beachten Sie, dass das Plugin für einige Kameras einen URL-Code für den Benutzernamen und das Passwort zwingend vorschreibt, dies kann jedoch bei anderen zu Problemen führen. Wenn Sie ein Problem haben, versuchen Sie es ohne Sonderzeichen (beschränken Sie sich auf Zahlen, Kleinbuchstaben\/Großbuchstaben)", "URL de snapshot": "Snapshot-URL", "URL de \"snapshot\" de la caméra": "Kamera-Snapshot-URL", "Change en fonction des caméras": "Ändern Sie je nach Kamera", @@ -157,14 +168,17 @@ "url du flux video de la caméra de type": "Typ Kamera Video Stream URL", "exemple pour les caméras Foscam": "Beispiel für Foscam-Kameras", "Stream du flux RTSP": "RTSP-Stream-Stream", - "si vous etês en mode flux video (URL du flux remplis) alors vous pouvez voir la camera sous forme de flux video au lieu d'image par image": "Wenn Sie sich im Videostream-Modus befinden (Stream-URL ausgefüllt), können Sie die Kamera als Videostream anstelle von Frame für Frame sehen", - "Attention cette option est très consommatrice de ressources et rend la 1er image très à arriver": "Bitte beachten Sie, dass diese Option viele Ressourcen verbraucht und das erste Bild sehr schnell ankommt", - "permet de voir si jeedom recupere bien le flux video (pensez bien a sauvegarder avant de test pour voir si vos modifications marchent": "ermöglicht Ihnen zu sehen, ob jeedom den Videostream wiederherstellt (denken Sie daran, vor dem Testen zu speichern, um zu sehen, ob Ihre Änderungen funktionieren", + "si vous etês en mode flux vidéo (URL du flux remplis), alors vous pouvez voir la caméra sous forme de flux vidéo au lieu d'image par image": "Wenn Sie sich im Videostream-Modus befinden (Stream-URLs ausgefüllt), können Sie die Kamera als Videostream statt Bild für Bild anzeigen", + "Attention, cette option est très consommatrice de ressources et rend la 1re image très lente à arriver": "Seien Sie vorsichtig, diese Option verbraucht viele Ressourcen und sorgt dafür, dass das erste Bild nur sehr langsam ankommt", + "Convertir en x264 le flux RTSP": "Konvertieren Sie den RTSP-Stream in x264", + "si votre caméra est configurée en codec vidéo H265, convertit à la volée en H264": "Wenn Ihre Kamera im H265-Videocodec konfiguriert ist, erfolgt die Konvertierung im Handumdrehen in H264", + "Attention, cette option est très consommatrice de ressources et augmente le décalage": "Seien Sie vorsichtig, diese Option verbraucht viele Ressourcen und erhöht die Verzögerung", + "permet de voir si jeedom recupère bien le flux vidéo (pensez bien a sauvegarder avant de test pour voir si vos modifications marchent": "ermöglicht Ihnen zu sehen, ob jeedom den Videostream wiederherstellt (denken Sie daran, vor dem Testen zu speichern, um zu sehen, ob Ihre Änderungen funktionieren", "Option flux video": "Videostream-Option", - "si vous etês en mode flux video (URL du flux remplis) alors vous pouvez passer des parametres suplementaire ici à ffmpeg et avconv (reservé aux experts": "Wenn Sie sich im Video-Stream-Modus befinden (Stream-URL ausgefüllt), können Sie hier zusätzliche Parameter an ffmpeg und avconv übergeben (für Experten reserviert)", + "si vous êtes en mode flux vidéo (URL du flux remplis), alors vous pouvez passer des paramètres supplémentaires ici à ffmpeg et avconv (reservé aux experts": "Wenn Sie sich im Videostream-Modus befinden (Stream-URLs gefüllt), können Sie hier zusätzliche Parameter an ffmpeg und avconv übergeben (für Experten reserviert)", "Modèle": "Modell", "permet de choisir le modèle de la caméra": "ermöglicht die Auswahl des Kameramodells", - "si vous changez cela écrasera vos paramètres de configuration": "Wenn Sie dies ändern, werden Ihre Konfigurationseinstellungen überschrieben", + "si vous changez, cela écrasera vos paramètres de configuration": "Wenn Sie es ändern, werden Ihre Konfigurationseinstellungen überschrieben", "Les paramètres ONVIF": "ONVIF-Einstellungen", "Port ONVIF": "ONVIF-Port", "le port servant pour onvif": "der für onvif verwendete Port", @@ -176,7 +190,7 @@ "délai avant commande de stop ptz": "Zeit bis zum PTZ-Stoppbefehl", "Il faut renseigner la commande de Stop sur chaque commande de mouvement PTZ dans le champ prévu à cet effet": "Sie müssen bei jedem PTZ-Bewegungsbefehl den Stoppbefehl in das dafür vorgesehene Feld eingeben", "Vous pouvez retrouver": "Sie können finden", - "des configuration pour pas mal de camera et donc pouvoir integrer votre camera vous meme à Jeedom si elle n'est pas dans la liste": "Konfiguration für viele Kameras und daher in der Lage sein, Ihre Kamera selbst in Jeedom zu integrieren, wenn es nicht in der Liste ist", + "des configurations pour pas mal de cameras et donc pouvoir intégrer votre camera vous-même à Jeedom si elle n'est pas dans la liste": "Konfigurationen für eine ganze Reihe von Kameras und können so Ihre Kamera selbst in Jeedom integrieren, wenn sie nicht in der Liste enthalten ist", "Cette partie vous permet de configurer la qualité de l'image": "In diesem Teil können Sie die Bildqualität konfigurieren", "En effet Jeedom diminue la taille de l'image ou la compresse avant de l'envoyer à votre navigateur": "In der Tat verringert Jeedom die Größe des Bildes oder der Komprimierung, bevor es an Ihren Browser gesendet wird", "Cela permet de gagner en fluidité des images (car elles sont moins lourdes": "Dies verbessert die Fließfähigkeit der Bilder (weil sie heller sind", diff --git a/docs/i18n/en_US.json b/docs/i18n/en_US.json index 97ac48b..50ab2a3 100644 --- a/docs/i18n/en_US.json +++ b/docs/i18n/en_US.json @@ -2,6 +2,10 @@ "changelog.md": { "Changelog Caméra": "Changelog Camera", "S'il n'y a pas d'information sur la mise à jour, c'est que celle-ci concerne uniquement de la mise à jour de documentation, de traduction ou de texte": "If there is no information on the update, it means that it concerns only the update of documentation, translation or text", + "Correction d'un bug sur l'accès aux enregistrements videos": "Fixed a bug on access to video recordings", + "Amélioration de la gestion des retours a la ligne dans le widget": "Improved handling of line breaks in the widget", + "24\/01\/2024": "01\/24\/2024", + "Amélioration du widget": "Widget improvement", "17\/01\/2024": "01\/17\/2024", "Correction de bug sur le widget": "Bug fix on widget", "16\/01\/2024": "01\/16\/2024", @@ -103,6 +107,13 @@ "[IMPORTANT]": "[Important]", "*IMPORTANT*": "*Important*", " IMPORTANT*": " Important*", + " LIEN.": " LINK.", + " LIEN?": " LINK?", + "LIEN ": "LINK ", + " LIEN]": " LINK]", + "[LIEN]": "[LINK]", + "*LIEN*": "*LINK*", + " LIEN*": " LINK*", " et.": " and.", " et?": " and?", "et ": "and ", @@ -122,7 +133,7 @@ "Si votre chemin n'est pas dans le chemin d'installation de Jeedom alors vous ne pourrez visualiser les captures dans Jeedom": "If your path is not in the Jeedom installation path then you will not be able to view the captures in Jeedom", "Taille maximum du dossier d'enregistrement (Mo": "Maximum recording folder size (MB", "indique la taille maximum autorisée pour le dossier où les captures sont enregistrées (il est déconseillé d'y toucher": "indicates the maximum size authorized for the folder where the catches are saved (it is not recommended to touch it", - "Si ce quotas est atteint Jeedom supprimera les captures les plus anciennes": "If this quota is reached Jeedom will delete the oldest catches", + "Si ce quota est atteint Jeedom supprimera les captures les plus anciennes": "If this quota is reached Jeedom will delete the oldest captures", "Le plugin caméra doit réagir aux interactions": "The camera plugin must react to interactions", "mots clés \/ phrases auxquel(le)s le plugin réagira via les interactions de Jeedom": "keywords \/ phrases to which the plugin will react via Jeedom interactions", "permet d'afficher le panel (Menu Accueil → Caméra) et d'avoir une vue sur l'ensemble de vos caméras (voir plus bas": "allows you to display the panel (Home Menu → Camera) and to have a view of all your cameras (see below", @@ -145,7 +156,7 @@ "Attention le plugin ne supporte pas les caractères spéciaux (il faut donc se limiter aux chiffres, lettres minuscule\/majuscule": "Please note the plugin does not support special characters (you must therefore limit yourself to numbers, lowercase \/ uppercase letters", "Mot de passe": "Password", "mot de passe pour se connecter à la caméra (si nécessaire": "password to connect to the camera (if necessary", - "Attention le plugin fait un url_encode pour le nom d'utilisateur et mot de passe obligatoire pour certaine camera mais cela peut poser soucis pour d'autre, si vous avez un soucis essayez sans caractères spéciaux (se limiter aux chiffres, lettres minuscule\/majuscule": "Be careful, the plugin makes a url_encode for the username and password required for some cameras but this can cause problems for others, if you have a problem try without special characters (be limited to numbers, lowercase \/ uppercase letters", + "Attention, le plugin fait un url_encode pour le nom d'utilisateur et mot de passe obligatoire pour certaines cameras mais cela peut poser soucis pour d'autres, si vous avez un souci, essayez sans caractères spéciaux (se limiter aux chiffres, lettres minuscule\/majuscule": "Please note, the plugin makes a url_encode for the username and password mandatory for some cameras but this can cause problems for others, if you have a problem, try without special characters (limit yourself to numbers, lowercase letters\/ capital letter", "URL de snapshot": "Snapshot URL", "URL de \"snapshot\" de la caméra": "Camera snapshot URL", "Change en fonction des caméras": "Change depending on the cameras", @@ -157,14 +168,17 @@ "url du flux video de la caméra de type": "type camera video stream url", "exemple pour les caméras Foscam": "example for Foscam cameras", "Stream du flux RTSP": "RTSP stream stream", - "si vous etês en mode flux video (URL du flux remplis) alors vous pouvez voir la camera sous forme de flux video au lieu d'image par image": "if you are in video stream mode (stream URL filled in) then you can see the camera as a video stream instead of frame by frame", - "Attention cette option est très consommatrice de ressources et rend la 1er image très à arriver": "Please note this option consumes a lot of resources and makes the 1st image very to arrive", - "permet de voir si jeedom recupere bien le flux video (pensez bien a sauvegarder avant de test pour voir si vos modifications marchent": "allows you to see if jeedom recovers the video stream (remember to save before testing to see if your modifications work", + "si vous etês en mode flux vidéo (URL du flux remplis), alors vous pouvez voir la caméra sous forme de flux vidéo au lieu d'image par image": "If you are in video stream mode (stream URLs filled in), then you can view the camera as a video stream instead of frame by frame", + "Attention, cette option est très consommatrice de ressources et rend la 1re image très lente à arriver": "Be careful, this option consumes a lot of resources and makes the first image very slow to arrive", + "Convertir en x264 le flux RTSP": "Convert RTSP stream to x264", + "si votre caméra est configurée en codec vidéo H265, convertit à la volée en H264": "if your camera is configured in H265 video codec, converts on the fly to H264", + "Attention, cette option est très consommatrice de ressources et augmente le décalage": "Be careful, this option consumes a lot of resources and increases lag", + "permet de voir si jeedom recupère bien le flux vidéo (pensez bien a sauvegarder avant de test pour voir si vos modifications marchent": "allows you to see if jeedom recovers the video stream (remember to save before testing to see if your modifications work", "Option flux video": "Video stream option", - "si vous etês en mode flux video (URL du flux remplis) alors vous pouvez passer des parametres suplementaire ici à ffmpeg et avconv (reservé aux experts": "if you are in video stream mode (stream URL filled in) then you can pass additional parameters here to ffmpeg and avconv (reserved for experts", + "si vous êtes en mode flux vidéo (URL du flux remplis), alors vous pouvez passer des paramètres supplémentaires ici à ffmpeg et avconv (reservé aux experts": "if you are in video stream mode (stream URLs filled), then you can pass additional parameters here to ffmpeg and avconv (reserved for experts", "Modèle": "Model", "permet de choisir le modèle de la caméra": "allows to choose the camera model", - "si vous changez cela écrasera vos paramètres de configuration": "if you change it will overwrite your configuration settings", + "si vous changez, cela écrasera vos paramètres de configuration": "if you change it will overwrite your configuration settings", "Les paramètres ONVIF": "ONVIF settings", "Port ONVIF": "ONVIF port", "le port servant pour onvif": "the port used for onvif", @@ -176,7 +190,7 @@ "délai avant commande de stop ptz": "time before Ptz stop order", "Il faut renseigner la commande de Stop sur chaque commande de mouvement PTZ dans le champ prévu à cet effet": "You must enter the Stop command on each PTZ movement command in the field provided for this purpose", "Vous pouvez retrouver": "You can find", - "des configuration pour pas mal de camera et donc pouvoir integrer votre camera vous meme à Jeedom si elle n'est pas dans la liste": "configuration for a lot of camera and therefore be able to integrate your camera yourself in Jeedom if it is not in the list", + "des configurations pour pas mal de cameras et donc pouvoir intégrer votre camera vous-même à Jeedom si elle n'est pas dans la liste": "configurations for quite a few cameras and therefore be able to integrate your camera yourself into Jeedom if it is not in the list", "Cette partie vous permet de configurer la qualité de l'image": "This part allows you to configure the image quality", "En effet Jeedom diminue la taille de l'image ou la compresse avant de l'envoyer à votre navigateur": "Indeed Jeedom decreases the size of the image or the compress before sending it to your browser", "Cela permet de gagner en fluidité des images (car elles sont moins lourdes": "This improves the fluidity of the images (because they are lighter", diff --git a/docs/i18n/es_ES.json b/docs/i18n/es_ES.json index de74a27..42df20d 100644 --- a/docs/i18n/es_ES.json +++ b/docs/i18n/es_ES.json @@ -2,6 +2,10 @@ "changelog.md": { "Changelog Caméra": "Changelog Camera", "S'il n'y a pas d'information sur la mise à jour, c'est que celle-ci concerne uniquement de la mise à jour de documentation, de traduction ou de texte": "Si no hay información sobre la actualización, significa que se trata solo de la actualización de la documentación, la traducción o el texto", + "Correction d'un bug sur l'accès aux enregistrements videos": "Se corrigió un error en el acceso a grabaciones de video", + "Amélioration de la gestion des retours a la ligne dans le widget": "Manejo mejorado de saltos de línea en el widget", + "24\/01\/2024": "24\/01\/2024", + "Amélioration du widget": "Mejora de widgets", "17\/01\/2024": "17\/01\/2024", "Correction de bug sur le widget": "Corrección de errores en el widget", "16\/01\/2024": "16\/01\/2024", @@ -103,6 +107,13 @@ "[IMPORTANT]": "[Importante]", "*IMPORTANT*": "*Importante*", " IMPORTANT*": " Importante*", + " LIEN.": " ENLACE.", + " LIEN?": " ENLACE?", + "LIEN ": "ENLACE ", + " LIEN]": " ENLACE]", + "[LIEN]": "[ENLACE]", + "*LIEN*": "*ENLACE*", + " LIEN*": " ENLACE*", " et.": " y.", " et?": " y?", "et ": "y ", @@ -122,7 +133,7 @@ "Si votre chemin n'est pas dans le chemin d'installation de Jeedom alors vous ne pourrez visualiser les captures dans Jeedom": "Si su ruta no está en la ruta de instalación de Jeedom, entonces no podrá ver las capturas en Jeedom", "Taille maximum du dossier d'enregistrement (Mo": "Tamaño máximo de carpeta de grabación (MB", "indique la taille maximum autorisée pour le dossier où les captures sont enregistrées (il est déconseillé d'y toucher": "indica el tamaño máximo autorizado para la carpeta donde se guardan las capturas (no se recomienda tocarlo", - "Si ce quotas est atteint Jeedom supprimera les captures les plus anciennes": "Si se alcanza esta cuota, Jeedom eliminará las capturas más antiguas", + "Si ce quota est atteint Jeedom supprimera les captures les plus anciennes": "Si se alcanza esta cuota, Jeedom eliminará las capturas más antiguas", "Le plugin caméra doit réagir aux interactions": "El complemento de la cámara debe reaccionar a las interacciones", "mots clés \/ phrases auxquel(le)s le plugin réagira via les interactions de Jeedom": "palabras clave \/ frases a las que reaccionará el complemento a través de las interacciones de Jeedom", "permet d'afficher le panel (Menu Accueil → Caméra) et d'avoir une vue sur l'ensemble de vos caméras (voir plus bas": "le permite mostrar el panel (Menú de inicio → Cámara) y tener una vista de todas sus cámaras (ver más abajo", @@ -145,7 +156,7 @@ "Attention le plugin ne supporte pas les caractères spéciaux (il faut donc se limiter aux chiffres, lettres minuscule\/majuscule": "Tenga en cuenta que el complemento no admite caracteres especiales (por lo tanto, debe limitarse a números, letras minúsculas \/ mayúsculas)", "Mot de passe": "Contraseña", "mot de passe pour se connecter à la caméra (si nécessaire": "contraseña para conectarse a la cámara (si es necesario", - "Attention le plugin fait un url_encode pour le nom d'utilisateur et mot de passe obligatoire pour certaine camera mais cela peut poser soucis pour d'autre, si vous avez un soucis essayez sans caractères spéciaux (se limiter aux chiffres, lettres minuscule\/majuscule": "Tenga en cuenta que el complemento crea un url_encode para el nombre de usuario y la contraseña requeridos para algunas cámaras, pero esto puede causar problemas a otras, si tiene un problema, intente sin caracteres especiales (limítese a números, letras minúsculas \/ mayúsculas", + "Attention, le plugin fait un url_encode pour le nom d'utilisateur et mot de passe obligatoire pour certaines cameras mais cela peut poser soucis pour d'autres, si vous avez un souci, essayez sans caractères spéciaux (se limiter aux chiffres, lettres minuscule\/majuscule": "Tenga en cuenta que el complemento hace que un código URL para el nombre de usuario y la contraseña sea obligatorio para algunas cámaras, pero esto puede causar problemas a otras. Si tiene algún problema, intente sin caracteres especiales (limítese a números, letras minúsculas\/mayúsculas)", "URL de snapshot": "URL de instantánea", "URL de \"snapshot\" de la caméra": "URL de instantánea de cámara", "Change en fonction des caméras": "Cambiar según las cámaras", @@ -157,14 +168,17 @@ "url du flux video de la caméra de type": "escriba la URL de la secuencia de vídeo de la cámara", "exemple pour les caméras Foscam": "ejemplo para cámaras Foscam", "Stream du flux RTSP": "Flujo de flujo RTSP", - "si vous etês en mode flux video (URL du flux remplis) alors vous pouvez voir la camera sous forme de flux video au lieu d'image par image": "Si está en modo de transmisión de video (URL de transmisión completa), puede ver la cámara como una transmisión de video en lugar de cuadro por cuadro", - "Attention cette option est très consommatrice de ressources et rend la 1er image très à arriver": "Tenga en cuenta que esta opción consume muchos recursos y hace que la primera imagen esté muy por llegar", - "permet de voir si jeedom recupere bien le flux video (pensez bien a sauvegarder avant de test pour voir si vos modifications marchent": "le permite ver si jeedom recupera la transmisión de video (recuerde guardar antes de probar para ver si sus modificaciones funcionan", + "si vous etês en mode flux vidéo (URL du flux remplis), alors vous pouvez voir la caméra sous forme de flux vidéo au lieu d'image par image": "Si está en el modo de transmisión de video (las URL de transmisión están completas), puede ver la cámara como una transmisión de video en lugar de cuadro por cuadro", + "Attention, cette option est très consommatrice de ressources et rend la 1re image très lente à arriver": "Ojo, esta opción consume muchos recursos y hace que la primera imagen tarde mucho en llegar", + "Convertir en x264 le flux RTSP": "Convertir transmisión RTSP a x264", + "si votre caméra est configurée en codec vidéo H265, convertit à la volée en H264": "Si su cámara está configurada en el códec de video H265, se convierte sobre la marcha a H264", + "Attention, cette option est très consommatrice de ressources et augmente le décalage": "Ojo, esta opción consume muchos recursos y aumenta el retraso", + "permet de voir si jeedom recupère bien le flux vidéo (pensez bien a sauvegarder avant de test pour voir si vos modifications marchent": "le permite ver si jeedom recupera la transmisión de video (recuerde guardar antes de probar para ver si sus modificaciones funcionan", "Option flux video": "Opción de transmisión de video", - "si vous etês en mode flux video (URL du flux remplis) alors vous pouvez passer des parametres suplementaire ici à ffmpeg et avconv (reservé aux experts": "Si está en modo de transmisión de video (URL de transmisión completa), puede pasar parámetros adicionales aquí a ffmpeg y avconv (reservado para expertos", + "si vous êtes en mode flux vidéo (URL du flux remplis), alors vous pouvez passer des paramètres supplémentaires ici à ffmpeg et avconv (reservé aux experts": "Si está en modo de transmisión de video (las URL de transmisión están completas), puede pasar parámetros adicionales aquí a ffmpeg y avconv (reservados para expertos)", "Modèle": "Modelo", "permet de choisir le modèle de la caméra": "permite elegir el modelo de cámara", - "si vous changez cela écrasera vos paramètres de configuration": "si lo cambia, sobrescribirá sus ajustes de configuración", + "si vous changez, cela écrasera vos paramètres de configuration": "Si lo cambia, sobrescribirá sus ajustes de configuración", "Les paramètres ONVIF": "Configuración ONVIF", "Port ONVIF": "Puerto ONVIF", "le port servant pour onvif": "el puerto utilizado para onvif", @@ -176,7 +190,7 @@ "délai avant commande de stop ptz": "tiempo antes de la orden de parada de Ptz", "Il faut renseigner la commande de Stop sur chaque commande de mouvement PTZ dans le champ prévu à cet effet": "Debe ingresar el comando Detener en cada comando de movimiento PTZ en el campo provisto para este propósito", "Vous pouvez retrouver": "Puedes encontrar", - "des configuration pour pas mal de camera et donc pouvoir integrer votre camera vous meme à Jeedom si elle n'est pas dans la liste": "configuración para una gran cantidad de cámara y, por lo tanto, poder integrar su cámara usted mismo en Jeedom si no está en la lista", + "des configurations pour pas mal de cameras et donc pouvoir intégrer votre camera vous-même à Jeedom si elle n'est pas dans la liste": "configuraciones para bastantes cámaras y por lo tanto poder integrar tu cámara tú mismo en Jeedom si no está en la lista", "Cette partie vous permet de configurer la qualité de l'image": "Esta parte le permite configurar la calidad de la imagen", "En effet Jeedom diminue la taille de l'image ou la compresse avant de l'envoyer à votre navigateur": "De hecho, Jeedom disminuye el tamaño de la imagen o la compresa antes de enviarla a su navegador", "Cela permet de gagner en fluidité des images (car elles sont moins lourdes": "Esto mejora la fluidez de las imágenes (porque son más claras", diff --git a/docs/i18n/fr_FR.json b/docs/i18n/fr_FR.json index 72ac45f..86ff2d1 100644 --- a/docs/i18n/fr_FR.json +++ b/docs/i18n/fr_FR.json @@ -3,6 +3,11 @@ "Changelog Caméra": "Changelog Caméra", "IMPORTANT": "IMPORTANT", "S'il n'y a pas d'information sur la mise à jour, c'est que celle-ci concerne uniquement de la mise à jour de documentation, de traduction ou de texte": "S'il n'y a pas d'information sur la mise à jour, c'est que celle-ci concerne uniquement de la mise à jour de documentation, de traduction ou de texte", + "Correction d'un bug sur l'accès aux enregistrements videos": "Correction d'un bug sur l'accès aux enregistrements videos", + "LIEN": "LIEN", + "Amélioration de la gestion des retours a la ligne dans le widget": "Amélioration de la gestion des retours a la ligne dans le widget", + "24\/01\/2024": "24\/01\/2024", + "Amélioration du widget": "Amélioration du widget", "17\/01\/2024": "17\/01\/2024", "Correction de bug sur le widget": "Correction de bug sur le widget", "16\/01\/2024": "16\/01\/2024", @@ -111,7 +116,7 @@ "Si votre chemin n'est pas dans le chemin d'installation de Jeedom alors vous ne pourrez visualiser les captures dans Jeedom": "Si votre chemin n'est pas dans le chemin d'installation de Jeedom alors vous ne pourrez visualiser les captures dans Jeedom", "Taille maximum du dossier d'enregistrement (Mo": "Taille maximum du dossier d'enregistrement (Mo", "indique la taille maximum autorisée pour le dossier où les captures sont enregistrées (il est déconseillé d'y toucher": "indique la taille maximum autorisée pour le dossier où les captures sont enregistrées (il est déconseillé d'y toucher", - "Si ce quotas est atteint Jeedom supprimera les captures les plus anciennes": "Si ce quotas est atteint Jeedom supprimera les captures les plus anciennes", + "Si ce quota est atteint Jeedom supprimera les captures les plus anciennes": "Si ce quota est atteint Jeedom supprimera les captures les plus anciennes", "Le plugin caméra doit réagir aux interactions": "Le plugin caméra doit réagir aux interactions", "mots clés \/ phrases auxquel(le)s le plugin réagira via les interactions de Jeedom": "mots clés \/ phrases auxquel(le)s le plugin réagira via les interactions de Jeedom", "Panel": "Panel", @@ -143,7 +148,7 @@ "Attention le plugin ne supporte pas les caractères spéciaux (il faut donc se limiter aux chiffres, lettres minuscule\/majuscule": "Attention le plugin ne supporte pas les caractères spéciaux (il faut donc se limiter aux chiffres, lettres minuscule\/majuscule", "Mot de passe": "Mot de passe", "mot de passe pour se connecter à la caméra (si nécessaire": "mot de passe pour se connecter à la caméra (si nécessaire", - "Attention le plugin fait un url_encode pour le nom d'utilisateur et mot de passe obligatoire pour certaine camera mais cela peut poser soucis pour d'autre, si vous avez un soucis essayez sans caractères spéciaux (se limiter aux chiffres, lettres minuscule\/majuscule": "Attention le plugin fait un url_encode pour le nom d'utilisateur et mot de passe obligatoire pour certaine camera mais cela peut poser soucis pour d'autre, si vous avez un soucis essayez sans caractères spéciaux (se limiter aux chiffres, lettres minuscule\/majuscule", + "Attention, le plugin fait un url_encode pour le nom d'utilisateur et mot de passe obligatoire pour certaines cameras mais cela peut poser soucis pour d'autres, si vous avez un souci, essayez sans caractères spéciaux (se limiter aux chiffres, lettres minuscule\/majuscule": "Attention, le plugin fait un url_encode pour le nom d'utilisateur et mot de passe obligatoire pour certaines cameras mais cela peut poser soucis pour d'autres, si vous avez un souci, essayez sans caractères spéciaux (se limiter aux chiffres, lettres minuscule\/majuscule", "URL de snapshot": "URL de snapshot", "URL de \"snapshot\" de la caméra": "URL de \"snapshot\" de la caméra", "Change en fonction des caméras": "Change en fonction des caméras", @@ -155,16 +160,19 @@ "url du flux video de la caméra de type": "url du flux video de la caméra de type", "exemple pour les caméras Foscam": "exemple pour les caméras Foscam", "Stream du flux RTSP": "Stream du flux RTSP", - "si vous etês en mode flux video (URL du flux remplis) alors vous pouvez voir la camera sous forme de flux video au lieu d'image par image": "si vous etês en mode flux video (URL du flux remplis) alors vous pouvez voir la camera sous forme de flux video au lieu d'image par image", - "Attention cette option est très consommatrice de ressources et rend la 1er image très à arriver": "Attention cette option est très consommatrice de ressources et rend la 1er image très à arriver", + "si vous etês en mode flux vidéo (URL du flux remplis), alors vous pouvez voir la caméra sous forme de flux vidéo au lieu d'image par image": "si vous etês en mode flux vidéo (URL du flux remplis), alors vous pouvez voir la caméra sous forme de flux vidéo au lieu d'image par image", + "Attention, cette option est très consommatrice de ressources et rend la 1re image très lente à arriver": "Attention, cette option est très consommatrice de ressources et rend la 1re image très lente à arriver", + "Convertir en x264 le flux RTSP": "Convertir en x264 le flux RTSP", + "si votre caméra est configurée en codec vidéo H265, convertit à la volée en H264": "si votre caméra est configurée en codec vidéo H265, convertit à la volée en H264", + "Attention, cette option est très consommatrice de ressources et augmente le décalage": "Attention, cette option est très consommatrice de ressources et augmente le décalage", "Previsualiser": "Previsualiser", - "permet de voir si jeedom recupere bien le flux video (pensez bien a sauvegarder avant de test pour voir si vos modifications marchent": "permet de voir si jeedom recupere bien le flux video (pensez bien a sauvegarder avant de test pour voir si vos modifications marchent", + "permet de voir si jeedom recupère bien le flux vidéo (pensez bien a sauvegarder avant de test pour voir si vos modifications marchent": "permet de voir si jeedom recupère bien le flux vidéo (pensez bien a sauvegarder avant de test pour voir si vos modifications marchent", "Option flux video": "Option flux video", - "si vous etês en mode flux video (URL du flux remplis) alors vous pouvez passer des parametres suplementaire ici à ffmpeg et avconv (reservé aux experts": "si vous etês en mode flux video (URL du flux remplis) alors vous pouvez passer des parametres suplementaire ici à ffmpeg et avconv (reservé aux experts", + "si vous êtes en mode flux vidéo (URL du flux remplis), alors vous pouvez passer des paramètres supplémentaires ici à ffmpeg et avconv (reservé aux experts": "si vous êtes en mode flux vidéo (URL du flux remplis), alors vous pouvez passer des paramètres supplémentaires ici à ffmpeg et avconv (reservé aux experts", "Modèle": "Modèle", "permet de choisir le modèle de la caméra": "permet de choisir le modèle de la caméra", "Attention": "Attention", - "si vous changez cela écrasera vos paramètres de configuration": "si vous changez cela écrasera vos paramètres de configuration", + "si vous changez, cela écrasera vos paramètres de configuration": "si vous changez, cela écrasera vos paramètres de configuration", "Les paramètres ONVIF": "Les paramètres ONVIF", "Port ONVIF": "Port ONVIF", "le port servant pour onvif": "le port servant pour onvif", @@ -177,7 +185,7 @@ "Il faut renseigner la commande de Stop sur chaque commande de mouvement PTZ dans le champ prévu à cet effet": "Il faut renseigner la commande de Stop sur chaque commande de mouvement PTZ dans le champ prévu à cet effet", "NOTE": "NOTE", "Vous pouvez retrouver": "Vous pouvez retrouver", - "des configuration pour pas mal de camera et donc pouvoir integrer votre camera vous meme à Jeedom si elle n'est pas dans la liste": "des configuration pour pas mal de camera et donc pouvoir integrer votre camera vous meme à Jeedom si elle n'est pas dans la liste", + "des configurations pour pas mal de cameras et donc pouvoir intégrer votre camera vous-même à Jeedom si elle n'est pas dans la liste": "des configurations pour pas mal de cameras et donc pouvoir intégrer votre camera vous-même à Jeedom si elle n'est pas dans la liste", "Image": "Image", "Cette partie vous permet de configurer la qualité de l'image": "Cette partie vous permet de configurer la qualité de l'image", "En effet Jeedom diminue la taille de l'image ou la compresse avant de l'envoyer à votre navigateur": "En effet Jeedom diminue la taille de l'image ou la compresse avant de l'envoyer à votre navigateur", diff --git a/docs/i18n/pt_PT.json b/docs/i18n/pt_PT.json index 5b81ff6..df78ad1 100644 --- a/docs/i18n/pt_PT.json +++ b/docs/i18n/pt_PT.json @@ -2,6 +2,10 @@ "changelog.md": { "Changelog Caméra": "Changelog Camera", "S'il n'y a pas d'information sur la mise à jour, c'est que celle-ci concerne uniquement de la mise à jour de documentation, de traduction ou de texte": "Se não houver informação sobre a atualização, significa que se trata apenas da atualização da documentação, tradução ou texto", + "Correction d'un bug sur l'accès aux enregistrements videos": "Corrigido um bug no acesso às gravações de vídeo", + "Amélioration de la gestion des retours a la ligne dans le widget": "Tratamento aprimorado de quebras de linha no widget", + "24\/01\/2024": "24\/01\/2024", + "Amélioration du widget": "Melhoria de widget", "17\/01\/2024": "17\/01\/2024", "Correction de bug sur le widget": "Correção de bug no widget", "16\/01\/2024": "16\/01\/2024", @@ -103,6 +107,13 @@ "[IMPORTANT]": "[IMPORTANTE]", "*IMPORTANT*": "*IMPORTANTE*", " IMPORTANT*": " IMPORTANTE*", + " LIEN.": " LINK.", + " LIEN?": " LINK?", + "LIEN ": "LINK ", + " LIEN]": " LINK]", + "[LIEN]": "[LINK]", + "*LIEN*": "*LINK*", + " LIEN*": " LINK*", " et.": " e.", " et?": " e?", "et ": "e ", @@ -122,7 +133,7 @@ "Si votre chemin n'est pas dans le chemin d'installation de Jeedom alors vous ne pourrez visualiser les captures dans Jeedom": "Se o seu caminho não estiver no caminho de instalação do Jeedom, você não poderá visualizar as capturas no Jeedom", "Taille maximum du dossier d'enregistrement (Mo": "Tamanho máximo da pasta de gravação (MB", "indique la taille maximum autorisée pour le dossier où les captures sont enregistrées (il est déconseillé d'y toucher": "indica o tamanho máximo autorizado para a pasta onde as capturas são salvas (não é recomendável tocá-lo", - "Si ce quotas est atteint Jeedom supprimera les captures les plus anciennes": "Se essa cota for atingida, o Jeedom excluirá as capturas mais antigas", + "Si ce quota est atteint Jeedom supprimera les captures les plus anciennes": "Se esta cota for atingida, o Jeedom excluirá as capturas mais antigas", "Le plugin caméra doit réagir aux interactions": "O plug-in da câmera deve reagir às interações", "mots clés \/ phrases auxquel(le)s le plugin réagira via les interactions de Jeedom": "palavras-chave \/ frases às quais o plugin reagirá por meio de interações Jeedom", "permet d'afficher le panel (Menu Accueil → Caméra) et d'avoir une vue sur l'ensemble de vos caméras (voir plus bas": "permite que você exiba o painel (Menu inicial → Câmera) e tenha uma visão de todas as suas câmeras (veja abaixo", @@ -145,7 +156,7 @@ "Attention le plugin ne supporte pas les caractères spéciaux (il faut donc se limiter aux chiffres, lettres minuscule\/majuscule": "Observe que o plug-in não suporta caracteres especiais (você deve, portanto, limitar-se a números, letras minúsculas \/ maiúsculas", "Mot de passe": "Senha", "mot de passe pour se connecter à la caméra (si nécessaire": "senha para conectar-se à câmera (se necessário", - "Attention le plugin fait un url_encode pour le nom d'utilisateur et mot de passe obligatoire pour certaine camera mais cela peut poser soucis pour d'autre, si vous avez un soucis essayez sans caractères spéciaux (se limiter aux chiffres, lettres minuscule\/majuscule": "Observe que o plugin cria um url_encode para o nome de usuário e senha necessários para algumas câmeras, mas isso pode causar problemas para outras, se você tiver um problema, tente sem caracteres especiais (limitar-se a números, letras minúsculas \/ maiúsculas", + "Attention, le plugin fait un url_encode pour le nom d'utilisateur et mot de passe obligatoire pour certaines cameras mais cela peut poser soucis pour d'autres, si vous avez un souci, essayez sans caractères spéciaux (se limiter aux chiffres, lettres minuscule\/majuscule": "Observe que o plugin torna obrigatório um url_encode para o nome de usuário e senha para algumas câmeras, mas isso pode causar problemas para outras, se você tiver um problema, tente sem caracteres especiais (limite-se a números, letras minúsculas\/maiúsculas)", "URL de snapshot": "URL do instantâneo", "URL de \"snapshot\" de la caméra": "URL de instantâneo da câmera", "Change en fonction des caméras": "Mude dependendo das câmeras", @@ -157,14 +168,17 @@ "url du flux video de la caméra de type": "digite o URL do stream de vídeo da câmera", "exemple pour les caméras Foscam": "exemplo para câmeras Foscam", "Stream du flux RTSP": "Stream stream RTSP", - "si vous etês en mode flux video (URL du flux remplis) alors vous pouvez voir la camera sous forme de flux video au lieu d'image par image": "se você estiver no modo de stream de vídeo (URL do stream preenchido), você pode ver a câmera como um stream de vídeo em vez de quadro a quadro", - "Attention cette option est très consommatrice de ressources et rend la 1er image très à arriver": "Observe que esta opção consome muitos recursos e faz com que a 1ª imagem chegue muito", - "permet de voir si jeedom recupere bien le flux video (pensez bien a sauvegarder avant de test pour voir si vos modifications marchent": "permite-lhe ver se o jeedom recupera o fluxo de vídeo (lembre-se de guardar antes de testar para ver se as suas modificações funcionam", + "si vous etês en mode flux vidéo (URL du flux remplis), alors vous pouvez voir la caméra sous forme de flux vidéo au lieu d'image par image": "Se você estiver no modo de transmissão de vídeo (URLs de transmissão preenchidos), você poderá visualizar a câmera como uma transmissão de vídeo em vez de quadro a quadro", + "Attention, cette option est très consommatrice de ressources et rend la 1re image très lente à arriver": "Cuidado, esta opção consome muitos recursos e torna a chegada da primeira imagem muito lenta", + "Convertir en x264 le flux RTSP": "Converter fluxo RTSP para x264", + "si votre caméra est configurée en codec vidéo H265, convertit à la volée en H264": "se sua câmera estiver configurada no codec de vídeo H265, converte instantaneamente para H264", + "Attention, cette option est très consommatrice de ressources et augmente le décalage": "Cuidado, esta opção consome muitos recursos e aumenta o lag", + "permet de voir si jeedom recupère bien le flux vidéo (pensez bien a sauvegarder avant de test pour voir si vos modifications marchent": "permite-lhe ver se o jeedom recupera o fluxo de vídeo (lembre-se de guardar antes de testar para ver se as suas modificações funcionam", "Option flux video": "Opção de transmissão de vídeo", - "si vous etês en mode flux video (URL du flux remplis) alors vous pouvez passer des parametres suplementaire ici à ffmpeg et avconv (reservé aux experts": "se você estiver no modo de fluxo de vídeo (URL do fluxo preenchido), você pode passar parâmetros adicionais aqui para ffmpeg e avconv (reservado para especialistas", + "si vous êtes en mode flux vidéo (URL du flux remplis), alors vous pouvez passer des paramètres supplémentaires ici à ffmpeg et avconv (reservé aux experts": "se você estiver no modo de transmissão de vídeo (URLs de transmissão preenchidos), poderá passar parâmetros adicionais aqui para ffmpeg e avconv (reservados para especialistas", "Modèle": "Modelo", "permet de choisir le modèle de la caméra": "permite escolher o modelo da câmera", - "si vous changez cela écrasera vos paramètres de configuration": "se você mudar irá sobrescrever suas configurações", + "si vous changez, cela écrasera vos paramètres de configuration": "se você alterar isso irá sobrescrever suas configurações", "Les paramètres ONVIF": "Configurações ONVIF", "Port ONVIF": "Porta ONVIF", "le port servant pour onvif": "a porta usada para onvif", @@ -176,7 +190,7 @@ "délai avant commande de stop ptz": "tempo antes da ordem de parada Ptz", "Il faut renseigner la commande de Stop sur chaque commande de mouvement PTZ dans le champ prévu à cet effet": "Você deve inserir o comando Parar em cada comando de movimento PTZ no campo fornecido para esse fim", "Vous pouvez retrouver": "Você pode encontrar", - "des configuration pour pas mal de camera et donc pouvoir integrer votre camera vous meme à Jeedom si elle n'est pas dans la liste": "configuração para muitas câmeras e, portanto, ser capaz de integrar sua câmera no Jeedom se ela não estiver na lista", + "des configurations pour pas mal de cameras et donc pouvoir intégrer votre camera vous-même à Jeedom si elle n'est pas dans la liste": "configurações para algumas câmeras e, portanto, ser capaz de integrar sua câmera no Jeedom se ela não estiver na lista", "Cette partie vous permet de configurer la qualité de l'image": "Esta parte permite configurar a qualidade da imagem", "En effet Jeedom diminue la taille de l'image ou la compresse avant de l'envoyer à votre navigateur": "Na verdade, o Jeedom diminui o tamanho da imagem ou a compactação antes de enviá-lo para o seu navegador", "Cela permet de gagner en fluidité des images (car elles sont moins lourdes": "Isso melhora a fluidez das imagens (porque elas são mais claras", diff --git a/docs/pt_PT/changelog.md b/docs/pt_PT/changelog.md index 97553cd..bec9f0e 100644 --- a/docs/pt_PT/changelog.md +++ b/docs/pt_PT/changelog.md @@ -4,6 +4,13 @@ > >Se não houver informação sobre a atualização, significa que se trata apenas da atualização da documentação, tradução ou texto. +- Corrigido um bug no acesso às gravações de vídeo +- Tratamento aprimorado de quebras de linha no widget [LINK](https://github.com/jeedom/plugin-camera/pull/85) + +# 24/01/2024 + +- Melhoria de widget + # 17/01/2024 - Correção de bug no widget diff --git a/docs/pt_PT/index.md b/docs/pt_PT/index.md index 34c3d03..037242d 100644 --- a/docs/pt_PT/index.md +++ b/docs/pt_PT/index.md @@ -9,7 +9,7 @@ Plug-in para criar e gerenciar câmeras wifi (exibição e gravação). Depois de instalar o plugin, você só precisa ativá-lo. Alguns parâmetros devem ser inseridos na configuração do plugin : - **Caminho do registro** : indica o caminho em que o Jeedom deve armazenar as imagens que captura de suas câmeras (não é recomendável tocá-lo). Se o seu caminho não estiver no caminho de instalação do Jeedom, você não poderá visualizar as capturas no Jeedom. -- **Tamanho máximo da pasta de gravação (MB)** : indica o tamanho máximo autorizado para a pasta onde as capturas são salvas (não é recomendável tocá-lo). Se essa cota for atingida, o Jeedom excluirá as capturas mais antigas. +- **Tamanho máximo da pasta de gravação (MB)** : indica o tamanho máximo autorizado para a pasta onde as capturas são salvas (não é recomendável tocá-lo). Se esta cota for atingida, o Jeedom excluirá as capturas mais antigas. - **O plug-in da câmera deve reagir às interações** : palavras-chave / frases às quais o plugin reagirá por meio de interações Jeedom. - **Painel** : permite que você exiba o painel (Menu inicial → Câmera) e tenha uma visão de todas as suas câmeras (veja abaixo). Não se esqueça de ativar o painel na configuração do plugin para acessá-lo mais tarde. @@ -31,13 +31,14 @@ Aqui você tem as principais informações da sua câmera : - **Porta** : a porta à qual conectar a câmera. - **Protocolo** : o protocolo de comunicação da sua câmera (http ou https). - **Nome de Usuário** : nome de usuário para efetuar login na câmera (se necessário). Observe que o plug-in não suporta caracteres especiais (você deve, portanto, limitar-se a números, letras minúsculas / maiúsculas). -- **Senha** : senha para conectar-se à câmera (se necessário).Observe que o plugin cria um url_encode para o nome de usuário e senha necessários para algumas câmeras, mas isso pode causar problemas para outras, se você tiver um problema, tente sem caracteres especiais (limitar-se a números, letras minúsculas / maiúsculas). +- **Senha** : senha para conectar-se à câmera (se necessário). Observe que o plugin torna obrigatório um url_encode para o nome de usuário e senha para algumas câmeras, mas isso pode causar problemas para outras, se você tiver um problema, tente sem caracteres especiais (limite-se a números, letras minúsculas/maiúsculas)). - **URL do instantâneo** : URL de instantâneo da câmera. Mude dependendo das câmeras. Cuidado para não colocar um URL de fluxo sob pena de travar o Jeedom. Você pode adicionar as tags \#username\# e \#password\#, que será substituído automaticamente pelo nome de usuário e senha ao usar este comando. - **URL do feed** : digite o URL do stream de vídeo da câmera ``rtsp://#username#:#password#@#ip#:554/videoMain`` (exemplo para câmeras Foscam). -- **Stream stream RTSP** : se você estiver no modo de stream de vídeo (URL do stream preenchido), você pode ver a câmera como um stream de vídeo em vez de quadro a quadro. Observe que esta opção consome muitos recursos e faz com que a 1ª imagem chegue muito. +- **Stream stream RTSP** : Se você estiver no modo de transmissão de vídeo (URLs de transmissão preenchidos), você poderá visualizar a câmera como uma transmissão de vídeo em vez de quadro a quadro. Cuidado, esta opção consome muitos recursos e torna a chegada da primeira imagem muito lenta. +- **Converter fluxo RTSP para x264** : se sua câmera estiver configurada no codec de vídeo H265, converte instantaneamente para H264. Cuidado, esta opção consome muitos recursos e aumenta o lag. - **Antevisão** : permite-lhe ver se o jeedom recupera o fluxo de vídeo (lembre-se de guardar antes de testar para ver se as suas modificações funcionam) -- **Opção de transmissão de vídeo** : se você estiver no modo de fluxo de vídeo (URL do fluxo preenchido), você pode passar parâmetros adicionais aqui para ffmpeg e avconv (reservado para especialistas) -- **Modelo** : permite escolher o modelo da câmera. Atenção : se você mudar irá sobrescrever suas configurações. +- **Opção de transmissão de vídeo** : se você estiver no modo de transmissão de vídeo (URLs de transmissão preenchidos), poderá passar parâmetros adicionais aqui para ffmpeg e avconv (reservados para especialistas) +- **Modelo** : permite escolher o modelo da câmera. Atenção : se você alterar isso irá sobrescrever suas configurações. Configurações ONVIF : - **Porta ONVIF** : a porta usada para onvif @@ -48,7 +49,7 @@ Configurações ONVIF : > **NOTA** > -> Você pode encontrar [aqui](https://www.ispyconnect.com/cameras) configuração para muitas câmeras e, portanto, ser capaz de integrar sua câmera no Jeedom se ela não estiver na lista +> Você pode encontrar [aqui](https://www.ispyconnect.com/cameras) configurações para algumas câmeras e, portanto, ser capaz de integrar sua câmera no Jeedom se ela não estiver na lista ## Image @@ -157,4 +158,4 @@ Obviamente, antes de criar um comando de tipo de informação na sua câmera >**Quais são as condições para que minha câmera seja compatível com Jeedom (se não estiver na lista de compatibilidade) ?** > -> A única condição é que a câmera tenha um URL que envie de volta uma imagem (bem, uma imagem e não um fluxo de vídeo). +> A única condição é que a câmera tenha um URL que envie de volta uma imagem (bem, uma imagem e não um fluxo de vídeo). \ No newline at end of file diff --git a/plugin_info/info.json b/plugin_info/info.json index 01a92ba..0e79b11 100644 --- a/plugin_info/info.json +++ b/plugin_info/info.json @@ -15,12 +15,15 @@ }, "licence": "AGPL", "author": "Jeedom SAS", - "require": "4.2", + "require": "4.3.1", "category": "security", "display": "panel", "mobile": "panel", "hasOwnDeamon": true, "hasDependency": true, + "whiteListFolders": [ + "data\/records" + ], "changelog": "https:\/\/doc.jeedom.com\/#language#\/plugins\/security\/camera\/changelog", "documentation": "https:\/\/doc.jeedom.com\/#language#\/plugins\/security\/camera\/", "language": [ @@ -47,4 +50,4 @@ ], "changelog_beta": "https:\/\/doc.jeedom.com\/#language#\/plugins\/security\/camera\/beta\/changelog", "documentation_beta": "https:\/\/doc.jeedom.com\/#language#\/plugins\/security\/camera\/beta" -} \ No newline at end of file +} diff --git a/plugin_info/install.php b/plugin_info/install.php index 2f1281f..d32710c 100644 --- a/plugin_info/install.php +++ b/plugin_info/install.php @@ -1,76 +1,78 @@ -. -*/ - -require_once dirname(__FILE__) . '/../../../core/php/core.inc.php'; - -function camera_install() { - $cron = cron::byClassAndFunction('camera', 'pull'); - if (!is_object($cron)) { - $cron = new cron(); - $cron->setClass('camera'); - $cron->setFunction('pull'); - $cron->setEnable(1); - $cron->setDeamon(1); - $cron->setDeamonSleepTime(1); - $cron->setSchedule('* * * * *'); - $cron->setTimeout(1440); - $cron->save(); - } - if(!com_shell::commandExists('avconv')){ - config::save('rtsp::engine','ffmpeg','camera'); - } - exec(system::getCmdSudo().' chmod +x '.__DIR__.'/../3rdparty/rtsp-to-hls.sh'); - jeedom::getApiKey('camera'); -} - -function camera_update() { - $cron = cron::byClassAndFunction('camera', 'pull'); - if (!is_object($cron)) { - $cron = new cron(); - $cron->setClass('camera'); - $cron->setFunction('pull'); - $cron->setEnable(1); - $cron->setDeamon(1); - $cron->setDeamonSleepTime(1); - $cron->setSchedule('* * * * *'); - $cron->setTimeout(1440); - $cron->save(); - } - foreach (camera::byType('camera') as $camera) { - $dir = calculPath(config::byKey('recordDir', 'camera')) . '/' . $camera->getId(); - foreach (ls($dir, '*') as $file) { - if ($file == 'movie_temp/' || strpos($file, '.mkv')) { - continue; - } - rename($dir.'/'.$file, $dir.'/'.str_replace(':','-', $file)); - } - $camera->save(); - } - if(!com_shell::commandExists('avconv')){ - config::save('rtsp::engine','ffmpeg','camera'); - } - exec(system::getCmdSudo().' chmod +x '.__DIR__.'/../3rdparty/rtsp-to-hls.sh'); - jeedom::getApiKey('camera'); -} - -function camera_remove() { - $cron = cron::byClassAndFunction('camera', 'pull'); - if (is_object($cron)) { - $cron->remove(); - } -} +. +*/ + +require_once dirname(__FILE__) . '/../../../core/php/core.inc.php'; + +function camera_install() { + $cron = cron::byClassAndFunction('camera', 'pull'); + if (!is_object($cron)) { + $cron = new cron(); + $cron->setClass('camera'); + $cron->setFunction('pull'); + $cron->setEnable(1); + $cron->setDeamon(1); + $cron->setDeamonSleepTime(1); + $cron->setSchedule('* * * * *'); + $cron->setTimeout(1440); + $cron->save(); + } + if(!com_shell::commandExists('avconv')){ + config::save('rtsp::engine','ffmpeg','camera'); + } + exec(system::getCmdSudo().' chmod +x '.__DIR__.'/../3rdparty/rtsp-to-hls-x264.sh'); + exec(system::getCmdSudo().' chmod +x '.__DIR__.'/../3rdparty/rtsp-to-hls-copy.sh'); + jeedom::getApiKey('camera'); +} + +function camera_update() { + $cron = cron::byClassAndFunction('camera', 'pull'); + if (!is_object($cron)) { + $cron = new cron(); + $cron->setClass('camera'); + $cron->setFunction('pull'); + $cron->setEnable(1); + $cron->setDeamon(1); + $cron->setDeamonSleepTime(1); + $cron->setSchedule('* * * * *'); + $cron->setTimeout(1440); + $cron->save(); + } + foreach (camera::byType('camera') as $camera) { + $dir = calculPath(config::byKey('recordDir', 'camera')) . '/' . $camera->getId(); + foreach (ls($dir, '*') as $file) { + if ($file == 'movie_temp/' || strpos($file, '.mkv')) { + continue; + } + rename($dir.'/'.$file, $dir.'/'.str_replace(':','-', $file)); + } + $camera->save(); + } + if(!com_shell::commandExists('avconv')){ + config::save('rtsp::engine','ffmpeg','camera'); + } + exec(system::getCmdSudo().' chmod +x '.__DIR__.'/../3rdparty/rtsp-to-hls-x264.sh'); + exec(system::getCmdSudo().' chmod +x '.__DIR__.'/../3rdparty/rtsp-to-hls-copy.sh'); + jeedom::getApiKey('camera'); +} + +function camera_remove() { + $cron = cron::byClassAndFunction('camera', 'pull'); + if (is_object($cron)) { + $cron->remove(); + } +} \ No newline at end of file