mrlt8 / docker-wyze-bridge
- понедельник, 9 августа 2021 г. в 00:28:40
RTMP/RTSP/HLS bridge for Wyze cams in a docker container
Docker container to expose a local RTMP, RTSP, and HLS stream for all your Wyze cameras including v3. No Third-party or special firmware required.
Based on @noelhibbard's script with kroo/wyzecam, and aler9/rtsp-simple-server.
Should work on most x64 systems as well as on some arm-based systems like the Raspberry Pi.
See here for instructions to run on arm.
Latest version of the Wyze firmware seems to cause connection issues which will result in the error:
IOTC_ER_CAN_NOT_FIND_DEVICE
AV_ER_EXCEED_MAX_CHANNEL
)FFMPEG_CMD_CAM_NAME
FFMPEG_FLAG
FFMPEG_FLAG_CAM_NAME
IGNORE_OFFLINE
environment option to ignore offline cameras until the container restarts.Use your Wyze credentials and run:
docker run -p 1935:1935 -p 8554:8554 -p 8888:8888 -e WYZE_EMAIL= -e WYZE_PASSWORD= mrlt8/wyze-bridge
or
git clone https://github.com/mrlt8/docker-wyze-bridge.git
cd docker-wyze-bridge
cp docker-compose.sample.yml docker-compose.yml
docker-compose.yml
with your wyze credentialsdocker-compose up --build
Once you're happy with your config you can use docker-compose up -d
to run it in detached mode.
camera-nickname
is the name of the camera set in the Wyze app and are converted to lower case with hyphens in place of spaces.
e.g. 'Front Door' would be /front-door
rtmp://localhost:1935/camera-nickname
rtsp://localhost:8554/camera-nickname
http://localhost:8888/camera-nickname/stream.m3u8
http://localhost:8888/camera-nickname
The default option will automatically create a stream for all the cameras on your account, but you can use the following environment options in your docker-compose.yml
to filter the cameras.
All options are cAsE-InSensiTive, and take single or multiple comma separated values.
environment:
..
- FILTER_NAMES=Front Door, Driveway, porch cam
- FILTER_MACS=00:aA:22:33:44:55, Aa22334455bB
- FILTER_MODEL=WYZEC1-JZ
- FILTER_MODEL=V2, v3, Pan
You can reverse any of these whitelists into blacklists by adding block, blacklist, exclude, ignore, or reverse to FILTER_MODE
.
environment:
..
- FILTER_NAMES=Bedroom
- FILTER_MODE=BLOCK
Two-factor authentication ("Two-Step Verification" in the wyze app) is supported and will automatically be detected, however additional steps are required to enter your verification code.
/tokens/mfa_token
:docker exec -it wyze-bridge sh -c 'echo "123456" > /tokens/mfa_token'
/tokens/
locally and add your verification code to a new file mfa_token
:volumes:
- ./tokens:/tokens/
The default configuration will use the x64 tutk library, however, you can edit your docker-compose.yml
to use the 32-bit arm library by setting dockerfile
as Dockerfile.arm
:
build:
context: ./app
dockerfile: Dockerfile.arm
environment:
..
Alternatively, you can pull a pre-built image using:
image: mrlt8/wyze-bridge:latest
environment: ..
Like the wyze app, the tutk library will attempt to stream directly from the camera when on the same LAN as the camera in "LAN mode" or relay the stream via the cloud in "relay mode".
LAN mode is more ideal as all streaming will be local and won't use additional bandwidth.
You can restrict streaming to LAN only by adding the LAN_ONLY
environment variable:
environment:
..
- LAN_ONLY=True
Bitrate and resolution of the stream from the wyze camera can be adjusted with - QUALITY=HD120
.
SD
(640x360 cams/480x640 doorbell) or HD
(1920x1080 cam/1296x1728 doorbell). Default - HD.environment:
..
- QUALITY=SD60
You can pass a custom command to FFmpeg by using FFMPEG_CMD
in your docker-compose.yml:
environment:
..
- FFMPEG_CMD=-f h264 -i - -vcodec copy -f flv rtmp://rtsp-server:1935/
where CAM_NAME
is the camera name in UPPERCASE and _
in place of spaces and hyphens:
- FFMPEG_CMD_CAM_NAME=ffmpeg -f h264 -i - -vcodec copy -f flv rtmp://rtsp-server:1935/
Additional info:
ffmpeg
command is implied and is optional.rtsp-simple-server options can be customized as an environment variable in your docker-compose.yml by prefixing RTSP_
to the UPPERCASE parameter.
e.g. use - RTSP_RTSPADDRESS=:8555
to overwrite the default rtspAddress
.
or - RTSP_PATHS_ALL_READUSER=123
to customize a path specific option like paths: all: readuser:123
environment options:
- IGNORE_OFFLINE=true
Ignore ofline cameras until container restarts
- DEBUG_LEVEL=
Adjust the level of upstream logging
- RTSP_LOGLEVEL=
Adjust the verbosity of rtsp-simple-server; available values are "warn", "info", "debug".
- DEBUG_FFMPEG=True
Enable additional logging from FFmpeg
- FRESH_DATA=True
Remove local cache and pull new data from wyze servers.