Open xiki808 opened 2 years ago
It works for a while actually, I have installed it outside the container and it's ok. Not sure what makes webRTC not work in an LXC container.
It still crashes in a few seconds with the following error, running on a raspberry pi 4
ERRO[2022-02-14T21:22:11Z] stream no video call=ErrorStreamNoVideo channel=0 func=HTTPAPIServerStreamWebRTC module=http_webrtc stream=a155ebd1-a516-4b1b-b215-b73151322694
2022/02/14 21:22:11 [OPTIONS rtsp://10.0.0.101:554/onvif1 RTSP/1.0
CSeq: 12
Require: implicit-play
User-Agent: Lavf58.76.100
Session: 3b5fc8e2
]
share you camera stream and send me url
Thank you for your interest! Sent you my streams by email
I can confirm this issue. I was using @allenporter ghcr.io/allenporter/amd64-rtsp-to-web:latest. Out of container it working fine.
need update?
I'm using HomeAssistant core setup, so not using the addon. But so it doesn't work for the addon as well @luzik? Was tempted to try out Docker setup once I have time.
I haven't tried on Docker, but had issues having websocket stream in an LXC container.
I'm not sure how Lxc container, works but assuming it's like docker is there a motion of opening or using the host network? HLS uses everything over http however webrtc needs, for example, some udp ports opened up.
I think this can be the issue, that I didn't forward the right ports, I started by having a clue at what ports I need from here
I have pulled the latest changes just now and tested the stream and these are my results running on the host Raspberry PI
Stream URL used: rtsp://xxx:xxx@10.0.0.13:5541/Streaming/Channels/101/ rtsp_port used in config.json: 5541
In Play webrtc video page: Stream loads fine but breaks after a few seconds
Logs from page load till stream breaks:
ERRO[2022-02-19T14:27:21Z] WebRTC Client Offline call=WritePacket channel=0 func=HTTPAPIServerStreamWebRTC module=http_webrtc stream=d342e19a-5894-4094-a492-3b23c07c2b54
2022/02/19 14:27:23 [OPTIONS rtsp://10.0.0.13:5541/Streaming/Channels/101/ RTSP/1.0
CSeq: 22
Authorization: Digest username="admin", realm="IP Camera(E3293)", nonce="dd393a305d1ba08f9d088f3f720ee0e3", uri="rtsp://10.0.0.13:5541/Streaming/Channels/101/", response="b522cd05187b79e94073e8ff34798655"
Require: implicit-play
User-Agent: Lavf58.76.100
Session: 1891054719
]
2022/02/19 14:27:23 [OPTIONS rtsp://10.0.0.13:5541/Streaming/Channels/101/ RTSP/1.0
CSeq: 22
Authorization: Digest username="admin", realm="IP Camera(E3293)", nonce="2dc706f9f54322a04a954f203162f7f7", uri="rtsp://10.0.0.13:5541/Streaming/Channels/101/", response="d1b3c27f82095bc5f8484d002c5a7229"
Require: implicit-play
User-Agent: Lavf58.76.100
Session: 1816203257
]
ERRO[2022-02-19T14:27:33Z] stream no video call=ErrorStreamNoVideo channel=0 func=HTTPAPIServerStreamWebRTC module=http_webrtc stream=d342e19a-5894-4094-a492-3b23c07c2b54
In Play mse video: Stream loads but breaks after a few seconds
Logs from page load till stream breaks:
ERRO[2022-02-19T14:26:26Z] EOF call=Receive channel=0 func=HTTPAPIServerStreamMSE module=http_mse stream=d342e19a-5894-4094-a492-3b23c07c2b54
ERRO[2022-02-19T14:26:26Z] Client Reader Exit call=controlExit channel=0 func=HTTPAPIServerStreamMSE module=http_mse stream=d342e19a-5894-4094-a492-3b23c07c2b54
ERRO[2022-02-19T14:26:26Z] <nil> call=Close channel=0 func=HTTPAPIServerStreamMSE module=http_mse stream=d342e19a-5894-4094-a492-3b23c07c2b54
INFO[2022-02-19T14:26:26Z] Client Full Exit
2022/02/19 14:26:31 [OPTIONS rtsp://10.0.0.13:5541/Streaming/Channels/101/ RTSP/1.0
CSeq: 20
Authorization: Digest username="admin", realm="IP Camera(E3293)", nonce="dd393a305d1ba08f9d088f3f720ee0e3", uri="rtsp://10.0.0.13:5541/Streaming/Channels/101/", response="b522cd05187b79e94073e8ff34798655"
Require: implicit-play
Session: 1891054719
User-Agent: Lavf58.76.100
]
2022/02/19 14:26:31 [OPTIONS rtsp://10.0.0.13:5541/Streaming/Channels/101/ RTSP/1.0
CSeq: 20
Authorization: Digest username="admin", realm="IP Camera(E3293)", nonce="2dc706f9f54322a04a954f203162f7f7", uri="rtsp://10.0.0.13:5541/Streaming/Channels/101/", response="d1b3c27f82095bc5f8484d002c5a7229"
Require: implicit-play
User-Agent: Lavf58.76.100
Session: 1816203257
]
ERRO[2022-02-19T14:26:44Z] stream no video call=ErrorStreamNoVideo channel=0 func=HTTPAPIServerStreamMSE module=http_mse stream=d342e19a-5894-4094-a492-3b23c07c2b54
ERRO[2022-02-19T14:26:44Z] read tcp 10.0.0.4:8083->10.0.0.6:62776: use of closed network connection call=Receive channel=0 func=HTTPAPIServerStreamMSE module=http_mse stream=d342e19a-5894-4094-a492-3b23c07c2b54
ERRO[2022-02-19T14:26:44Z] <nil> call=Close channel=0 func=HTTPAPIServerStreamMSE module=http_mse stream=d342e19a-5894-4094-a492-3b23c07c2b54
INFO[2022-02-19T14:26:44Z] Client Full Exit
All fine with HLS
When running in container same results except that WebRTC never loads. I have opened port 5541 and 8083 both TCP and UDP.
How about when using host network? That config file you pointed to is using the host network.
As I understand it, the issue here is with the port forwarding of the container and not with the project as a whole?
If you have an example how to do it I can do it.
can i read ports from flags or global variables (ENV) or can i do
1) local storage of the configuration file not in the container
2) on startup, extract the ports from the config file and add them to the docker startup keys
My issues are two actually, 1. that it's not working on container with the setup I configured and 2. the installation on the host webrtc and mse streams stop like after 5 seconds
In my previous comment I was testing directly on the host and comparing the results to that of the container.
@deepch if you are interested to setup an LXC container you can follow the below. Keep in that I'm using a Raspberry Pi running on Raspbian debian 11 with LAN IP 10.0.0.4
Install LXD
apt-get snapd
snap install core
snap install lxd
Setup LXD
lxd init
Setup inputs...
expect "Would you like to use LXD clustering?"
send -- "\r"
expect "Do you want to configure a new storage pool?"
send -- "\r"
expect "Name of the new storage pool"
send -- "\r"
expect "Name of the storage backend to use"
send -- "\r"
expect "Create a new BTRFS pool?"
send -- "\r"
expect "Would you like to use an existing empty block device"
send -- "\r"
expect "Size in GB of the new loop device"
send -- "\r"
expect "Would you like to connect to a MAAS server?"
send -- "\r"
expect "Would you like to create a new local network bridge?"
send -- "\r"
expect "What should the new bridge be called?"
send -- "\r"
expect "What IPv4 address should be used?"
send -- "10.0.1.1/24\r"
expect "Would you like LXD to NAT IPv4 traffic on your bridge?"
send -- "\r"
expect "What IPv6 address should be used?"
send -- "none\r"
expect "Would you like the LXD server to be available over the network?"
send -- "\r"
expect "Would you like stale cached images to be updated automatically?"
send -- "\r"
expect "Would you like a YAML \"lxd init\" preseed to be printed?"
send -- "\r"
Create two yaml files:
container.yaml
config:
boot.autostart: true
boot.autostart.delay: 5
environment.TZ: Europe/Malta
description: ""
devices:
root:
path: /
pool: default
type: disk
name: container
used_by: []
webrtc.yaml (here is where the port forwarding is configured - the machine should have these ports free)
You will need to change the listen IP accordingly. The network's interface lxdbr0
should be the same.
config:
boot.autostart.priority: "8"
description: ""
devices:
eth0:
ipv4.address: 10.0.1.25
name: eth0
network: lxdbr0
type: nic
proxy5541UDP:
connect: udp:127.0.0.1:5541
listen: udp:10.0.0.4:5541
type: proxy
proxy5541:
connect: tcp:127.0.0.1:5541
listen: tcp:10.0.0.4:5541
type: proxy
proxy8083:
connect: tcp:127.0.0.1:8083
listen: tcp:10.0.0.4:8083
type: proxy
proxy8083UDP:
connect: udp:127.0.0.1:8083
listen: udp:10.0.0.4:8083
type: proxy
name: webrtc
used_by: []
Create LXD profiles
cat .container.yaml | lxc profile edit container
cat .webrtc.yaml | lxc profile edit webrtc
Launch the container
lxc launch images:debian/11/armhf webrtc -p container -p webrtc
lxc exec webrtc bash
.. to get in the container
Let me know if you are interested and need any more info
I'm using HomeAssistant core setup, so not using the addon. But so it doesn't work for the addon as well @luzik? Was tempted to try out Docker setup once I have time.
I haven't tried on Docker, but had issues having websocket stream in an LXC container.
No, my setup is home assistant in docker no hass, no addons. So this is probably only issue with port forwarding, or I have outdated docker image (Version: 2022-02-19 16:51:00.446258043)
My docker-compose
homeassistant:
container_name: homeassistant
image: homeassistant/home-assistant:stable
environment:
- TZ=Europe/Warsaw
restart: unless-stopped
ports:
- 8123:8123
depends_on:
- influxdb
- mosquitto
- mariadb
#- glances
- shinobi
- motioneye
volumes:
- ~/ha/homeassistant:/config
devices:
- /dev/serial/by-id/usb-1a86_USB2.0-Ser_-if00-port0:/dev/ttyUSB0
rtsp-to-web:
image: ghcr.io/allenporter/amd64-rtsp-to-web:latest
container_name: rtsp-to-web
restart: unless-stopped
ports:
- 8230:8083
- 5541:5541
- 5353:5353
As you can see those ports are exposed and webrtc do not work
I've added a docker example: https://github.com/deepch/RTSPtoWeb#installation-from-docker -- you need to use host network. Edit: or rather, using host network works, maybe other port configurations work but i'm not sure what they are yet. I believe you're making incorrect assumptions about the requirements for what ports need to be exposed. Edit: Also, i realize there are multiple conversations here, so we may want to fork the discussion
@allenporter with using the host network, you mean not to use a virtual bridge interface setup at the host ( used for containers ), but to use the host physical network interface?
I don't know the LXC details, but if you're relying on forwarding individual ports you may not be getting everything.
I believe that we are talking about same issue. @xiki808 just using different virtualization. If ports generated for webrtc are random, then lxc will need bridge mode because I don't know --network host
lxc substitute. For docker this option is working fine.
@allenporter please add docker-compose example to your documentation
rtsp-to-web:
image: ghcr.io/allenporter/amd64-rtsp-to-web:latest
restart: unless-stopped
network_mode: host
I see, ok thanks guys, will see what I can do for LXC there and will post here once I find something.
Do you have any suggestions why my webrtc and mse are stopping after just a few settings? This I can observe when I setup this project on the host system.
For more info regarding stream stopping after few seconds, in browser console I find this log:
Would really appreciate any guidance on this!
Any progress on this issue, I got same issue when connect to internet by IPV6, only HLS works.
For both my cameras I see no proper stream in MSE and WebRTC, but works fine with HLS.
For MSE, the camera loads, but just after a few seconds it get stuck and I see this error:
For WebRTC the camera never loads, and a loading indicator is shown
Am I missing something with camera configurations or is this a bug?