Git Product home page Git Product logo

datarhei / core Goto Github PK

View Code? Open in Web Editor NEW
186.0 12.0 42.0 40.25 MB

datarhei Core is management for FFmpeg processes without development effort. Whether your streaming has one viewer or a million, we have the tools to help you develop, deploy and manage any video project at any stage. We've solved the challenging problems so you can focus on your application, not your infrastructure.

Home Page: https://docs.datarhei.com/core

License: Apache License 2.0

Dockerfile 0.10% Makefile 0.29% Go 99.54% Shell 0.07%
docker-image ffmpeg ffmpeg-server hls rest-api rtmp rtmp-server rtsp srt streaming-server videostreaming

core's Introduction

Core

dsdsds

License: Apache2 CodeQL tests codecov Go Report Card PkgGoDev Gitbook

The datarhei Core is a process management solution for FFmpeg that offers a range of interfaces for media content, including HTTP, RTMP, SRT, and storage options. It is optimized for use in virtual environments such as Docker. It has been implemented in various contexts, from small-scale applications like Restreamer to large-scale, multi-instance frameworks spanning multiple locations, such as dedicated servers, cloud instances, and single-board computers. The datarhei Core stands out from traditional media servers by emphasizing FFmpeg and its capabilities rather than focusing on media conversion.

Objectives of development

The objectives of development are:

  • Unhindered use of FFmpeg processes
  • Portability of FFmpeg, including management across development and production environments
  • Scalability of FFmpeg-based applications through the ability to offload processes to additional instances
  • Streamlining of media product development by focusing on features and design.

What issues have been resolved thus far?

Process management

  • Run multiple processes via API
  • Unrestricted FFmpeg commands in process configuration.
  • Error detection and recovery (e.g., FFmpeg stalls, dumps)
  • Referencing for process chaining (pipelines)
  • Placeholders for storage, RTMP, and SRT usage (automatic credentials management and URL resolution)
  • Logs (access to current stdout/stderr)
  • Log history (configurable log history, e.g., for error analysis)
  • Resource limitation (max. CPU and MEMORY usage per process)
  • Statistics (like FFmpeg progress per input and output, CPU and MEMORY, state, uptime)
  • Input verification (like FFprobe)
  • Metadata (option to store additional information like a title)

Media delivery

  • Configurable file systems (in-memory, disk-mount, S3)
  • HTTP/S, RTMP/S, and SRT services, including Let's Encrypt
  • Bandwidth and session limiting for HLS/MPEG DASH sessions (protects restreams from congestion)
  • Viewer session API and logging

Misc

  • HTTP REST and GraphQL API
  • Swagger documentation
  • Metrics incl. Prometheus support (also detects POSIX and cgroups resources)
  • Docker images for fast setup of development environments up to the integration of cloud resources

Docker images

  • datarhei/core:latest (AMD64, ARM64, ARMv7)
  • datarhei/core:cuda-latest (Nvidia CUDA 11.7.1, AMD64)
  • datarhei/core:rpi-latest (Raspberry Pi / OMX/V4L2-M2M, AMD64/ARMv7)
  • datarhei/core:vaapi-latest (Intel VAAPI, AMD64)

Quick start

  1. Run the Docker image
docker run --name core -d \
    -e CORE_API_AUTH_USERNAME=admin \
    -e CORE_API_AUTH_PASSWORD=secret \
    -p 8080:8080 \
    -v ${HOME}/core/config:/core/config \
    -v ${HOME}/core/data:/core/data \
    datarhei/core:latest
  1. Open Swagger http://host-ip:8080/api/swagger/index.html

  2. Log in with Swagger Authorize > Basic authorization > Username: admin, Password: secret

Documentation

Documentation is available on docs.datarhei.com/core.

License

datarhei/core is licensed under the Apache License 2.0

core's People

Contributors

fuad00 avatar ioppermann avatar jstabenow avatar svenerbeck avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

core's Issues

Sync the NTP timestamps for SRT,RTP, RTMP streams. [ enhancement ]

