update docs with more deeplinking.

This commit is contained in:
Miroslav Šedivý 2025-03-26 22:46:11 +01:00
parent 6dc21ec918
commit 9f480f5581
6 changed files with 31 additions and 29 deletions

View file

@ -321,9 +321,6 @@ The default encoder uses `h264` for video and `aac` for audio, muxed in the `flv
```yaml title="config.yaml"
capture:
broadcast:
audio_bitrate: 128
video_bitrate: 4096
preset: veryfast
pipeline: |
flvmux name=mux
! rtmpsink location={url}
@ -343,14 +340,9 @@ The default encoder uses `h264` for video and `aac` for audio, muxed in the `flv
</TabItem>
<TabItem value="nvh264enc" label="NVENC H264 configuration">
This configuration requires [Nvidia GPU](https://developer.nvidia.com/cuda-gpus) with [NVENC](https://developer.nvidia.com/nvidia-video-codec-sdk) support.
```yaml title="config.yaml"
capture:
broadcast:
audio_bitrate: 128
video_bitrate: 4096
preset: veryfast
pipeline: |
flvmux name=mux
! rtmpsink location={url}
@ -371,6 +363,8 @@ The default encoder uses `h264` for video and `aac` for audio, muxed in the `flv
! mux.
```
This configuration requires [Nvidia GPU](https://developer.nvidia.com/cuda-gpus) with [NVENC](https://developer.nvidia.com/nvidia-video-codec-sdk) support and [Nvidia docker image](/docs/v3/installation/docker-images#nvidia) of neko.
</TabItem>
</Tabs>
@ -407,8 +401,6 @@ capture:
capture:
screencast:
enabled: true
rate: "10/1"
quality: 60
pipeline: |
ximagesrc display-name={display} show-pointer=true use-damage=false
! video/x-raw,framerate=10/1
@ -452,7 +444,7 @@ sudo apt install v4l2loopback-dkms v4l2loopback-utils linux-headers-`uname -r` l
sudo modprobe v4l2loopback exclusive_caps=1
```
This is needed even if neko is running inside a Docker container. In that case, the v4l2loopback module must be loaded on the host machine and the device must be mounted inside the container.
This is needed even if neko is running inside a Docker container. In that case, the `v4l2loopback` module must be loaded on the host machine and the device must be mounted inside the container.
```yaml title="docker-compose.yaml"
services:

View file

@ -2,7 +2,11 @@
### How to enable debug mode? {#debug-mode}
To see verbose information from the n.eko server, you can enable debug mode using `NEKO_DEBUG`.
To see verbose information from the neko server, you can enable debug mode using [`log.level=debug`](/docs/v3/configuration#log.level) or set the environment variable `NEKO_DEBUG=1`.
If you have issue with encoding, you can view the GStreamer debug information by setting the environment variable `GST_DEBUG=3`. Learn more about it on the [Gstreamer documentation](https://gstreamer.freedesktop.org/documentation/tutorials/basic/debugging-tools.html?gi-language=c#the-debug-log).
If you want to debug [Pion WebRTC](https://github.com/pion/webrtc), you can set the environment variable `PION_LOG_DEBUG=all`, available options are writen in the [Pion WebRTC codebase](https://github.com/pion/logging/blob/2d5402f6579f2579cc51a5bd9c1fac127a781abb/logging_test.go#L190-L194).
```yaml title="docker-compose.yaml"
services:
@ -25,7 +29,7 @@ services:
And then view the logs using `docker logs -f neko`.
To see verbose information from the n.eko client, you need to visit the developer console in your browser. You can do this by pressing `F12` and then navigating to the `Console` tab.
To see verbose information from the neko client, you need to visit the developer console in your browser. You can do this by pressing `F12` and then navigating to the `Console` tab.
### How to enable support for Chinese/Japanese/Korean input method? {#input-method}

View file

@ -101,7 +101,7 @@ See the V3 configuration options for the [Authentication](/docs/v3/configuration
| `NEKO_PASSWORD` | `NEKO_MEMBER_MULTIUSER_USER_PASSWORD` with `NEKO_MEMBER_PROVIDER=multiuser` |
| `NEKO_PASSWORD_ADMIN` | `NEKO_MEMBER_MULTIUSER_ADMIN_PASSWORD` with `NEKO_MEMBER_PROVIDER=multiuser` |
In order for the legacy authentication to work, you need to set [Multi-user](http://localhost:3000/docs/v3/configuration/authentication#member.multiuser).
In order for the legacy authentication to work, you need to set [Multi-user](/docs/v3/configuration/authentication#member.multiuser).
:::warning Limitation
V2 clients might not be compatible with any other authentication provider than the `multiuser`.
@ -138,7 +138,7 @@ V3 is compatible with the V2 API when legacy support is enabled. There was speci
### Authentication {#api.auth}
In V2 there was only one authentication provider available, as in V3 called the `multiuser` provider. The API knew based on the provided password (as `?pwd=` query string) if the user is an admin or not.
In V2 there was only one authentication provider available, as in V3 called the [`multiuser`](/docs/v3/configuration/authentication#member.multiuser) provider. The API knew based on the provided password (as `?pwd=` query string) if the user is an admin or not.
Since V3 handles authentication differently (see [API documentation](/docs/v3/api#authentication)), there has been added `?usr=` query string to the API to specify the username. The password is still provided as `?pwd=` query string. The `?usr=` query string is still optional, if not provided, the API will generate a random username.
@ -146,7 +146,7 @@ Since V3 handles authentication differently (see [API documentation](/docs/v3/ap
For every request in the legacy API, a new user session is created based on the `?usr=&pwd=` query string. The session is destroyed after the API request is completed. So for HTTP API requests, the sessions are short-lived but for WebSocket API requests, the session is kept alive until the WebSocket connection is closed.
:::
Only the `multiuser` provider (or the `noauth` provider) is supported without specifying the `?usr=` query string.
Only the [`multiuser`](/docs/v3/configuration/authentication#member.multiuser) provider (or the [`noauth`](/docs/v3/configuration/authentication#member.noauth) provider) is supported without specifying the `?usr=` query string.
### WebSocket Messages {#api.ws}
@ -222,3 +222,5 @@ The whole functionality of file transfer has been moved to a [File Transfer Plug
In v2, locks and muted users were managed using a simple map that tracked who set the lock and what was locked. In v3, locks are now implemented as setting options and no longer store the `session_id` of the user who applied the lock. As a result, if a client refreshes the page or reconnects, the lock information is lost, and the user who set the lock is displayed as `Somebody`.
Additionally, when using the legacy API with a v2 client, API calls occur in a different order than expected. The client first retrieves the session list before registering the user, meaning the current `session_id` is not known when the session list is fetched. That means, the current user appears as `Somebody` in the session list.
Currently, the v3 has no native support for pipeline generation, meaning that the user has to manually specify the pipeline for video and audio if he wants to customize it. The v2 had a simple built-in support for setting the video bitrate, fps, audio bitrate, and hardware encoding. Since the introduction of multiple video pipelines in v3, this feature has been removed.

View file

@ -3,7 +3,7 @@
If you want to run Neko behind a reverse proxy, you can use the following examples to configure your server.
:::tip
Do not forget to enable `server.proxy=true` in your `config.yml` file to allow the server to trust the proxy headers.
Do not forget to enable [`server.proxy=true`](/docs/v3/configuration#server.proxy) in your `config.yml` file to allow the server to trust the proxy headers.
:::
## Traefik v2 {#traefik-v2}
@ -46,8 +46,10 @@ For more information, check out the [official Nginx documentation](https://nginx
## Apache {#apache}
To do this, you need to have a running Apache server. Navigate to the `/etc/apache2/sites-available` folder and create a new configuration file, for example, `neko.conf`.
After creating the new configuration file, you can use the example below and paste it in. Some things may vary on your machine, so read through and modify it if needed.
To do this, you need to have a running Apache server. Navigate to the `/etc/apache2/sites-available` folder and create a new configuration file, for example, `neko.conf`.
After creating the new configuration file, you can use the example below and paste it in. Some things may vary on your machine, so read through and modify it if needed.
Bear in mind that your Neko server does not have to run on the same computer as Apache. They just need to be on the same network, and then you replace `localhost` with the correct internal IP.
```xml title="/etc/apache2/sites-available/neko.conf"

View file

@ -19,9 +19,9 @@ If you are absolutely sure that your client is working correctly, then most like
### Check if your ports are correctly exposed in Docker {#exposed-ports}
Check that your ephemeral port range `NEKO_WEBRTC_EPR` is correctly exposed as a `/udp` port range.
Check that your ephemeral port range [`NEKO_WEBRTC_EPR`](/docs/v3/configuration/webrtc#epr) is correctly exposed as a `/udp` port range.
In the following example, the specified range `52000-52100` must also be exposed using Docker. You can't map it to a different range, e.g. `52000-52100:53000-53100/udp`. If you want to use a different range, you must change the range in `NEKO_WEBRTC_EPR` too.
In the following example, the specified range `52000-52100` must also be exposed using Docker. You can't map it to a different range, e.g. `52000-52100:53000-53100/udp`. If you want to use a different range, you must change the range in [`NEKO_WEBRTC_EPR`](/docs/v3/configuration/webrtc#epr) too.
```yaml title="docker-compose.yaml"
services:
@ -89,7 +89,7 @@ You should see this:
11:11AM INF webrtc starting ephemeral_port_range=52000-52100 ice_lite=true ice_servers="[{URLs:[stun:stun.l.google.com:19302] Username: Credential:<nil> CredentialType:password}]" module=webrtc nat_ips=<your-IP>
```
If your IP is not correct, you can specify your own IP resolver using `NEKO_WEBRTC_IP_RETRIEVAL_URL`. It needs to return the IP address that will be used.
If your IP is not correct, you can specify your own IP resolver using [`NEKO_WEBRTC_IP_RETRIEVAL_URL`](/docs/v3/configuration/webrtc#ip_retrieval_url). It needs to return the IP address that will be used.
```yaml title="docker-compose.yaml"
services:
@ -111,7 +111,7 @@ services:
# highlight-end
```
Or you can specify your IP address manually using `NEKO_WEBRTC_NAT1TO1`:
Or you can specify your IP address manually using [`NEKO_WEBRTC_NAT1TO1`](/docs/v3/configuration/webrtc#nat1to1):
```yaml title="docker-compose.yaml"
services:
@ -137,7 +137,7 @@ services:
It's read as `NAT One to One`, so it's a capital letter `O`, not zero `0`, in `NAT1TO1`.
:::
If you want to use n.eko only locally, you must put your local IP address here, otherwise, the public address will be used.
If you want to use neko only locally, you must put your local IP address here, otherwise, the public address will be used.
### Neko works externally, but not locally {#works-externally-but-not-locally}
@ -147,7 +147,7 @@ Example for pfsense with truecharts docker container:
- First, port forward the relevant ports `8080` and `52000-52100/udp` for the container.
- Then turn on `Pure NAT` in pfsense (under system > advanced > firewall and nat).
- Make sure to check the two boxes so it works.
- Make sure `NEKO_WEBRTC_NAT1TO1` is blank and the `NEKO_WEBRTC_IP_RETRIEVAL_URL` address is working correctly (if unset, the default value is chosen).
- Make sure [`NEKO_WEBRTC_NAT1TO1`](/docs/v3/configuration/webrtc#nat1to1) is blank and the [`NEKO_WEBRTC_IP_RETRIEVAL_URL`](/docs/v3/configuration/webrtc#ip_retrieval_url) address is working correctly (if unset, the default value is chosen).
- Test externally to confirm it works.
- Internally you have to access it using `<your-public-ip>:port`
@ -193,7 +193,7 @@ services:
WRN session created with an error error="invalid 1:1 NAT IP mapping"
```
Check your `NEKO_WEBRTC_NAT1TO1` or ensure that `NEKO_WEBRTC_IP_RETRIEVAL_URL` returns the correct IP.
Check your [`NEKO_WEBRTC_NAT1TO1`](/docs/v3/configuration/webrtc#nat1to1) or ensure that [`NEKO_WEBRTC_IP_RETRIEVAL_URL`](/docs/v3/configuration/webrtc#ip_retrieval_url) returns the correct IP.
---
@ -257,8 +257,10 @@ See [related issue](https://github.com/m1k1o/neko/issues/276).
Could not connect to RTMP stream "'rtmp://<ingest-url>/live/<stream-key-removed> live=1'" for writing
```
Some ingest servers require the `live=1` parameter in the URL (e.g. nginx-rtmp-module). Some do not and do not accept apostrophes (e.g. owncast). You can try to change the pipeline to:
Some ingest servers require the `live=1` parameter in the URL (e.g. `nginx-rtmp-module`). Some do not and do not accept apostrophes (e.g. `owncast`). You can try to change the pipeline to:
```yaml
NEKO_CAPTURE_BROADCAST_PIPELINE: "flvmux name=mux ! rtmpsink location={url} pulsesrc device={device} ! audio/x-raw,channels=2 ! audioconvert ! voaacenc ! mux. ximagesrc display-name={display} show-pointer=false use-damage=false ! video/x-raw,framerate=28/1 ! videoconvert ! queue ! x264enc bframes=0 key-int-max=0 byte-stream=true tune=zerolatency speed-preset=veryfast ! mux."
```
See more details in broadcast pipeline [documentation](/docs/v3/configuration/capture#broadcast.pipeline).