docker-wyze-bridge
docker-wyze-bridge copied to clipboard
Possibility of 2 streams per camera? 1080P/360P
I have tried wyze-bridge in the past and in my experience the streams were rock solid in frigate - I never seemed to get stream errors. However, using a 1080P RTSP stream for detection in frigate is very CPU intensive, especially when having 5-6 cameras. In recent weeks I found a project called wz_mini_hacks (https://github.com/gtxaspec/wz_mini_hacks) which creates both 1080P and 360P RTSP streams. But the 360P stream still causes occasional errors in frigate detection, and the 1080P stream (which I use for display and recording) tends to get a lot of tearing.
Which leads up to my real question. Is there any chance for an enhacement whereby wyze-bridge could provide two RTSP streams per camera (360P and 1080P)?
From what I can tell, it seems like the tutk av server on the camera is only outputting one stream to all av channels/clients - that's why changing the quality on the bridge or app will cause the other to change as well.
I don't have an android device to test with, but I believe tinycam (which I believe is tutk based like the bridge) also suffers from the same limitation where you can only view one type of stream at a time.
One potential solution to get two different streams on vanilla firmware would be to use the WebRTC stream (what the "web view" is currently using). Unfortunately, it doesn't seems like WebRTC is supported in FFmpeg or rtsp-simpl-server, so we'd need to find a way to add support for that.
Fwiw, I believe this is why wyze cams do not pass apple certification. I recall something about this mentioned by the wyze project mgr when we were beta testing the orig doorbell and had asked if it might be approved for hksv. Wyze applied for a waiver but it was denied.
Just noticed that the newer firmware seems to have multiple streams - i.e, switching the quality in the app doesn't seem to affect the stream we're using in the bridge.
Will have to investigate further.
Just noticed that the newer firmware seems to have multiple streams - i.e, switching the quality in the app doesn't seem to affect the stream we're using in the bridge.
Will have to investigate further.
Just piling on to say "very interested" in this feature!
Just noticed that the newer firmware seems to have multiple streams - i.e, switching the quality in the app doesn't seem to affect the stream we're using in the bridge.
Will have to investigate further.
I am also interested in this feature. The secondary 360p stream would greatly reduce CPU usage for displaying the live feed and also makes it less taxing to pass to frigate for ai detection.
Throwing my hat in here as well.
would be very nice to have.
Just wondering if you have found out whether or not, with the new firmware, this may be a possibility in the future.
Also interested in this!
I'd love to have multiple streams/quality per camera. I've recently started using Frigate and would love to have different qualities per camera for detection and recording.
Quick update on this. Can confirm that this should be possible. It will require some restructuring as the extra stream will need to be in another process as threading seems to cause the camera to drop one of the connections.
If a sub-stream were to be added I'm assuming that most people would want to have the 360p stream constant with the HD stream on demand?
That is great news! Unless the 2nd stream could be configurable, 360Pp would be perfect. That seems to work best for motion/object detection in frigate. 1080p is too cpu intensive, and I have not been able to try 720p. Thanks again for all your efforts.
I am excited for this! And yes for the constant 360p stream with the HD stream on demand! Thank you for work!
If it helps, I think I was able to do this already.
On my Raspberry, I opened Wyze Bridge and set the HD feed to HD255
Then I shut down Wyze Bridge on my Raspberry, and used my main PC (Home Assistant) to reopen the feeds at SD30
It seems that the Wyze Bridge stream is now SD30, but the on-device recording remains at HD255.
Bit of a nuisance but...
@tbrausch I believe the cams only has two resolutions: 360p and 1080p (2k on the pros).
@thatdaveguy1 Can you run both bridges at the same time - one with SD30 and the other with HD255?
@tbrausch I believe the cams only has two resolutions: 360p and 1080p (2k on the pros).
@thatdaveguy1 Can you run both bridges at the same time - one with SD30 and the other with HD255?
Tried it. My WiFi is kind of flaky - even at SD - so it's difficult to say how it worked. They seemed to be in a war for the limited WiFi capacity so both feeds dropped constantly
But, maybe? It might work? Somebody with better WiFi might be able to test
If they both dropped, then it could be that your firmware doesn't support multiple streams so it just shares the one and ends up switching back and forth.
Another way to test would be to start the bridge with one stream and switch the quality in the app to see if it affects the stream in the bridge.
Can confirm you can have 2 bridges running at the same time and get the two different feeds. (Im using 2 VM's each running homeassistant)
@warmon6 Can you confirm the FW version? it seems to only work on some versions.
For the cam v3 in the image, It running on the older 4.36.10.2700 firmware.
Also tested on my 2nd cam v3 and it's also working as well. it's running on the latest 4.36.10.3406 firmware.
Pushed a new substream branch with support for sub-streams.
Can enable a sub stream for a camera with the ENV - SUBSTREAM_<CAM-NAME>
.
Additional/higher-res stream will be available on cam-name-2
.
minimum FW support for multi-stream seems to be:
{
"WYZEC1-JZ": "4.9.9",
"WYZE_CAKP2JFUS": "4.36.10",
"HL_CAM3P": "4.58.0"
}
Additional FW versions and cameras would be appreciated.
All streams are now on-demand unless recording is enabled.
This ended up being a major re-write of the bridge, so some features may be missing, broken, or deprecated.
Has anyone had a chance to test out the sub stream branch yet?
I currenty use the HA Addon. I will try to get it up and running in Docker in the next couple days.
On Tue, Feb 7, 2023 at 10:17 AM mrlt8 @.***> wrote:
Has anyone had a chance to test out the sub stream branch yet?
— Reply to this email directly, view it on GitHub https://github.com/mrlt8/docker-wyze-bridge/issues/537#issuecomment-1420947300, or unsubscribe https://github.com/notifications/unsubscribe-auth/AKZQ3VEARUMN7XI5QGDYZNLWWJRRXANCNFSM6AAAAAAQF7J22M . You are receiving this because you were mentioned.Message ID: @.***>
I am trying to figure out how to run docker compose in windows. I finally got it running under latest, but when I change the branch to substream I get the error:
C:\Users\xxxxx\WyzeBridge>docker compose up -d
[+] Running 0/1
- wyze-bridge Error 0.7s
Error response from daemon: manifest for mrlt8/wyze-bridge:substream not found: manifest unknown: manifest unknown
This is my docker compose file:
services:
wyze-bridge:
container_name: wyze-bridge
restart: unless-stopped
image: mrlt8/wyze-bridge:substream
ports:
- 1935:1935 # RTMP
- 8554:8554 # RTSP
- 8888:8888 # HLS
- 5000:5000 # WEB-UI
environment:
- [email protected] # Replace with wyze email
- WYZE_PASSWORD=xxxxxxxxx # Replace with wyze password
- FILTER_NAMES=porch, street, patio, spare
- NET_MODE=LAN
- QUALITY=HD120
- DEBUG_LEVEL=debug
Am I doing this incorrectly? I was able to change to dev and it worked, but not substream. Thanks
Can enable a sub stream for a camera with the ENV
- SUBSTREAM_<CAM-NAME>
.
Could you please elaborate on this? Is this a boolean to add to the docker compose?
I've built the container, had to 2-factor without the webui, and added this to my compose but it doesn't seem to be doing anything, I'm sure I'm doing it wrong.
environment: - SUBSTREAM_FRONT-PORCH-CAM=true
EDIT: Just realized my (updated) cameras are not on 4.36.10, will test again when I've manually updated to this version.
@tbrausch images aren't available for the sub stream branch yet. I'll try to move it over to the dev branch for easier testing.
@dgrzjohn is 2fa in the webUI broken? I'll have to look into it.
Couple of updates:
- Substream has been moved to the DEV branch (
image: mrlt8/wyze-bridge:dev
) - Fixed 2FA code in WebUI
- Added back HA compatibility to dev branch: https://github.com/mrlt8/edge-repo
Can enable a sub stream in HA under CAM_OPTIONS:
- CAM_NAME: front_door
SUBSTREAM: true
Note: must use underscore _
in place of -
at least for now.
I was able to get the DEV branch up and running successfully, however I was not able to access both streams. The LORES stream seemed to work fine (using VLC to display), but the HIRES stream did not. In fact, the WEBUI was not even able to display a snapshot of the HIRES stream. As you can see in the log, it starts the "spare" stream correctly. However, if I try to display spare-2 in VLC, it doesn't even show an error or any response at all in the log.
version: '2.4'
services:
wyze-bridge:
container_name: wyze-bridge-dev
restart: unless-stopped
image: mrlt8/wyze-bridge:dev
ports:
- 1935:1935 # RTMP
- 8554:8554 # RTSP
- 8888:8888 # HLS
- 5000:5000 # WEB-UI
environment:
- [email protected] # Replace with wyze email
- WYZE_PASSWORD=xxxxxxxxxxx # Replace with wyze password
- FILTER_NAMES=spare, lr
- NET_MODE=LAN
- QUALITY=HD120
- DEBUG_LEVEL=debug
- SUBSTREAM_SPARE=true
This log displays the results of trying to display spare, and then spare-2 in VLC. Then when I try to display spare again, it does not work.
2023-02-11 07:58:46 2023/02/11 12:58:46 [WyzeBridge][INFO][WyzeBridge] 🚀 STARTING DOCKER-WYZE-BRIDGE v1.11.7
2023-02-11 07:58:46
2023-02-11 07:58:46 2023/02/11 12:58:46 [WyzeBridge][INFO][WyzeBridge] 📚 Using 'auth' from local cache...
2023-02-11 07:58:46 * Serving Flask app 'frontend'
2023-02-11 07:58:46 2023/02/11 12:58:46 [WyzeBridge][INFO][WyzeBridge] 📚 Using 'user' from local cache...
2023-02-11 07:58:46 * Debug mode: off
2023-02-11 07:58:46 2023/02/11 12:58:46 [WyzeBridge][INFO][WyzeBridge] 📚 Using 'cameras' from local cache...
2023-02-11 07:58:46 2023/02/11 12:58:46 [WyzeBridge][INFO][WyzeBridge] 🪄 WHITELIST MODE ON [2/7]
2023-02-11 07:58:46 2023/02/11 12:58:46 [py.warnings][WARNING][WyzeBridge] WARNING: unclosed <socket.socket fd=3, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('0.0.0.0', 0)>
2023-02-11 07:58:46 2023/02/11 12:58:46 [werkzeug][INFO][WyzeBridge] WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
2023-02-11 07:58:46 * Running on all addresses (0.0.0.0)
2023-02-11 07:58:46 * Running on http://127.0.0.1:5000
2023-02-11 07:58:46 * Running on http://172.19.0.2:5000
2023-02-11 07:58:46 2023/02/11 12:58:46 [werkzeug][INFO][WyzeBridge] Press CTRL+C to quit
2023-02-11 07:58:46 2023/02/11 12:58:46 [WyzeBridge][INFO][WyzeBridge] Starting rtsp-simple-server v0.21.2
2023-02-11 07:58:46 2023/02/11 12:58:46 [WyzeBridge][INFO][WyzeBridge] 🎬 Starting 3 streams
2023-02-11 07:59:22 2023/02/11 12:59:22 [WyzeBridge][INFO][WyzeBridge] 🎉 Connecting to WyzeCam V3 - Spare on 192.168.1.162
2023-02-11 07:59:22 2023/02/11 12:59:22 [werkzeug][INFO][WyzeBridge] 127.0.0.1 - - [11/Feb/2023 12:59:22] "GET /api/spare/start HTTP/0.9" 200 -
2023-02-11 07:59:22 2023/02/11 12:59:22 [wyzecam.iotc][DEBUG][spare] Connect via IOTC_Connect_ByUIDEx
2023-02-11 07:59:23 2023/02/11 12:59:23 [wyzecam.iotc][INFO][spare] AV Client Start: chan_id=0 expected_chan=0
2023-02-11 07:59:23 2023/02/11 12:59:23 [wyzecam.tutk.tutk_ioctl_mux][DEBUG][spare] Now listening on channel id 0
2023-02-11 07:59:23 2023/02/11 12:59:23 [wyzecam.tutk.tutk_ioctl_mux][DEBUG][spare] SEND <K10000ConnectRequest code=10000 resp_code=10001> <TutkWyzeProtocolHeader prefix=b'HL' protocol=1 code=10000 txt_len=0> b''
2023-02-11 07:59:23 2023/02/11 12:59:23 [wyzecam.tutk.tutk_ioctl_mux][DEBUG][spare] RECV <TutkWyzeProtocolHeader prefix=b'HL' protocol=36 code=10001 txt_len=17>: b'\x03\xdd\x01\x88c\x15\x05{\r\xca\x7f$\xd9\xad[\xeb\x82'
2023-02-11 07:59:23 2023/02/11 12:59:23 [wyzecam.tutk.tutk_protocol][DEBUG][spare] Sending response: <K10008ConnectUserAuth code=10008 resp_code=10009>
2023-02-11 07:59:23 2023/02/11 12:59:23 [wyzecam.tutk.tutk_ioctl_mux][DEBUG][spare] SEND <K10008ConnectUserAuth code=10008 resp_code=10009> <TutkWyzeProtocolHeader prefix=b'HL' protocol=1 code=10008 txt_len=29> b'\x91@\xc2wQ\x88Y7\xa64ROv\xb4\x1f296e4\x01\x00\x06152457'
2023-02-11 07:59:24 2023/02/11 12:59:24 [wyzecam.tutk.tutk_ioctl_mux][DEBUG][spare] RECV <TutkWyzeProtocolHeader prefix=b'HL' protocol=36 code=10009 txt_len=741>: b'{"connectionRes":"1","cameraInfo":{"audioParm":{"sampleRate":"16000"},"videoParm":{"type":"H264","bitRate":"120","resolution":"2","fps":"20","horizontalFlip":"1","verticalFlip":"1","logo":"2","time":"1"},"settingParm":{"stateVision":"2","nightVision":"3","osd":"1","logSd":"1","logUdisk":"1", "telnet":"2","tz":"-5"},"basicInfo":{"firmware":"4.36.10.3836","type":"camera","hardware":"0.0.0.0","model":"WYZE_CAKP2JFUS","mac":"2CAA8EEFD44C","wifidb":"99"},"channelResquestResult":{"video":"1","audio":"0"},"recordType":{"type":"3"},"sdParm":{"status":"1","capacity":"30514","free":"30500","detail":"0"},"uDiskParm":{"status":"2","capacity":"0","free":"0"},"apartalarmParm":{"type":"0","startX":"25","longX":"50","startY":"25","heightY":"50"}}}'
2023-02-11 07:59:24 2023/02/11 12:59:24 [wyzecam.tutk.tutk_ioctl_mux][DEBUG][spare] SEND <K10056SetResolvingBit code=10056 resp_code=10057> <TutkWyzeProtocolHeader prefix=b'HL' protocol=1 code=10056 txt_len=3> b'\x02\x1e\x00'
2023-02-11 07:59:24 2023/02/11 12:59:24 [wyzecam.tutk.tutk_ioctl_mux][DEBUG][spare] RECV <TutkWyzeProtocolHeader prefix=b'HL' protocol=36 code=10057 txt_len=1>: b'\x01'
2023-02-11 07:59:25 2023/02/11 12:59:25 [wyzecam.tutk.tutk_ioctl_mux][DEBUG][spare] No longer listening on channel id 0
2023-02-11 07:59:25 2023/02/11 12:59:25 [WyzeBridge][INFO][spare] [videoParm] {'type': 'H264', 'bitRate': '120', 'resolution': '2', 'fps': '20', 'horizontalFlip': '1', 'verticalFlip': '1', 'logo': '2', 'time': '1'}
2023-02-11 07:59:25 2023/02/11 12:59:25 [WyzeBridge][INFO][spare] 📡 Getting 30kb/s SD stream (H264/20fps) via LAN mode (WiFi: 99%) FW: 4.36.10.3836 🔒 (DTLS) (2/3)
2023-02-11 07:59:26 2023/02/11 12:59:26 [RTSP][SPARE] ✅ '/spare' stream is UP! (3/3)
2023-02-11 07:59:26 2023/02/11 12:59:26 [RTSP][SPARE] 📖 New client reading
2023-02-11 07:59:37 2023/02/11 12:59:37 [RTSP][SPARE] 📕 Client stopped reading
2023-02-11 07:59:47 2023/02/11 12:59:47 [RTSP][SPARE] ❌ '/spare' stream is down
2023-02-11 07:59:48 [tee @ 0x55625bf0cd40] All tee outputs failed.
2023-02-11 07:59:48 av_interleaved_write_frame(): Broken pipe
2023-02-11 07:59:52 2023/02/11 12:59:52 [WyzeBridge][INFO][spare] FFMPEG stopped
2023-02-11 07:59:52 2023/02/11 12:59:52 [WyzeBridge][WARNING][WyzeBridge] ⏰ Timedout connecting to Spare.
2023-02-11 07:59:59 2023/02/11 12:59:59 [WyzeBridge][INFO][WyzeBridge] 🎉 Connecting to WyzeCam V3 - Spare on 192.168.1.162
2023-02-11 07:59:59 2023/02/11 12:59:59 [werkzeug][INFO][WyzeBridge] 127.0.0.1 - - [11/Feb/2023 12:59:59] "GET /api/spare/start HTTP/0.9" 200 -
2023-02-11 07:59:59 2023/02/11 12:59:59 [wyzecam.iotc][DEBUG][spare] Connect via IOTC_Connect_ByUIDEx
2023-02-11 08:00:19 2023/02/11 13:00:19 [WyzeBridge][WARNING][WyzeBridge] ⏰ Timedout connecting to Spare.
This log shows the results of trying to open the WEBUI. Notice the errors when trying to retrieve spare-2
2023-02-11 07:44:17 2023/02/11 12:44:17 [WyzeBridge][INFO][WyzeBridge] 🚀 STARTING DOCKER-WYZE-BRIDGE v1.11.7
2023-02-11 07:44:17
2023-02-11 07:44:17 2023/02/11 12:44:17 [WyzeBridge][INFO][WyzeBridge] 📚 Using 'auth' from local cache...
2023-02-11 07:44:17 * Serving Flask app 'frontend'
2023-02-11 07:44:17 * Debug mode: off
2023-02-11 07:44:17 2023/02/11 12:44:17 [WyzeBridge][INFO][WyzeBridge] 📚 Using 'user' from local cache...
2023-02-11 07:44:17 2023/02/11 12:44:17 [py.warnings][WARNING][WyzeBridge] WARNING: unclosed <socket.socket fd=5, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('0.0.0.0', 0)>
2023-02-11 07:44:17 2023/02/11 12:44:17 [WyzeBridge][INFO][WyzeBridge] 📚 Using 'cameras' from local cache...
2023-02-11 07:44:17 2023/02/11 12:44:17 [WyzeBridge][INFO][WyzeBridge] 🪄 WHITELIST MODE ON [2/7]
2023-02-11 07:44:17 2023/02/11 12:44:17 [werkzeug][INFO][WyzeBridge] WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
2023-02-11 07:44:17 * Running on all addresses (0.0.0.0)
2023-02-11 07:44:17 * Running on http://127.0.0.1:5000
2023-02-11 07:44:17 * Running on http://172.19.0.2:5000
2023-02-11 07:44:17 2023/02/11 12:44:17 [werkzeug][INFO][WyzeBridge] Press CTRL+C to quit
2023-02-11 07:44:17 2023/02/11 12:44:17 [WyzeBridge][INFO][WyzeBridge] Starting rtsp-simple-server v0.21.2
2023-02-11 07:44:17 2023/02/11 12:44:17 [WyzeBridge][INFO][WyzeBridge] 🎬 Starting 3 streams
2023-02-11 07:44:20 2023/02/11 12:44:20 [werkzeug][INFO][WyzeBridge] 172.19.0.1 - - [11/Feb/2023 12:44:20] "GET / HTTP/1.1" 200 -
2023-02-11 07:44:20 2023/02/11 12:44:20 [werkzeug][INFO][WyzeBridge] 172.19.0.1 - - [11/Feb/2023 12:44:20] "GET /static/site.css HTTP/1.1" 304 -
2023-02-11 07:44:20 2023/02/11 12:44:20 [werkzeug][INFO][WyzeBridge] 172.19.0.1 - - [11/Feb/2023 12:44:20] "GET /static/site.js HTTP/1.1" 304 -
2023-02-11 07:44:20 2023/02/11 12:44:20 [werkzeug][INFO][WyzeBridge] 172.19.0.1 - - [11/Feb/2023 12:44:20] "GET /img/lr.jpg HTTP/1.1" 304 -
2023-02-11 07:44:20 2023/02/11 12:44:20 [werkzeug][INFO][WyzeBridge] 172.19.0.1 - - [11/Feb/2023 12:44:20] "GET /img/spare.jpg HTTP/1.1" 304 -
2023-02-11 07:44:20 2023/02/11 12:44:20 [werkzeug][INFO][WyzeBridge] 172.19.0.1 - - [11/Feb/2023 12:44:20] "GET /static/loading.svg HTTP/1.1" 304 -
2023-02-11 07:44:20 2023/02/11 12:44:20 [werkzeug][INFO][WyzeBridge] 172.19.0.1 - - [11/Feb/2023 12:44:20] "GET /img/lr.jpg HTTP/1.1" 304 -
2023-02-11 07:44:20 2023/02/11 12:44:20 [werkzeug][INFO][WyzeBridge] 172.19.0.1 - - [11/Feb/2023 12:44:20] "GET /img/spare.jpg HTTP/1.1" 304 -
2023-02-11 07:44:20 2023/02/11 12:44:20 [werkzeug][INFO][WyzeBridge] 172.19.0.1 - - [11/Feb/2023 12:44:20] "GET /api/sse_status HTTP/1.1" 200 -
2023-02-11 07:44:20 2023/02/11 12:44:20 [werkzeug][INFO][WyzeBridge] 172.19.0.1 - - [11/Feb/2023 12:44:20] "GET /img/lr.jpg HTTP/1.1" 304 -
2023-02-11 07:44:20 2023/02/11 12:44:20 [werkzeug][INFO][WyzeBridge] 172.19.0.1 - - [11/Feb/2023 12:44:20] "GET /img/spare.jpg HTTP/1.1" 304 -
2023-02-11 07:44:20 2023/02/11 12:44:20 [werkzeug][INFO][WyzeBridge] 172.19.0.1 - - [11/Feb/2023 12:44:20] "GET /img/spare-2.jpg HTTP/1.1" 404 -
2023-02-11 07:44:21 2023/02/11 12:44:21 [werkzeug][INFO][WyzeBridge] 172.19.0.1 - - [11/Feb/2023 12:44:21] "GET /img/spare-2.jpg HTTP/1.1" 404 -
Thanks @tbrausch! It seems like the secondary stream wasn't being added as on-demand in rtsp-simple-server.
Should be fixed in the latest push!
Referencing the following log: 10:51:19 - Start viewing spare stream in VLC - OK 10:51:44 - Start viewing spare-2 in another instance of VLC - OK (but LORES seems to be 1-2 seconds behind HIRES) 10:53:01 - Hit pause on VLC stream spare-2 - OK 10:53:18 - Resumed spare-2 VLC - OK 10:54:26 - Closed VLC app displaying spare-2 After this I can no longer start spare-2, but I can close and reopen spare. So it seems that the LORES stream recovers gracefully after closing, but the HIRES stream does not.
Let me know if you want me to try something else.
2023-02-11 10:51:00 2023/02/11 15:51:00 [WyzeBridge][INFO][WyzeBridge] 🚀 STARTING DOCKER-WYZE-BRIDGE v1.11.7
2023-02-11 10:51:00
2023-02-11 10:51:00 2023/02/11 15:51:00 [WyzeBridge][INFO][WyzeBridge] 📚 Using 'auth' from local cache...
2023-02-11 10:51:00 2023/02/11 15:51:00 [WyzeBridge][INFO][WyzeBridge] 📚 Using 'user' from local cache...
2023-02-11 10:51:00 * Serving Flask app 'frontend'
2023-02-11 10:51:00 * Debug mode: off
2023-02-11 10:51:00 2023/02/11 15:51:00 [WyzeBridge][INFO][WyzeBridge] 📚 Using 'cameras' from local cache...
2023-02-11 10:51:00 2023/02/11 15:51:00 [WyzeBridge][INFO][WyzeBridge] 🪄 WHITELIST MODE ON [2/7]
2023-02-11 10:51:00 2023/02/11 15:51:00 [py.warnings][WARNING][WyzeBridge] WARNING: unclosed <socket.socket fd=5, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('0.0.0.0', 0)>
2023-02-11 10:51:00 2023/02/11 15:51:00 [werkzeug][INFO][WyzeBridge] WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
2023-02-11 10:51:00 * Running on all addresses (0.0.0.0)
2023-02-11 10:51:00 * Running on http://127.0.0.1:5000
2023-02-11 10:51:00 * Running on http://172.20.0.2:5000
2023-02-11 10:51:00 2023/02/11 15:51:00 [werkzeug][INFO][WyzeBridge] Press CTRL+C to quit
2023-02-11 10:51:00 2023/02/11 15:51:00 [WyzeBridge][INFO][WyzeBridge] Starting rtsp-simple-server v0.21.2
2023-02-11 10:51:00 2023/02/11 15:51:00 [WyzeBridge][INFO][WyzeBridge] 🎬 Starting 3 streams
2023-02-11 10:51:19 2023/02/11 15:51:19 [WyzeBridge][INFO][WyzeBridge] 🎉 Connecting to WyzeCam V3 - Spare on 192.168.1.162
2023-02-11 10:51:20 2023/02/11 15:51:20 [werkzeug][INFO][WyzeBridge] 127.0.0.1 - - [11/Feb/2023 15:51:20] "GET /api/spare/start HTTP/0.9" 200 -
2023-02-11 10:51:20 2023/02/11 15:51:20 [wyzecam.iotc][DEBUG][spare] Connect via IOTC_Connect_ByUIDEx
2023-02-11 10:51:20 2023/02/11 15:51:20 [wyzecam.iotc][INFO][spare] AV Client Start: chan_id=0 expected_chan=0
2023-02-11 10:51:20 2023/02/11 15:51:20 [wyzecam.tutk.tutk_ioctl_mux][DEBUG][spare] Now listening on channel id 0
2023-02-11 10:51:20 2023/02/11 15:51:20 [wyzecam.tutk.tutk_ioctl_mux][DEBUG][spare] SEND <K10000ConnectRequest code=10000 resp_code=10001> <TutkWyzeProtocolHeader prefix=b'HL' protocol=1 code=10000 txt_len=0> b''
2023-02-11 10:51:20 2023/02/11 15:51:20 [wyzecam.tutk.tutk_ioctl_mux][DEBUG][spare] RECV <TutkWyzeProtocolHeader prefix=b'HL' protocol=36 code=10001 txt_len=17>: b'\x03\xe1\xae\x97"M\xe5\xf9\xf1(\x8cb\xe4\xfc\xe7\x18\xa9'
2023-02-11 10:51:20 2023/02/11 15:51:20 [wyzecam.tutk.tutk_protocol][DEBUG][spare] Sending response: <K10008ConnectUserAuth code=10008 resp_code=10009>
2023-02-11 10:51:20 2023/02/11 15:51:20 [wyzecam.tutk.tutk_ioctl_mux][DEBUG][spare] SEND <K10008ConnectUserAuth code=10008 resp_code=10009> <TutkWyzeProtocolHeader prefix=b'HL' protocol=1 code=10008 txt_len=29> b"i>\xc8\xbf\xb1^\xa8\xea\xaa\x86\xd2\\\x8a\x92'\xfa6515\x01\x00\x06152457"
2023-02-11 10:51:20 2023/02/11 15:51:20 [wyzecam.tutk.tutk_ioctl_mux][DEBUG][spare] RECV <TutkWyzeProtocolHeader prefix=b'HL' protocol=36 code=10009 txt_len=742>: b'{"connectionRes":"1","cameraInfo":{"audioParm":{"sampleRate":"16000"},"videoParm":{"type":"H264","bitRate":"180","resolution":"2","fps":"20","horizontalFlip":"1","verticalFlip":"1","logo":"2","time":"1"},"settingParm":{"stateVision":"2","nightVision":"3","osd":"1","logSd":"1","logUdisk":"1", "telnet":"2","tz":"-5"},"basicInfo":{"firmware":"4.36.10.3836","type":"camera","hardware":"0.0.0.0","model":"WYZE_CAKP2JFUS","mac":"2CAA8EEFD44C","wifidb":"100"},"channelResquestResult":{"video":"1","audio":"0"},"recordType":{"type":"3"},"sdParm":{"status":"1","capacity":"30514","free":"30500","detail":"0"},"uDiskParm":{"status":"2","capacity":"0","free":"0"},"apartalarmParm":{"type":"0","startX":"25","longX":"50","startY":"25","heightY":"50"}}}'
2023-02-11 10:51:20 2023/02/11 15:51:20 [wyzecam.tutk.tutk_ioctl_mux][DEBUG][spare] SEND <K10056SetResolvingBit code=10056 resp_code=10057> <TutkWyzeProtocolHeader prefix=b'HL' protocol=1 code=10056 txt_len=3> b'\x02\x1e\x00'
2023-02-11 10:51:21 2023/02/11 15:51:21 [wyzecam.tutk.tutk_ioctl_mux][DEBUG][spare] RECV <TutkWyzeProtocolHeader prefix=b'HL' protocol=36 code=10057 txt_len=1>: b'\x01'
2023-02-11 10:51:22 2023/02/11 15:51:22 [wyzecam.tutk.tutk_ioctl_mux][DEBUG][spare] No longer listening on channel id 0
2023-02-11 10:51:22 2023/02/11 15:51:22 [WyzeBridge][INFO][spare] [videoParm] {'type': 'H264', 'bitRate': '180', 'resolution': '2', 'fps': '20', 'horizontalFlip': '1', 'verticalFlip': '1', 'logo': '2', 'time': '1'}
2023-02-11 10:51:22 2023/02/11 15:51:22 [WyzeBridge][INFO][spare] 📡 Getting 30kb/s SD stream (H264/20fps) via LAN mode (WiFi: 100%) FW: 4.36.10.3836 🔒 (DTLS) (2/3)
2023-02-11 10:51:23 2023/02/11 15:51:23 [RTSP][SPARE] ✅ '/spare' stream is UP! (3/3)
2023-02-11 10:51:23 2023/02/11 15:51:23 [RTSP][SPARE] 📖 New client reading
2023-02-11 10:51:44 2023/02/11 15:51:44 [WyzeBridge][INFO][WyzeBridge] 🎉 Connecting to WyzeCam V3 - Spare on 192.168.1.162
2023-02-11 10:51:44 2023/02/11 15:51:44 [werkzeug][INFO][WyzeBridge] 127.0.0.1 - - [11/Feb/2023 15:51:44] "GET /api/spare-2/start HTTP/0.9" 200 -
2023-02-11 10:51:44 2023/02/11 15:51:44 [wyzecam.iotc][DEBUG][spare-2] Connect via IOTC_Connect_ByUIDEx
2023-02-11 10:51:45 2023/02/11 15:51:45 [wyzecam.iotc][INFO][spare-2] AV Client Start: chan_id=0 expected_chan=0
2023-02-11 10:51:45 2023/02/11 15:51:45 [wyzecam.tutk.tutk_ioctl_mux][DEBUG][spare-2] Now listening on channel id 0
2023-02-11 10:51:45 2023/02/11 15:51:45 [wyzecam.tutk.tutk_ioctl_mux][DEBUG][spare-2] SEND <K10000ConnectRequest code=10000 resp_code=10001> <TutkWyzeProtocolHeader prefix=b'HL' protocol=1 code=10000 txt_len=0> b''
2023-02-11 10:51:45 2023/02/11 15:51:45 [wyzecam.tutk.tutk_ioctl_mux][DEBUG][spare-2] RECV <TutkWyzeProtocolHeader prefix=b'HL' protocol=36 code=10001 txt_len=17>: b'\x03vS\xf2\xce\xabW\x85\xef\xb1\xc3\xf1\xdcE\xb0\xc6\xa6'
2023-02-11 10:51:45 2023/02/11 15:51:45 [wyzecam.tutk.tutk_protocol][DEBUG][spare-2] Sending response: <K10008ConnectUserAuth code=10008 resp_code=10009>
2023-02-11 10:51:45 2023/02/11 15:51:45 [wyzecam.tutk.tutk_ioctl_mux][DEBUG][spare-2] SEND <K10008ConnectUserAuth code=10008 resp_code=10009> <TutkWyzeProtocolHeader prefix=b'HL' protocol=1 code=10008 txt_len=29> b'\xc8\xbe\xe6cq\x92\xb6\xa1\x02{\x86\x06MZ\x0b\xd815e0\x01\x00\x06152457'
2023-02-11 10:51:45 2023/02/11 15:51:45 [wyzecam.tutk.tutk_ioctl_mux][DEBUG][spare-2] RECV <TutkWyzeProtocolHeader prefix=b'HL' protocol=36 code=10009 txt_len=741>: b'{"connectionRes":"1","cameraInfo":{"audioParm":{"sampleRate":"16000"},"videoParm":{"type":"H264","bitRate":"180","resolution":"2","fps":"20","horizontalFlip":"1","verticalFlip":"1","logo":"2","time":"1"},"settingParm":{"stateVision":"2","nightVision":"3","osd":"1","logSd":"1","logUdisk":"1", "telnet":"2","tz":"-5"},"basicInfo":{"firmware":"4.36.10.3836","type":"camera","hardware":"0.0.0.0","model":"WYZE_CAKP2JFUS","mac":"2CAA8EEFD44C","wifidb":"84"},"channelResquestResult":{"video":"1","audio":"0"},"recordType":{"type":"3"},"sdParm":{"status":"1","capacity":"30514","free":"30500","detail":"0"},"uDiskParm":{"status":"2","capacity":"0","free":"0"},"apartalarmParm":{"type":"0","startX":"25","longX":"50","startY":"25","heightY":"50"}}}'
2023-02-11 10:51:45 2023/02/11 15:51:45 [wyzecam.tutk.tutk_ioctl_mux][DEBUG][spare-2] SEND <K10056SetResolvingBit code=10056 resp_code=10057> <TutkWyzeProtocolHeader prefix=b'HL' protocol=1 code=10056 txt_len=3> b'\x01\xb4\x00'
2023-02-11 10:51:45 2023/02/11 15:51:45 [wyzecam.tutk.tutk_ioctl_mux][DEBUG][spare-2] RECV <TutkWyzeProtocolHeader prefix=b'HL' protocol=36 code=10057 txt_len=1>: b'\x01'
2023-02-11 10:51:46 2023/02/11 15:51:46 [wyzecam.tutk.tutk_ioctl_mux][DEBUG][spare-2] No longer listening on channel id 0
2023-02-11 10:51:46 2023/02/11 15:51:46 [WyzeBridge][INFO][spare-2] [videoParm] {'type': 'H264', 'bitRate': '180', 'resolution': '2', 'fps': '20', 'horizontalFlip': '1', 'verticalFlip': '1', 'logo': '2', 'time': '1'}
2023-02-11 10:51:46 2023/02/11 15:51:46 [WyzeBridge][INFO][spare-2] 📡 Getting 180kb/s HD stream (H264/20fps) via LAN mode (WiFi: 84%) FW: 4.36.10.3836 🔒 (DTLS) (2/3)
2023-02-11 10:51:46 2023/02/11 15:51:46 [py.warnings][WARNING][spare-2] WARNING: Skipping smaller frame at start of stream (frame_size=1)
2023-02-11 10:51:46 2023/02/11 15:51:46 [py.warnings][WARNING][spare-2] WARNING: Skipping smaller frame at start of stream (frame_size=1)
2023-02-11 10:51:46 2023/02/11 15:51:46 [py.warnings][WARNING][spare-2] WARNING: Skipping smaller frame at start of stream (frame_size=1)
2023-02-11 10:51:46 2023/02/11 15:51:46 [RTSP][SPARE-2] ✅ '/spare-2' stream is UP! (3/3)
2023-02-11 10:51:46 2023/02/11 15:51:46 [RTSP][SPARE-2] 📖 New client reading
2023-02-11 10:53:01 2023/02/11 15:53:01 [RTSP][SPARE-2] 📕 Client stopped reading
2023-02-11 10:53:01 2023/02/11 15:53:01 [RTSP][SPARE-2] 📖 New client reading
2023-02-11 10:53:18 2023/02/11 15:53:18 [RTSP][SPARE-2] 📕 Client stopped reading
2023-02-11 10:53:26 2023/02/11 15:53:26 [RTSP][SPARE-2] 📖 New client reading
2023-02-11 10:54:26 2023/02/11 15:54:26 [RTSP][SPARE-2] 📕 Client stopped reading
2023-02-11 10:54:36 2023/02/11 15:54:36 [RTSP][SPARE-2] ❌ '/spare-2' stream is down
2023-02-11 10:54:36 [tee @ 0x55b1e628b0c0] All tee outputs failed.
2023-02-11 10:54:36 av_interleaved_write_frame(): Broken pipe
2023-02-11 10:54:37 2023/02/11 15:54:37 [WyzeBridge][INFO][spare-2] FFMPEG stopped
2023-02-11 10:54:56 2023/02/11 15:54:56 [werkzeug][INFO][WyzeBridge] 127.0.0.1 - - [11/Feb/2023 15:54:56] "GET /api/spare-2/start HTTP/0.9" 200 -
2023-02-11 10:55:10 2023/02/11 15:55:10 [RTSP][SPARE] 📕 Client stopped reading
2023-02-11 10:55:20 2023/02/11 15:55:20 [RTSP][SPARE] ❌ '/spare' stream is down
2023-02-11 10:55:21 [tee @ 0x558b29e589c0] All tee outputs failed.
2023-02-11 10:55:21 av_interleaved_write_frame(): Broken pipe
2023-02-11 10:55:26 2023/02/11 15:55:26 [WyzeBridge][INFO][spare] FFMPEG stopped
2023-02-11 10:55:26 2023/02/11 15:55:26 [WyzeBridge][WARNING][WyzeBridge] ⏰ Timedout connecting to Spare.