Please add synchronizing media streams function. This is a unique feature for the project and can attract users like OBS.

This is already implemented in RTP.
SRT?, RTMP? implementation is necessary.

Larix Broadcaster (aka mobile obs) streaming client has added a feature to send NTP timestamps for all supported streams:
Insert SEI time metadata and specify NTP server, this allows synchronizing streams on server side.
https://softvelum.com/timesync/

RTP - Synchronizing media streams: Implementation of NTP is not required to use RTP... However, if NTP timestamp implemented in RTCP, it can be used to synchronize media streams even from different host... https://gist.github.com/simonkim/a9a3aa4f1ca04448c64212b3b079d107
Synchronizing Streams via SRT:

Some SRT encoders like new JVC-cams , Haivision-encoder and software encoder LarixBroadcaster (iPhone/Android) can do this:
synchronize internal clock by time-server (usually by NTP protocol).
It means all encoders have one clock:if one camera has time 11:59:59 then other cameras have same time.
send this time inside encoded feed (SEI metainfo)

Haivision/srt#2044 (comment)

https://manpages.ubuntu.com/manpages/focal/man1/srt-multiplex.1.html

How to restart docker container from a reboot

I followed the Wiki for the linux install, when I run the "Install" command, it says that "core" is already used.

I admit, I'm rather new to docker altogether, but based on the install guide command of

docker run --detach --name core --privileged --volume /opt/core/config:/core/config --volume /opt/core/data:/core/data --publish 8080:8080 --publish 8181:8181 --publish 1935:1935 --publish 1936:1936 --publish 6000:6000/udp datarhei/restreamer:latest

How do I get back to that same container without an error. It was working just fine before I rebooted and/or how do I get the container to start back up after a reboot?

Thanks!

hls publication

Hi,

I noticed that there is a problem in publishing hls to the web server.
when I make settings
http url protocol specifies where hls should be sent
I choose PUT as the method, and I choose delete segments as the hls flag

when I run the publication, I see in the nginx logs that I get code 200, i.e. hls is uploaded to the server and the playlist, while when the delete method comes I get error code 415. (does not delete the hls element)
when I try to call curl from my laptop, the hls element disappears from the nginx server without any problems

request for verification.

Webserver HTTP response codes wrong?

Restreamer has a url to get player configs:
https://[restreamer-domain]/channels/[GUID]/config.js

If we misspell it, and get for example:
https://[restreamer-domain]/channels/[GUID]/configxxxxxxxxx.js
The webserver returns HTTP 200 OK !?
Why? It's a bug?

Ability to control individual Publications through the API?

Is it possible to stop / start individual Publications? Reading the API docs I only can see a way to stop / start RTMP but what if I have multiple cameras going going to YouTube for instance and I only want to stop / start one of them?

SRT ingest stucks on every 7min streaming

Here are my process report for this source;

I'm trying to generate an SRT feed with 4 (stereo) audio services from the Metus Ingest application !

{
"about": {
"id": "99a51183-96ce-491e-b6e4-003a1ef44cfb",
"name": "empty-math-7870",
"created_at": "2023-03-21T18:24:16.000Z",
"version": {
"number": "16.12.0",
"repository_commit": "431d013e3ec9a6f42d47cd168bcb9cc1ad39feed",
"repository_branch": "main",
"build_date": "2023-02-23T10:50:04Z",
"arch": "linux/arm64",
"compiler": "go1.20.1"
},
"auths": [
"localjwt"
],
"app": "datarhei-core",
"uptime_seconds": 7975
},
"ffmpeg": {
"version": "5.1.2",
"compiler": "gcc 11.2.1 (Alpine 11.2.1_git20220219) 20220219",
"configuration": "--extra-version=datarhei --prefix=/usr --extra-libs='-lpthread -lxml2 -lm -lz -lsupc++ -lstdc++ -lssl -lcrypto -lz -lc -ldl' --enable-nonfree --enable-gpl --enable-version3 --enable-postproc --enable-static --enable-openssl --enable-libxml2 --enable-libv4l2 --enable-v4l2_m2m --enable-libfreetype --enable-libsrt --enable-libx264 --enable-libx265 --enable-libvpx --enable-libmp3lame --enable-libopus --enable-libvorbis --disable-ffplay --disable-debug --disable-doc --disable-shared",
"libraries": [
{
"name": "libavutil",
"compiled": "57. 28.100",
"linked": "57. 28.100"
},
{
"name": "libavcodec",
"compiled": "59. 37.100",
"linked": "59. 37.100"
},
{
"name": "libavformat",
"compiled": "59. 27.100",
"linked": "59. 27.100"
},
{
"name": "libavdevice",
"compiled": "59. 7.100",
"linked": "59. 7.100"
},
{
"name": "libavfilter",
"compiled": "8. 44.100",
"linked": "8. 44.100"
},
{
"name": "libswscale",
"compiled": "6. 7.100",
"linked": "6. 7.100"
},
{
"name": "libswresample",
"compiled": "4. 7.100",
"linked": "4. 7.100"
},
{
"name": "libpostproc",
"compiled": "56. 6.100",
"linked": "56. 6.100"
}
]
},
"config": {
"created_at": "2023-03-18T16:45:46.215031055Z",
"version": 3,
"id": "99a51183-96ce-491e-b6e4-003a1ef44cfb",
"name": "empty-math-7870",
"address": ":9090",
"update_check": false,
"log": {
"level": "info",
"topics": [],
"max_lines": 1000
},
"db": {
"dir": "/core/config"
},
"host": {
"name": [
"[anonymized]",
"[anonymized]"
],
"auto": true
},
"api": {
"read_only": false,
"access": {
"http": {
"allow": [],
"block": []
},
"https": {
"allow": [],
"block": []
}
},
"auth": {
"enable": true,
"disable_localhost": false,
"username": "[anonymized]",
"password": "[anonymized]",
"jwt": {
"secret": "[anonymized]"
},
"auth0": {
"enable": false,
"tenants": [
"[anonymized]",
"[anonymized]"
]
}
}
},
"tls": {
"address": ":9191",
"enable": false,
"auto": false,
"email": "[email protected]",
"cert_file": "",
"key_file": ""
},
"storage": {
"disk": {
"dir": "/core/data",
"max_size_mbytes": 0,
"cache": {
"enable": true,
"max_size_mbytes": 0,
"ttl_seconds": 300,
"max_file_size_mbytes": 1,
"types": {
"allow": [],
"block": [
".m3u8",
".mpd"
]
}
}
},
"memory": {
"auth": {
"enable": true,
"username": "[anonymized]",
"password": "[anonymized]"
},
"max_size_mbytes": 0,
"purge": false
},
"s3": [],
"cors": {
"origins": [
"*"
]
},
"mimetypes_file": "./mime.types"
},
"rtmp": {
"enable": true,
"enable_tls": false,
"address": ":1935",
"address_tls": ":1936",
"app": "[anonymized]",
"token": "[anonymized]"
},
"srt": {
"enable": true,
"address": ":10000",
"passphrase": "",
"token": "",
"log": {
"enable": false,
"topics": []
}
},
"ffmpeg": {
"binary": "ffmpeg",
"max_processes": 0,
"access": {
"input": {
"allow": [],
"block": []
},
"output": {
"allow": [],
"block": []
}
},
"log": {
"max_lines": 100,
"max_history": 3
}
},
"playout": {
"enable": false,
"min_port": 0,
"max_port": 0
},
"debug": {
"profiling": false,
"force_gc": 0,
"memory_limit_mbytes": 0
},
"metrics": {
"enable": false,
"enable_prometheus": false,
"range_sec": 300,
"interval_sec": 2
},
"sessions": {
"enable": true,
"ip_ignorelist": [
"[anonymized]",
"[anonymized]"
],
"session_timeout_sec": 30,
"persist": false,
"persist_interval_sec": 300,
"max_bitrate_mbit": 0,
"max_sessions": 0
},
"service": {
"enable": false,
"token": "[anonymized]",
"url": "https://service.datarhei.com"
},
"router": {
"blocked_prefixes": [
"/api"
],
"routes": {},
"ui_path": ""
}
},
"process": {
"id": "restreamer-ui:ingest:a1a899a1-ed96-463f-8063-fa24095504bc",
"type": "ffmpeg",
"reference": "a1a899a1-ed96-463f-8063-fa24095504bc",
"created_at": 1678830985,
"config": {
"id": "restreamer-ui:ingest:a1a899a1-ed96-463f-8063-fa24095504bc",
"type": "ffmpeg",
"reference": "a1a899a1-ed96-463f-8063-fa24095504bc",
"input": [
{
"id": "input_0",
"address": "srt://[anonymized]",
"options": [
"-fflags",
"+genpts+discardcorrupt+fastseek",
"-thread_queue_size",
"512",
"-copyts"
]
}
],
"output": [
{
"id": "output_0",
"address": "{memfs}/a1a899a1-ed96-463f-8063-fa24095504bc_{outputid}.m3u8",
"options": [
"-dn",
"-sn",
"-map",
"0:0",
"-codec:v",
"copy",
"-map",
"0:1",
"-codec:a",
"copy",
"-metadata",
"title=https://[anonymized]",
"-metadata",
"service_provider=datarhei-Restreamer",
"-f",
"hls",
"-start_number",
"0",
"-hls_time",
"2",
"-hls_list_size",
"6",
"-hls_flags",
"append_list+delete_segments+program_date_time+temp_file",
"-hls_delete_threshold",
"4",
"-hls_segment_filename",
"{memfs}/a1a899a1-ed96-463f-8063-fa24095504bc_{outputid}%04d.ts",
"-master_pl_name",
"a1a899a1-ed96-463f-8063-fa24095504bc.m3u8",
"-master_pl_publish_rate",
"2",
"-method",
"PUT"
],
"cleanup": [
{
"pattern": "memfs:/a1a899a1-ed96-463f-8063-fa24095504bc**",
"max_files": 0,
"max_file_age_seconds": 0,
"purge_on_delete": true
},
{
"pattern": "memfs:/a1a899a1-ed96-463f-8063-fa24095504bc
{outputid}.m3u8",
"max_files": 0,
"max_file_age_seconds": 24,
"purge_on_delete": true
},
{
"pattern": "memfs:/a1a899a1-ed96-463f-8063-fa24095504bc_{outputid}_**.ts",
"max_files": 12,
"max_file_age_seconds": 24,
"purge_on_delete": true
},
{
"pattern": "memfs:/a1a899a1-ed96-463f-8063-fa24095504bc.m3u8",
"max_files": 0,
"max_file_age_seconds": 24,
"purge_on_delete": true
}
]
}
],
"options": [
"-err_detect",
"ignore_err",
"-y"
],
"reconnect": true,
"reconnect_delay_seconds": 5,
"autostart": true,
"stale_timeout_seconds": 15,
"limits": {
"cpu_usage": 0,
"memory_mbytes": 0,
"waitfor_seconds": 0
}
},
"state": {
"order": "start",
"exec": "running",
"runtime_seconds": 9,
"reconnect_seconds": -1,
"last_logline": " libpostproc 56. 6.100 / 56. 6.100",
"progress": {
"inputs": [],
"outputs": [],
"frame": 0,
"packet": 0,
"fps": 0,
"q": 0,
"size_kb": 0,
"time": 0,
"bitrate_kbit": 0,
"speed": 0,
"drop": 0,
"dup": 0
},
"memory_bytes": 16183296,
"cpu_usage": 0,
"command": [
"-err_detect",
"ignore_err",
"-y",
"-fflags",
"+genpts+discardcorrupt+fastseek",
"-thread_queue_size",
"512",
"-copyts",
"-i",
"srt://[anonymized]",
"-dn",
"-sn",
"-map",
"0:0",
"-codec:v",
"copy",
"-map",
"0:1",
"-codec:a",
"copy",
"-metadata",
"title=https://[anonymized]",
"-metadata",
"service_provider=datarhei-Restreamer",
"-f",
"hls",
"-start_number",
"0",
"-hls_time",
"2",
"-hls_list_size",
"6",
"-hls_flags",
"append_list+delete_segments+program_date_time+temp_file",
"-hls_delete_threshold",
"4",
"-hls_segment_filename",
"http://[anonymized]",
"-master_pl_name",
"a1a899a1-ed96-463f-8063-fa24095504bc.m3u8",
"-master_pl_publish_rate",
"2",
"-method",
"PUT",
"http://[anonymized]"
]
},
"report": {
"created_at": 1679431022,
"prelude": [
"ffmpeg version 5.1.2-datarhei Copyright (c) 2000-2022 the FFmpeg developers",
" built with gcc 11.2.1 (Alpine 11.2.1_git20220219) 20220219",
" configuration: --extra-version=datarhei --prefix=/usr --extra-libs='-lpthread -lxml2 -lm -lz -lsupc++ -lstdc++ -lssl -lcrypto -lz -lc -ldl' --enable-nonfree --enable-gpl --enable-version3 --enable-postproc --enable-static --enable-openssl --enable-libxml2 --enable-libv4l2 --enable-v4l2_m2m --enable-libfreetype --enable-libsrt --enable-libx264 --enable-libx265 --enable-libvpx --enable-libmp3lame --enable-libopus --enable-libvorbis --disable-ffplay --disable-debug --disable-doc --disable-shared",
" libavutil 57. 28.100 / 57. 28.100",
" libavcodec 59. 37.100 / 59. 37.100",
" libavformat 59. 27.100 / 59. 27.100",
" libavdevice 59. 7.100 / 59. 7.100",
" libavfilter 8. 44.100 / 8. 44.100",
" libswscale 6. 7.100 / 6. 7.100",
" libswresample 4. 7.100 / 4. 7.100",
" libpostproc 56. 6.100 / 56. 6.100"
],
"log": [
[
"1679431022",
"ffmpeg version 5.1.2-datarhei Copyright (c) 2000-2022 the FFmpeg developers"
],
[
"1679431022",
" built with gcc 11.2.1 (Alpine 11.2.1_git20220219) 20220219"
],
[
"1679431022",
" configuration: --extra-version=datarhei --prefix=/usr --extra-libs='-lpthread -lxml2 -lm -lz -lsupc++ -lstdc++ -lssl -lcrypto -lz -lc -ldl' --enable-nonfree --enable-gpl --enable-version3 --enable-postproc --enable-static --enable-openssl --enable-libxml2 --enable-libv4l2 --enable-v4l2_m2m --enable-libfreetype --enable-libsrt --enable-libx264 --enable-libx265 --enable-libvpx --enable-libmp3lame --enable-libopus --enable-libvorbis --disable-ffplay --disable-debug --disable-doc --disable-shared"
],
[
"1679431022",
" libavutil 57. 28.100 / 57. 28.100"
],
[
"1679431022",
" libavcodec 59. 37.100 / 59. 37.100"
],
[
"1679431022",
" libavformat 59. 27.100 / 59. 27.100"
],
[
"1679431022",
" libavdevice 59. 7.100 / 59. 7.100"
],
[
"1679431022",
" libavfilter 8. 44.100 / 8. 44.100"
],
[
"1679431022",
" libswscale 6. 7.100 / 6. 7.100"
],
[
"1679431022",
" libswresample 4. 7.100 / 4. 7.100"
],
[
"1679431022",
" libpostproc 56. 6.100 / 56. 6.100"
]
],
"history": [
{
"created_at": 1679430962,
"prelude": [
"ffmpeg version 5.1.2-datarhei Copyright (c) 2000-2022 the FFmpeg developers",
" built with gcc 11.2.1 (Alpine 11.2.1_git20220219) 20220219",
" configuration: --extra-version=datarhei --prefix=/usr --extra-libs='-lpthread -lxml2 -lm -lz -lsupc++ -lstdc++ -lssl -lcrypto -lz -lc -ldl' --enable-nonfree --enable-gpl --enable-version3 --enable-postproc --enable-static --enable-openssl --enable-libxml2 --enable-libv4l2 --enable-v4l2_m2m --enable-libfreetype --enable-libsrt --enable-libx264 --enable-libx265 --enable-libvpx --enable-libmp3lame --enable-libopus --enable-libvorbis --disable-ffplay --disable-debug --disable-doc --disable-shared",
" libavutil 57. 28.100 / 57. 28.100",
" libavcodec 59. 37.100 / 59. 37.100",
" libavformat 59. 27.100 / 59. 27.100",
" libavdevice 59. 7.100 / 59. 7.100",
" libavfilter 8. 44.100 / 8. 44.100",
" libswscale 6. 7.100 / 6. 7.100",
" libswresample 4. 7.100 / 4. 7.100",
" libpostproc 56. 6.100 / 56. 6.100",
"srt://[anonymized] Immediate exit requested",
"Exiting normally, received signal 2."
],
"log": [
[
"1679430962",
"ffmpeg version 5.1.2-datarhei Copyright (c) 2000-2022 the FFmpeg developers"
],
[
"1679430962",
" built with gcc 11.2.1 (Alpine 11.2.1_git20220219) 20220219"
],
[
"1679430962",
" configuration: --extra-version=datarhei --prefix=/usr --extra-libs='-lpthread -lxml2 -lm -lz -lsupc++ -lstdc++ -lssl -lcrypto -lz -lc -ldl' --enable-nonfree --enable-gpl --enable-version3 --enable-postproc --enable-static --enable-openssl --enable-libxml2 --enable-libv4l2 --enable-v4l2_m2m --enable-libfreetype --enable-libsrt --enable-libx264 --enable-libx265 --enable-libvpx --enable-libmp3lame --enable-libopus --enable-libvorbis --disable-ffplay --disable-debug --disable-doc --disable-shared"
],
[
"1679430962",
" libavutil 57. 28.100 / 57. 28.100"
],
[
"1679430962",
" libavcodec 59. 37.100 / 59. 37.100"
],
[
"1679430962",
" libavformat 59. 27.100 / 59. 27.100"
],
[
"1679430962",
" libavdevice 59. 7.100 / 59. 7.100"
],
[
"1679430962",
" libavfilter 8. 44.100 / 8. 44.100"
],
[
"1679430962",
" libswscale 6. 7.100 / 6. 7.100"
],
[
"1679430962",
" libswresample 4. 7.100 / 4. 7.100"
],
[
"1679430962",
" libpostproc 56. 6.100 / 56. 6.100"
],
[
"1679430977",
"srt://[anonymized] Immediate exit requested"
],
[
"1679430977",
"Exiting normally, received signal 2."
]
]
},
{
"created_at": 1679430982,
"prelude": [
"ffmpeg version 5.1.2-datarhei Copyright (c) 2000-2022 the FFmpeg developers",
" built with gcc 11.2.1 (Alpine 11.2.1_git20220219) 20220219",
" configuration: --extra-version=datarhei --prefix=/usr --extra-libs='-lpthread -lxml2 -lm -lz -lsupc++ -lstdc++ -lssl -lcrypto -lz -lc -ldl' --enable-nonfree --enable-gpl --enable-version3 --enable-postproc --enable-static --enable-openssl --enable-libxml2 --enable-libv4l2 --enable-v4l2_m2m --enable-libfreetype --enable-libsrt --enable-libx264 --enable-libx265 --enable-libvpx --enable-libmp3lame --enable-libopus --enable-libvorbis --disable-ffplay --disable-debug --disable-doc --disable-shared",
" libavutil 57. 28.100 / 57. 28.100",
" libavcodec 59. 37.100 / 59. 37.100",
" libavformat 59. 27.100 / 59. 27.100",
" libavdevice 59. 7.100 / 59. 7.100",
" libavfilter 8. 44.100 / 8. 44.100",
" libswscale 6. 7.100 / 6. 7.100",
" libswresample 4. 7.100 / 4. 7.100",
" libpostproc 56. 6.100 / 56. 6.100",
"srt://[anonymized] Immediate exit requested",
"Exiting normally, received signal 2."
],
"log": [
[
"1679430982",
"ffmpeg version 5.1.2-datarhei Copyright (c) 2000-2022 the FFmpeg developers"
],
[
"1679430982",
" built with gcc 11.2.1 (Alpine 11.2.1_git20220219) 20220219"
],
[
"1679430982",
" configuration: --extra-version=datarhei --prefix=/usr --extra-libs='-lpthread -lxml2 -lm -lz -lsupc++ -lstdc++ -lssl -lcrypto -lz -lc -ldl' --enable-nonfree --enable-gpl --enable-version3 --enable-postproc --enable-static --enable-openssl --enable-libxml2 --enable-libv4l2 --enable-v4l2_m2m --enable-libfreetype --enable-libsrt --enable-libx264 --enable-libx265 --enable-libvpx --enable-libmp3lame --enable-libopus --enable-libvorbis --disable-ffplay --disable-debug --disable-doc --disable-shared"
],
[
"1679430982",
" libavutil 57. 28.100 / 57. 28.100"
],
[
"1679430982",
" libavcodec 59. 37.100 / 59. 37.100"
],
[
"1679430982",
" libavformat 59. 27.100 / 59. 27.100"
],
[
"1679430982",
" libavdevice 59. 7.100 / 59. 7.100"
],
[
"1679430982",
" libavfilter 8. 44.100 / 8. 44.100"
],
[
"1679430982",
" libswscale 6. 7.100 / 6. 7.100"
],
[
"1679430982",
" libswresample 4. 7.100 / 4. 7.100"
],
[
"1679430982",
" libpostproc 56. 6.100 / 56. 6.100"
],
[
"1679430997",
"srt://[anonymized] Immediate exit requested"
],
[
"1679430997",
"Exiting normally, received signal 2."
]
]
},
{
"created_at": 1679431002,
"prelude": [
"ffmpeg version 5.1.2-datarhei Copyright (c) 2000-2022 the FFmpeg developers",
" built with gcc 11.2.1 (Alpine 11.2.1_git20220219) 20220219",
" configuration: --extra-version=datarhei --prefix=/usr --extra-libs='-lpthread -lxml2 -lm -lz -lsupc++ -lstdc++ -lssl -lcrypto -lz -lc -ldl' --enable-nonfree --enable-gpl --enable-version3 --enable-postproc --enable-static --enable-openssl --enable-libxml2 --enable-libv4l2 --enable-v4l2_m2m --enable-libfreetype --enable-libsrt --enable-libx264 --enable-libx265 --enable-libvpx --enable-libmp3lame --enable-libopus --enable-libvorbis --disable-ffplay --disable-debug --disable-doc --disable-shared",
" libavutil 57. 28.100 / 57. 28.100",
" libavcodec 59. 37.100 / 59. 37.100",
" libavformat 59. 27.100 / 59. 27.100",
" libavdevice 59. 7.100 / 59. 7.100",
" libavfilter 8. 44.100 / 8. 44.100",
" libswscale 6. 7.100 / 6. 7.100",
" libswresample 4. 7.100 / 4. 7.100",
" libpostproc 56. 6.100 / 56. 6.100",
"srt://[anonymized] Immediate exit requested",
"Exiting normally, received signal 2."
],
"log": [
[
"1679431002",
"ffmpeg version 5.1.2-datarhei Copyright (c) 2000-2022 the FFmpeg developers"
],
[
"1679431002",
" built with gcc 11.2.1 (Alpine 11.2.1_git20220219) 20220219"
],
[
"1679431002",
" configuration: --extra-version=datarhei --prefix=/usr --extra-libs='-lpthread -lxml2 -lm -lz -lsupc++ -lstdc++ -lssl -lcrypto -lz -lc -ldl' --enable-nonfree --enable-gpl --enable-version3 --enable-postproc --enable-static --enable-openssl --enable-libxml2 --enable-libv4l2 --enable-v4l2_m2m --enable-libfreetype --enable-libsrt --enable-libx264 --enable-libx265 --enable-libvpx --enable-libmp3lame --enable-libopus --enable-libvorbis --disable-ffplay --disable-debug --disable-doc --disable-shared"
],
[
"1679431002",
" libavutil 57. 28.100 / 57. 28.100"
],
[
"1679431002",
" libavcodec 59. 37.100 / 59. 37.100"
],
[
"1679431002",
" libavformat 59. 27.100 / 59. 27.100"
],
[
"1679431002",
" libavdevice 59. 7.100 / 59. 7.100"
],
[
"1679431002",
" libavfilter 8. 44.100 / 8. 44.100"
],
[
"1679431002",
" libswscale 6. 7.100 / 6. 7.100"
],
[
"1679431002",
" libswresample 4. 7.100 / 4. 7.100"
],
[
"1679431002",
" libpostproc 56. 6.100 / 56. 6.100"
],
[
"1679431017",
"srt://[anonymized] Immediate exit requested"
],
[
"1679431017",
"Exiting normally, received signal 2."
]
]
}
]
}
}
}

Preview image does not update

the preview image is not updating according to the setup. The update intervall is set to 10 sec, but the real update is (randomly) after around 30 min.
I couldn´t find a entry about the update time in the config.js files, only the link.
how to set the update of the images to e.g. 10sec

testet on Release: restreamer-v2.5.0 and restreamer-v2.4.2

Error in arm64 docker

`panic: runtime error: index out of range [0] with length 0

goroutine 20 [running]:
github.com/datarhei/core/v16/psutil.(*util).cpuTimes(0x40000a8edc?)
/dist/core/psutil/psutil.go:288 +0x184
github.com/datarhei/core/v16/psutil.(*util).collect(0x40000a8f70?)
/dist/core/psutil/psutil.go:247 +0x28
github.com/datarhei/core/v16/psutil.(*util).tick(0x400013c000, {0xd799c0, 0x40000a4910}, 0x0?)
/dist/core/psutil/psutil.go:236 +0xe8
created by github.com/datarhei/core/v16/psutil.(*util).Start.func1
/dist/core/psutil/psutil.go:133 +0xd8`

Streaming from Larix with fluctuating network coverage causes freeze even though data still comes in

Hey! First of all, I don't really know if this is even a Restreamer Issue, however I have debugged as good as I could and turned up nothing nowhere, so this is a bit of a desperate shot into the blue.

We are trying to do a Stream from a Cellphone running Larix, via Restreamer to OBS. The cell coverage is very inconsistent, which causes the stream to lock up frequently as soon as the link goes down a bit.
However, I'm monitoring the data traffic on the restreamer server and it turns out that, even though the data traffic recovers shortly after the dip, the stream stays frozen on the same picture. I have reconnect on 5 seconds and removal of stale connections on 10, but this does not fire, since traffic is continuously coming in (I assume). Larix is also reporting that it is still sending, therefore not degrading quality - but the picture stays frozen and no sound is present either. It looks as if after that freeze occurs, all the incoming traffic is still restreamed (input data rate equals output data rate on restreamer), but is simply discarded both in restreamers webplayer and my OBS video source.

The transmission is done using SRT.
Bandwidth and Keyframe/B-Frame settings don't appear to have any effect here.

I do not have logs I can explicitly tie to these events (since we were trying out a lot of things).

Edit: We are independently approaching Larix with essentially the same question.

Replace plain passwords in config.json with hashed once

Currently passwords are stored as plaintext in config.json which is handy if you forget your passwords but also, if you forgot the password of some other instance.

It's preferable to store passwords in a hashed (potentially also salted) way and compare the hashes instead of the plain passwords to prevent any damage.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.