The response has been limited to 50k tokens of the smallest files in the repo. You can remove this limitation by removing the max tokens filter.
├── .github
    ├── FUNDING.yml
    ├── ISSUE_TEMPLATE
    │   ├── bug_report.md
    │   ├── feature_request.md
    │   └── help-wanted-or-question.md
    └── workflows
    │   ├── build_bundle.yaml
    │   └── build_bundle_dev.yaml
├── CHANGELOG.md
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── Dockerfile
├── LICENSE
├── README.md
├── SECURITY.md
├── _BUNDLE_OF
├── _RESTREAMER-UI+CORE
├── readme-promo.gif
├── readme.png
├── run.sh
└── ui-root
    ├── index.html
    └── index_icon.svg


/.github/FUNDING.yml:
--------------------------------------------------------------------------------
 1 | # These are supported funding model platforms
 2 | 
 3 | github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
 4 | patreon: datarhei
 5 | open_collective: datarhei
 6 | ko_fi: # Replace with a single Ko-fi username
 7 | tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
 8 | community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
 9 | liberapay: # Replace with a single Liberapay username
10 | issuehunt: datarhei
11 | otechie: # Replace with a single Otechie username
12 | custom: ['https://datarhei.com']
13 | 


--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/bug_report.md:
--------------------------------------------------------------------------------
 1 | ---
 2 | name: Bug report
 3 | about: Create a report to help us improve
 4 | title: ''
 5 | labels: bug
 6 | assignees: ''
 7 | 
 8 | ---
 9 | 
10 | **Describe the bug**
11 | A clear and concise description of what the bug is.
12 | 
13 | **To Reproduce**
14 | Steps to reproduce the behavior:
15 | 1. Go to '...'
16 | 2. Click on '....'
17 | 3. Scroll down to '....'
18 | 4. See error
19 | 
20 | **Expected behavior**
21 | A clear and concise description of what you expected to happen.
22 | 
23 | **Screenshots**
24 | If applicable, add screenshots to help explain your problem.
25 | 
26 | **Desktop (please complete the following information):**
27 |  - OS: [e.g. iOS]
28 |  - Browser [e.g. chrome, safari]
29 |  - Version [e.g. 22]
30 | 
31 | **Smartphone (please complete the following information):**
32 |  - Device: [e.g. iPhone6]
33 |  - OS: [e.g. iOS8.1]
34 |  - Browser [e.g. stock browser, safari]
35 |  - Version [e.g. 22]
36 | 
37 | **Additional context**
38 | Add any other context about the problem here.
39 | 
40 | ## Business inquiries
41 | **We provide support for commercial requirements with professional support, agile software development, and consulting.** If you have a commercial request, be it a bug or a feature enhancement, please contact us directly at support@datarhei.com.
42 | 


--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/feature_request.md:
--------------------------------------------------------------------------------
 1 | ---
 2 | name: Feature request
 3 | about: Suggest an idea for this project
 4 | title: ''
 5 | labels: feature
 6 | assignees: ''
 7 | 
 8 | ---
 9 | 
10 | **Is your feature request related to a problem? Please describe.**
11 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
12 | 
13 | **Describe the solution you'd like**
14 | A clear and concise description of what you want to happen.
15 | 
16 | **Describe alternatives you've considered**
17 | A clear and concise description of any alternative solutions or features you've considered.
18 | 
19 | **Additional context**
20 | Add any other context or screenshots about the feature request here.
21 | 
22 | ## Business inquiries
23 | **We provide support for commercial requirements with professional support, agile software development, and consulting.** If you have a commercial request, be it a bug or a feature enhancement, please contact us directly at support@datarhei.com.
24 | 


--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/help-wanted-or-question.md:
--------------------------------------------------------------------------------
 1 | ---
 2 | name: Help wanted or question
 3 | about: Get help and ask questions
 4 | title: ''
 5 | labels: help wanted, question
 6 | assignees: ''
 7 | 
 8 | ---
 9 | 
10 | **Subject of the issue**
11 | Describe your issue here.
12 | 
13 | **Your environment**
14 | Explain your setup so we can better understand what's going on.
15 | 
16 | **Files**
17 | Add the Restreamer [Process-Report](https://www.youtube.com/watch?v=mZMGrweFCsM), the  [Publication-Service Process-Report](https://youtu.be/7z95qnafzLo) or a list of relevant files for this issue. This will help us navigate the project and explain where to start. 
18 | 
19 | **Steps to reproduce**
20 | Tell us how to reproduce this issue. 
21 | 
22 | **Awesome** ⭐⭐⭐⭐⭐
23 | If the Restreamer has problems processing your video signals, it would be constructive if you send us this origin stream by mail with the GitHub issue number to support@datarhei.com. This way, we can better see why the Restreamer is not working correctly.
24 | 
25 | **Expected behavior**
26 | Tell us what should happen
27 | 
28 | **Actual behavior**
29 | Tell us what happens instead
30 | 
31 | ## Business inquiries
32 | **We provide support for commercial requirements with professional support, agile software development, and consulting.** If you have a commercial request, be it a bug or a feature enhancement, please contact us directly at support@datarhei.com.
33 | 


--------------------------------------------------------------------------------
/.github/workflows/build_bundle.yaml:
--------------------------------------------------------------------------------
  1 | name: 'Build restreamer latest images'
  2 | 
  3 | on:
  4 |     workflow_dispatch:
  5 |     workflow_call:
  6 |     push:
  7 |         branches-ignore:
  8 |             - '**'
  9 | 
 10 | jobs:
 11 |     versions:
 12 |         runs-on: ubuntu-latest
 13 |         outputs:
 14 |             uiversion: ${{ steps.restreamerui.outputs.version }}
 15 |             bundleversion: ${{ steps.restreamerui.outputs.bundle }}
 16 |             coreversion: ${{ steps.core.outputs.version }}
 17 |         steps:
 18 |             - name: Checkout restreamr-ui repo
 19 |               uses: actions/checkout@v4
 20 |               with:
 21 |                   repository: datarhei/restreamer-ui
 22 |                   path: ./ui
 23 | 
 24 |             - name: Get latest version and bundle from UI
 25 |               id: restreamerui
 26 |               run: |
 27 |                   echo "version=$(cat ./ui/package.json | jq '.version' | sed 's/\"//g')" >> "$GITHUB_OUTPUT"
 28 |                   echo "bundle=$(cat ./ui/package.json | jq '.bundle' | sed 's/\"//g' | sed 's/restreamer-v//g' )" >> "$GITHUB_OUTPUT"
 29 | 
 30 |             - name: Checkout core repo
 31 |               uses: actions/checkout@v4
 32 |               with:
 33 |                   repository: datarhei/core
 34 |                   path: ./core
 35 | 
 36 |             - name: Get latest version from core
 37 |               id: core
 38 |               run: |
 39 |                   echo "version=$(cat ./core/app/version.go | grep -E -o '(Major|Minor|Patch): [0-9]+,' | sed -E 's/^.*: ([0-9]+),.*$/\1/g' | paste -sd '.' - )" >> "$GITHUB_OUTPUT"
 40 | 
 41 |             - name: Show versions
 42 |               run: |
 43 |                   echo "ui: ${{ steps.restreamerui.outputs.version }}"
 44 |                   echo "bundle: ${{ steps.restreamerui.outputs.bundle }}"
 45 |                   echo "core: ${{ steps.core.outputs.version }}"
 46 | 
 47 |     docker:
 48 |         needs: versions
 49 |         runs-on: [self-hosted]
 50 |         strategy:
 51 |             matrix:
 52 |                 include:
 53 |                     - ui: ${{ needs.versions.outputs.uiversion }}
 54 |                       core: core${{ needs.versions.outputs.coreversion }}-alpine3.20
 55 |                       ffmpeg: ffmpeg6.1.1-alpine3.20
 56 |                       platforms: linux/amd64,linux/arm64,linux/arm/v7
 57 |                       prefix:
 58 |                     - ui: ${{ needs.versions.outputs.uiversion }}
 59 |                       core: core${{ needs.versions.outputs.coreversion }}-alpine3.20
 60 |                       ffmpeg: ffmpeg6.1.1-rpi-alpine3.20
 61 |                       platforms: linux/arm64,linux/arm/v7
 62 |                       prefix: rpi-
 63 |                     - ui: ${{ needs.versions.outputs.uiversion }}
 64 |                       core: core${{ needs.versions.outputs.coreversion }}-ubuntu22.04
 65 |                       ffmpeg: ffmpeg6.1.1-vaapi-ubuntu22.04
 66 |                       platforms: linux/amd64
 67 |                       prefix: vaapi-
 68 |                     - ui: ${{ needs.versions.outputs.uiversion }}
 69 |                       core: core${{ needs.versions.outputs.coreversion }}-ubuntu22.04
 70 |                       ffmpeg: ffmpeg6.1.1-cuda-ubuntu22.04-cuda11.7.1
 71 |                       platforms: linux/amd64
 72 |                       prefix: cuda-
 73 |         steps:
 74 |             - name: Checkout
 75 |               uses: actions/checkout@v4
 76 | 
 77 |             - name: Docker meta
 78 |               id: meta
 79 |               uses: docker/metadata-action@v5
 80 |               with:
 81 |                   images: |
 82 |                       datarhei/restreamer
 83 |                   tags: |
 84 |                       type=raw,value=${{ matrix.prefix }}${{ needs.versions.outputs.bundleversion }}-ui${{ needs.versions.outputs.uiversion }}-${{ matrix.core }}-${{ matrix.ffmpeg }}
 85 |                       type=raw,value=${{ matrix.prefix }}${{ needs.versions.outputs.bundleversion }}
 86 |                       type=raw,value=${{ matrix.prefix }}latest
 87 | 
 88 |             - name: Set up QEMU
 89 |               uses: docker/setup-qemu-action@master
 90 |               with:
 91 |                   platforms: all
 92 | 
 93 |             - name: Set up Docker Buildx
 94 |               id: buildx
 95 |               uses: docker/setup-buildx-action@master
 96 | 
 97 |             - name: Login to DockerHub
 98 |               if: github.event_name != 'pull_request'
 99 |               uses: docker/login-action@v3
100 |               with:
101 |                   username: ${{ secrets.DOCKER_USERNAME }}
102 |                   password: ${{ secrets.DOCKER_PASSWORD }}
103 | 
104 |             - name: Build Multi-Arch
105 |               uses: docker/build-push-action@v5
106 |               with:
107 |                   builder: ${{ steps.buildx.outputs.name }}
108 |                   context: .
109 |                   file: ./Dockerfile
110 |                   build-args: |
111 |                       RESTREAMER_UI_IMAGE=datarhei/restreamer-ui:${{ matrix.ui }}
112 |                       CORE_IMAGE=datarhei/base:${{ matrix.core }}
113 |                       FFMPEG_IMAGE=datarhei/base:${{ matrix.ffmpeg }}
114 |                   platforms: ${{ matrix.platforms }}
115 |                   push: true
116 |                   tags: ${{ steps.meta.outputs.tags }}
117 |                   labels: ${{ steps.meta.outputs.labels }}
118 | 


--------------------------------------------------------------------------------
/.github/workflows/build_bundle_dev.yaml:
--------------------------------------------------------------------------------
 1 | name: 'Build restreamer dev images'
 2 | 
 3 | on:
 4 |     workflow_dispatch:
 5 |     workflow_call:
 6 |     schedule:
 7 |         - cron: '37 5 * * *'
 8 |     push:
 9 |         branches-ignore:
10 |             - '**'
11 | 
12 | jobs:
13 |     docker:
14 |         runs-on: [self-hosted]
15 |         strategy:
16 |             matrix:
17 |                 include:
18 |                     - ui: dev
19 |                       core: core-dev-alpine3.21
20 |                       ffmpeg: ffmpeg7.1.1-alpine3.21
21 |                       platforms: linux/amd64,linux/arm64,linux/arm/v7
22 |                       name: dev
23 |                     - ui: dev
24 |                       core: core-dev-alpine3.21
25 |                       ffmpeg: ffmpeg7.1.1-rpi-alpine3.21
26 |                       platforms: linux/arm64,linux/arm/v7
27 |                       name: rpi-dev
28 |                     - ui: dev
29 |                       core: core-dev-ubuntu24.04
30 |                       ffmpeg: ffmpeg7.1.1-vaapi-ubuntu24.04
31 |                       platforms: linux/amd64
32 |                       name: vaapi-dev
33 |                     - ui: dev
34 |                       core: core-dev-ubuntu24.04
35 |                       ffmpeg: ffmpeg7.1.1-cuda-ubuntu24.04-cuda12.8.0
36 |                       platforms: linux/amd64
37 |                       name: cuda-dev
38 |         steps:
39 |             - name: Checkout
40 |               uses: actions/checkout@v4
41 | 
42 |             - name: Docker meta
43 |               id: meta
44 |               uses: docker/metadata-action@v5
45 |               with:
46 |                   images: |
47 |                       datarhei/restreamer
48 |                   tags: |
49 |                       type=raw,value=${{ matrix.name }}
50 | 
51 |             - name: Set up QEMU
52 |               uses: docker/setup-qemu-action@master
53 |               with:
54 |                   platforms: all
55 | 
56 |             - name: Set up Docker Buildx
57 |               id: buildx
58 |               uses: docker/setup-buildx-action@master
59 | 
60 |             - name: Login to DockerHub
61 |               if: github.event_name != 'pull_request'
62 |               uses: docker/login-action@v3
63 |               with:
64 |                   username: ${{ secrets.DOCKER_USERNAME }}
65 |                   password: ${{ secrets.DOCKER_PASSWORD }}
66 | 
67 |             - name: Build Multi-Arch
68 |               uses: docker/build-push-action@v5
69 |               with:
70 |                   builder: ${{ steps.buildx.outputs.name }}
71 |                   context: .
72 |                   file: ./Dockerfile
73 |                   build-args: |
74 |                       RESTREAMER_UI_IMAGE=datarhei/restreamer-ui:${{ matrix.ui }}
75 |                       CORE_IMAGE=datarhei/base:${{ matrix.core }}
76 |                       FFMPEG_IMAGE=datarhei/base:${{ matrix.ffmpeg }}
77 |                   platforms: ${{ matrix.platforms }}
78 |                   push: true
79 |                   tags: ${{ steps.meta.outputs.tags }}
80 |                   labels: ${{ steps.meta.outputs.labels }}
81 | 


--------------------------------------------------------------------------------
/CHANGELOG.md:
--------------------------------------------------------------------------------
  1 | # Restreamer
  2 | 
  3 | ## 2.12.0
  4 | 
  5 | ### UI v1.13.0 > v1.14.0
  6 | 
  7 | -   Add wettercom service
  8 | -   Add option to select which channels will be displayed on the playersite ([#392](https://github.com/datarhei/restreamer/issues/392), [#800](https://github.com/datarhei/restreamer/issues/800))
  9 | -   Mod updates public videojs >v8
 10 | -   Fix erroneous filter setting
 11 | -   Fix encoded address
 12 | -   Fix double -filter parameter when encoder sets filter ([#787](https://github.com/datarhei/restreamer/issues/787))
 13 | -   Fix Docker build ([#64](https://github.com/datarhei/restreamer-ui/issues/64))
 14 | 
 15 | ### 🧡💚💜 Thank you to all Patrons and donors
 16 | 
 17 | -   Michael Shepherd
 18 | -   Jacob Fritsche
 19 | -   Martin H.
 20 | -   Paulo Gonçalves
 21 | -   Philipp Burkart
 22 | -   Mark Stephens
 23 | -   Fabian Stoll
 24 | -   Perry Johnson
 25 | -   Alex O'Carroll
 26 | -   Fiberian
 27 | -   Ivan Hašek
 28 | -   krischan941
 29 | -   Doug Roberts
 30 | -   Bassim Charafeddine
 31 | -   josue osorto
 32 | -   Raketenbaum
 33 | -   Byron Garcia
 34 | -   Jeff Moe
 35 | -   Ramakrishna Chillara
 36 | -   Eduardo Sarabia
 37 | -   Giovanni Russo
 38 | -   Gioele Cerati
 39 | -   Blueman2 (Robert G. Pearse)
 40 | -   Alex Fuhr
 41 | -   Frank Schulz
 42 | 
 43 | ## 2.11.0
 44 | 
 45 | ### UI v1.12.0 > v1.13.0
 46 | 
 47 | -   Add to allow stream hints in case probing fails
 48 | -   Mod enables ff-loglevel and prepares the logging component
 49 | -   Mod uses official Instagram-RTMP target
 50 | -   Mod Remove unused imports
 51 | -   Mod Update translations
 52 | -   Mod updates dependencies
 53 | -   Fix player position
 54 | 
 55 | ### Core v16.15.0 > v16.16.0
 56 | 
 57 | -   Add ConnectionIdleTimeout to RTMP server
 58 | -   Add WithLevel() to Logger interface
 59 | -   Fix datarhei/restreamer#759
 60 | -   Fix various RTMP bugs
 61 | -   Fix wrong log output when receiving a RTMP stream
 62 | -   Fix skipping session handling if collectors are nil
 63 | -   Update dependencies
 64 | 
 65 | ### 🧡💚💜 Thank you to all Patrons and donors
 66 | 
 67 | -   Michael Shepherd
 68 | -   Jacob Fritsche
 69 | -   Martin H.
 70 | -   Paulo Gonçalves
 71 | -   Philipp Burkart
 72 | -   Mark Stephens
 73 | -   Fabian Stoll
 74 | -   Perry Johnson
 75 | -   Alex O'Carroll
 76 | -   Fiberian
 77 | -   Ivan Hašek
 78 | -   krischan941
 79 | -   Doug Roberts
 80 | -   Bassim Charafeddine
 81 | -   josue osorto
 82 | -   Raketenbaum
 83 | -   Byron Garcia
 84 | -   Jeff Moe
 85 | -   Ramakrishna Chillara
 86 | -   Eduardo Sarabia
 87 | -   Giovanni Russo
 88 | -   Gioele Cerati
 89 | -   Blueman2 (Robert G. Pearse)
 90 | -   Alex Fuhr
 91 | -   Frank Schulz
 92 | 
 93 | ## 2.10.0
 94 | 
 95 | ### UI v1.11.0 > v1.12.0
 96 | 
 97 | -   Add option to select different SRT stream in wizard
 98 | -   Add option to select different RTMP stream in wizard
 99 | -   Fix selecting other than first audio stream ([#710](https://github.com/datarhei/restreamer/issues/710))
100 | -   Fix reset of previous audio settings when editing profile ([#730](https://github.com/datarhei/restreamer/issues/730))
101 | -   Fix RTMP URL for receive mode
102 | 
103 | ### 🧡💚💜 Thank you to all Patrons and donors
104 | 
105 | -   Jacob Fritsche
106 | -   Martin H.
107 | -   Paulo Gonçalves
108 | -   Philipp Burkart
109 | -   Mark Stephens
110 | -   Fabian Stoll
111 | -   Perry Johnson
112 | -   Alex O'Carroll
113 | -   Fiberian
114 | -   Ivan Hašek
115 | -   krischan941
116 | -   Doug Roberts
117 | -   Bassim Charafeddine
118 | -   josue osorto
119 | -   Raketenbaum
120 | -   Byron Garcia
121 | -   Jeff Moe
122 | -   Ramakrishna Chillara
123 | -   Eduardo Sarabia
124 | -   Giovanni Russo
125 | -   Gioele Cerati
126 | -   Blueman2 (Robert G. Pearse)
127 | -   Alex Fuhr
128 | -   Frank Schulz
129 | 
130 | ## 2.9.0
131 | 
132 | ### UI v1.10.0 > v1.11.0
133 | 
134 | -   Add allow to stream HEVC and AV1 to Youtube via RTMP
135 | -   Add librav1e AV1 encoder
136 | -   Add support for AV1 CUDA decoding ([PR 46](https://github.com/datarhei/restreamer-ui/pull/46))
137 | -   Add FFmpeg 6 support
138 | -   Add HEVC VideoToolbox encoder
139 | -   Fix anonymize error message ([#688](https://github.com/datarhei/restreamer/issues/688))
140 | -   Fix chromecast config ([#37](https://github.com/datarhei/restreamer-ui/issues/37))
141 | 
142 | ### Core v16.14.0 > v16.15.0
143 | 
144 | -   Add migrating to ffmpeg 6
145 | -   Fix missing process data if process has been deleted meanwhile
146 | -   Fix maintaining the metadata on process config update (datarhei/restreamer#698)
147 | -   Fix placeholder parsing
148 | -   Fix concurrent memfs accesses
149 | -   Fix memfs concurrent read and write performance
150 | 
151 | ### 🧡💚💜 Thank you to all Patrons and donors
152 | 
153 | -   Jacob Fritsche
154 | -   Martin H.
155 | -   Paulo Gonçalves
156 | -   Philipp Burkart
157 | -   Mark Stephens
158 | -   Fabian Stoll
159 | -   Perry Johnson
160 | -   Alex O'Carroll
161 | -   Fiberian
162 | -   Ivan Hašek
163 | -   krischan941
164 | -   Doug Roberts
165 | -   Bassim Charafeddine
166 | -   josue osorto
167 | -   Raketenbaum
168 | -   Byron Garcia
169 | -   Jeff Moe
170 | -   Ramakrishna Chillara
171 | -   Eduardo Sarabia
172 | -   Giovanni Russo
173 | -   Gioele Cerati
174 | -   Blueman2 (Robert G. Pearse)
175 | -   Alex Fuhr
176 | -   Frank Schulz
177 | 
178 | ## 2.8.0
179 | 
180 | ### UI v1.9.0 > v1.10.0
181 | 
182 | -   Add resource usage and ffmpeg command to process details
183 | -   Add audio loop source
184 | -   Add to allow to select from already publishing RTMP and SRT streams
185 | -   Fix wrongly displayed SRT URL ([#635](https://github.com/datarhei/restreamer/issues/635))
186 | -   Fix RTMPS address with custom ports ([#658](https://github.com/datarhei/restreamer/issues/658))
187 | -   Fix allow RTSPS protocol ([#677](https://github.com/datarhei/restreamer/issues/677))
188 | 
189 | ### Core v16.13.1 > v16.14.0
190 | 
191 | -   Add support for SRTv4 clients
192 | -   Add support for Enhanced RTMP in internal RTMP server
193 | -   Fix require positive persist interval (session)
194 | -   Fix race condition (process)
195 | -   Update dependencies
196 | 
197 | ### 🧡💚💜 Thank you to all Patrons and donors
198 | 
199 | -   Jacob Fritsche
200 | -   Martin H.
201 | -   Paulo Gonçalves
202 | -   Philipp Burkart
203 | -   Mark Stephens
204 | -   Fabian Stoll
205 | -   Perry Johnson
206 | -   Alex O'Carroll
207 | -   Fiberian
208 | -   Ivan Hašek
209 | -   krischan941
210 | -   Doug Roberts
211 | -   Bassim Charafeddine
212 | -   josue osorto
213 | -   Raketenbaum
214 | -   Byron Garcia
215 | -   Jeff Moe
216 | -   Ramakrishna Chillara
217 | -   Eduardo Sarabia
218 | -   Giovanni Russo
219 | -   Gioele Cerati
220 | -   Blueman2 (Robert G. Pearse)
221 | -   Alex Fuhr
222 | -   Frank Schulz
223 | 
224 | ## 2.7.0
225 | 
226 | ### UI v1.8.0 > v1.9.0
227 | 
228 | -   Add enlarged channel overview
229 | -   Add new publication services: Dailymotion, Livepush, kick.com, NimoTV, PicartoTV, Rumble
230 | -   Add frame interpolation (framerate) filter (thanks to orryverducci)
231 | -   Add -referer option for pulling HTTP streams ([PR 40](https://github.com/datarhei/restreamer-ui/pull/40), thanks to mdastgheib)
232 | -   Add a/v filter to the publication components ([#593](https://github.com/datarhei/restreamer-ui/issues/593))
233 | -   Add video or image loop as input ([#528](https://github.com/datarhei/restreamer/discussions/528))
234 | -   Add option for custom poster image in player ([#632](https://github.com/datarhei/restreamer/issues/632))
235 | -   Add option to allow to set limits for ingest and egress processes ([#636](https://github.com/datarhei/restreamer/issues/636))
236 | -   Mod extends twitch's server list
237 | -   Mod uses placeholders for ingress setups ([#560](https://github.com/datarhei/restreamer-ui/issues/560))
238 | -   Mod updates npm
239 | -   Fix Owncast typo
240 | -   Fix Restream grid
241 | -   Fix the advanced settings in the MPEG-TS publication service ([#597](https://github.com/datarhei/restreamer/issues/597), thanks to orryverducci)
242 | -   Fix ALSA demuxer option names
243 | -   Fix index out-of-range warning, list ALSA devices for Raspicam video source
244 | -   Fix MUI warning
245 | -   Fix videojs skin
246 | 
247 | ### Core v16.13.0 > v16.13.1
248 | 
249 | -   Fix transfer of reports to updated process
250 | -   Fix calling Wait after process has been read
251 | -   Fix 509 return code if non-existing stream is requested
252 | -   Fix default search paths for config file
253 | -   Fix sized filesystem
254 | -   Update dependencies
255 | 
256 | ### Thank you to all Patrons and donors
257 | 
258 | -   Jacob Fritsche
259 | -   Martin H.
260 | -   Paulo Gonçalves
261 | -   Philipp Burkart
262 | -   Mark Stephens
263 | -   Fabian Stoll
264 | -   Perry Johnson
265 | -   Alex O'Carroll
266 | -   Fiberian
267 | -   Ivan Hašek
268 | -   krischan941
269 | -   Doug Roberts
270 | -   Bassim Charafeddine
271 | -   josue osorto
272 | -   Raketenbaum
273 | -   Byron Garcia
274 | -   Jeff Moe
275 | -   Ramakrishna Chillara
276 | -   Eduardo Sarabia
277 | -   Giovanni Russo
278 | -   Gioele Cerati
279 | -   Blueman2 (Robert G. Pearse)
280 | -   Alex Fuhr
281 | -   Frank Schulz
282 | 
283 | ## 2.6.0
284 | 
285 | ## v1.7.0 > v1.8.0
286 | 
287 | -   Add Ukrainian translation (thanks to Yurii Denys)
288 | -   Add Add stream key field and protocol detection to RTMP publication service
289 | -   Add Chinese (simplified) translation (thanks to Huyg0180110559)
290 | -   Fix empty force_key_frames value
291 | -   Fix Icecast publication service
292 | -   Fix imprint, terms and credit without share ([#525](https://github.com/datarhei/restreamer/issues/529))
293 | -   Fix proxy error on the playersite ([#525](https://github.com/datarhei/restreamer/issues/525))
294 | -   Fix saving RTMP advanced options ([#518](https://github.com/datarhei/restreamer/issues/518))
295 | -   Fix help buttons for other languages than English and German ([#24](https://github.com/datarhei/restreamer-ui/issues/24))
296 | -   Fix internal player skin (volume bar)
297 | -   Fix security hints (npm dep.)
298 | 
299 | ### Core v16.12.0 > v16.13.0
300 | 
301 | -   Add updated_at field in process infos
302 | -   Add preserve process log history when updating a process
303 | -   Add support for input framerate data from jsonstats patch
304 | -   Add number of keyframes and extradata size to process progress data
305 | -   Mod bumps FFmpeg to v5.1.3 (datarhei/core:tag bundles)
306 | -   Fix better naming for storage endpoint documentation
307 | -   Fix freeing up S3 mounts
308 | -   Fix URL validation if the path contains FFmpeg specific placeholders
309 | -   Fix purging default file from HTTP cache
310 | -   Fix parsing S3 storage definition from environment variable
311 | -   Fix checking length of CPU time array ([#10](https://github.com/datarhei/core/issues/10))
312 | -   Fix possible infinite loop with HLS session rewriter
313 | -   Fix not propagating process limits
314 | -   Fix URL validation if the path contains FFmpeg specific placeholders
315 | -   Fix RTMP DoS attack (thx Johannes Frank)
316 | -   Deprecate ENV names that do not correspond to JSON name
317 | 
318 | ### FFmpeg v5.1.2 > v5.1.3
319 | 
320 | -   Add alsa support by default
321 | -   Add min, max, avg of incoming framerates for each input and output (jsonstats patch)
322 | -   Add keyframe count for each input and output (jsonstats patch)
323 | -   Add size in bytes for each input and output (jsonstats patch)
324 | -   Mod bumps FFmpeg to v5.1.3
325 | 
326 | ### Thank you to all Patrons and donors
327 | 
328 | -   Martin H.
329 | -   Paulo Gonçalves
330 | -   Philipp Burkart
331 | -   Mark Stephens
332 | -   Fabian Stoll
333 | -   Perry Johnson
334 | -   Alex O'Carroll
335 | -   Fiberian
336 | -   Ivan Hašek
337 | -   krischan941
338 | -   Doug Roberts
339 | -   Bassim Charafeddine
340 | -   josue osorto
341 | -   Raketenbaum
342 | -   Byron Garcia
343 | -   Jeff Moe
344 | -   Ramakrishna Chillara
345 | -   Eduardo Sarabia
346 | -   Giovanni Russo
347 | -   Gioele Cerati
348 | -   Blueman2 (Robert G. Pearse)
349 | -   Alex Fuhr
350 | -   Frank Schulz
351 | 
352 | ## 2.5.0
353 | 
354 | ## Restreamer UI v1.6.0 > v1.7.0
355 | 
356 | -   Add analyzeduration, probesize and max_probe_packets input options
357 | -   Add avoid_negative_ts input option
358 | -   Add http_proxy input option ([#513](https://github.com/datarhei/restreamer/issues/513))
359 | -   Add copyts, start_at_zero and use_wallclock_as_timestamps input options
360 | -   Add heuristic to find core address if UI is proxied
361 | -   Add Turkish translation (thanks to Ramazan Sancar) ([#22](https://github.com/datarhei/restreamer-ui/issues/22))
362 | -   Add Danish translation (Thanks to Filip Stadler and Info)
363 | -   Add Slovenian translation (thanks to Grega)
364 | -   Add Greek translation
365 | -   Mod allows general input settings for pull and push streams
366 | -   Mod updates npm dependencies
367 | -   Fix Creative Commons icons
368 | -   Fix positioning of the deinterlacing filter ([#465](https://github.com/datarhei/restreamer/issues/465))
369 | 
370 | ### Core v16.11.0 > v16.12.0
371 | 
372 | -   Add S3 storage support
373 | -   Add support for variables in placeholde parameter
374 | -   Add support for RTMP token as stream key as last element in path
375 | -   Add support for soft memory limit with debug.memory_limit_mbytes in config
376 | -   Add support for partial process config updates
377 | -   Add support for alternative syntax for auth0 tenants as environment variable
378 | -   Fix config timestamps created_at and loaded_at
379 | -   Fix /config/reload return type
380 | -   Fix modifying DTS in RTMP packets ([#487](https://github.com/datarhei/restreamer/issues/487), [#367](https://github.com/datarhei/restreamer/issues/367))
381 | -   Fix default internal SRT latency to 20ms
382 | 
383 | ## 2.4.2
384 | 
385 | ### Restreamer UI v1.5.1 > v1.6.0
386 | 
387 | -   Add Bob Weaver Deinterlacing Filter ([#465](https://github.com/datarhei/restreamer/issues/465))
388 | -   Add tests for wizard, network source, and coders
389 | -   Add Korean translation (thanks to Jihaeng)
390 | -   Mod splitting wizard in components
391 | -   Fix wrong call to encoder defaults ([#467](https://github.com/datarhei/restreamer/issues/467))
392 | 
393 | ## 2.4.1
394 | 
395 | ### Restreamer UI v1.5.0 > v1.5.1
396 | 
397 | -   Fix FFmpeg version check for RTSP sources ([#455](https://github.com/datarhei/restreamer/issues/455))
398 | -   Fix requires Core >= v16.11.0 and FFmpeg >= 5.1.0
399 | 
400 | ## 2.4.0
401 | 
402 | ### Attention
403 | 
404 | Restreamer v2.4.0 includes an update to FFmpeg v5.1.2.
405 | All necessary process adjustments are activated at the first start of the Restreamer.
406 | 
407 | If you want to switch back to the old version follow these steps:  
408 | [https://docs.datarhei.com/restreamer/installing/migration](https://docs.datarhei.com/restreamer/installing/migration)
409 | 
410 | _Hint: The backup restores only the previous processes._
411 | 
412 | ### Restreamer UI v1.4.0 > v1.5.0
413 | 
414 | -   Add changelog viewer
415 | -   Add skills props to encoder and decoder components
416 | -   Add fps_mode to x264, x265, vp9 encoder
417 | -   Add scale filter to non-hwaccel encoders
418 | -   Add PeerTube and Media Network to publication services (plattforms, software)
419 | -   Add reset button to hide a player logo ([#431](https://github.com/datarhei/restreamer/issues/431))
420 | -   Mod expands V4L2_M2M options (an unstable RPI 64bit encoder)
421 | -   Mod indicates a faulty cache configuration
422 | -   Mod switches to the improved SRT syntax (thx to SA Consulting)
423 | -   Mod improves display of progress data
424 | -   Mod removes deprecated param ocl - now ochl (ff5)
425 | -   Mod simplifies the setup of Restreamer-to-Restreamer connections
426 | -   Mod adds Istafeed.me as StreamKey service to Instagram's publishing service
427 | -   Mod renames "Low delay" to "Low latency (buffer)" and set false as default (requires more feedback)
428 | -   Del removes support for clappr player
429 | -   Fix npm dependencies (security fixes)
430 | -   Fix videojs-overlay logo size ([#431](https://github.com/datarhei/restreamer/issues/431))
431 | -   Fix use of TLS for input from local RTMP server
432 | -   Fix Icecast publication service settings ([#429](https://github.com/datarhei/restreamer/issues/429))
433 | -   Fix removes SRT bitstream on tee (OBS > RTMP > SRT is faulty)
434 | 
435 | ### Core v16.10.1 > v16.11.0
436 | 
437 | -   Add FFmpeg v4.4 to FFmpeg v5.1 migration tool
438 | -   Add alternative SRT streamid
439 | -   Mod bump FFmpeg to v5.1.2 (datarhei/core:tag bundles)
440 | -   Fix crash with custom SSL certificates ([restreamer/#425](https://github.com/datarhei/restreamer/issues/425))
441 | -   Fix proper version handling for config
442 | -   Fix widged session data
443 | -   Fix resetting process stats when process stopped
444 | -   Fix stale FFmpeg process detection for streams with only audio
445 | -   Fix wrong return status code ([#6](https://github.com/datarhei/core/issues/6)))
446 | -   Fix use SRT defaults for key material exchange
447 | 
448 | ### FFmpeg v4.4.2 > v5.1.2
449 | 
450 | -   Mod FFmpeg v4.4.2 > v5.1.2 (+ patches)
451 | -   Mod Nvidia CUDA v11.4.2 > v11.7.1
452 | -   Mod Intel Media Driver v20.1.1
453 | 
454 | _We recommend OpenMAX IL for Raspberry PI (3/4) with a 32-bit operating system._
455 | 
456 | ### Documentation
457 | 
458 | -   Add [v2.4+ to v2.3.x (downgrade) migration guide](https://docs.datarhei.com/restreamer/installing/migration)
459 | -   Add [Windows install guides (Docker Desktop, Terminal)](https://docs.datarhei.com/restreamer/installing/windows)
460 | -   Add [OSX installation guide (Docker Desktop, Terminal)](https://docs.datarhei.com/restreamer/installing/mac)
461 | -   Mod small adjustments
462 | 
463 | ## 2.3.0
464 | 
465 | -   Mod exposes ports (Docker desktop)
466 | 
467 | ### Restreamer UI v1.2.0 > v1.4.0
468 | 
469 | -   Add email field for Let's Encrypt certification
470 | -   Add low_delay option to processing (default: true)
471 | -   Mod uses the ingest stream for publication ([#411](https://github.com/datarhei/restreamer/issues/411))
472 | -   Add dlive & Trovo publication services
473 | -   Mod optimized DVR on DiskFS
474 | -   Mod updates packages
475 | -   Fix SRT bitstream on tee
476 | -   Fix typo
477 | -   Fix viewer count (datarhei/restreamer#394)
478 | -   Fix user registration if username and/or password are set via environment ([#13](https://github.com/datarhei/restreamer-ui/issues/13))
479 | -   Fix Dockerfile, Reduce size, serve production build (datarhei/restreamer-ui#12)
480 | 
481 | ### Core v16.9.1 > v16.10.1
482 | 
483 | -   Add email address in TLS config for Let's Encrypt
484 | -   Add HLS session middleware to diskfs
485 | -   Add /v3/metrics (get) endpoint to list all known metrics
486 | -   Add logging HTTP request and response body sizes
487 | -   Add process id and reference glob pattern matching
488 | -   Add cache block list for extensions not to cache
489 | -   Mod exclude .m3u8 and .mpd files from disk cache by default
490 | -   Mod replaces x/crypto/acme/autocert with caddyserver/certmagic
491 | -   Mod exposes ports (Docker desktop)
492 | -   Fix use of Let's Encrypt production CA
493 | -   Fix assigning cleanup rules for diskfs
494 | -   Fix wrong path for swagger definition
495 | -   Fix process cleanup on delete, remove empty directories from disk
496 | -   Fix SRT blocking port on restart (upgrade datarhei/gosrt)
497 | -   Fix RTMP communication (Blackmagic Web Presenter, thx 235 MEDIA)
498 | -   Fix RTMP communication (Blackmagic ATEM Mini, datarhei/restreamer#385)
499 | -   Fix injecting commit, branch, and build info
500 | -   Fix API metadata endpoints responses
501 | 
502 | ## 2.2.0
503 | 
504 | ### Restreamer UI v1.1.0 > v1.2.0
505 | 
506 | -   Add allow writing HLS to disk
507 | -   Add audio pan filter
508 | -   Add video rotation filter ([#347](https://github.com/datarhei/restreamer/discussions/347))
509 | -   Add video h/v flip filter
510 | -   Add audio volume filter ([#313](https://github.com/datarhei/restreamer/issues/313))
511 | -   Add audio loudness normalization filter
512 | -   Add audio resample filter, that was before part of the encoders
513 | -   Add HLS Master playlist (requires FFmpeg hlsbitrate.patch) (thx Dwaynarang, Electra Player compatibility)
514 | -   Add linkedIn & Azure Media Services to publication services (thx kalashnikov)
515 | -   Add AirPlay support with silvermine videojs plugin
516 | -   Add Chromecast support (thx badincite, [#10](https://github.com/datarhei/restreamer-ui/pull/10))
517 | -   Add stream distribution across multiple internal servers
518 | -   Add SRT settings
519 | -   Add HLS version selection (thx Dwaynarang, Electra Player compatibility)
520 | -   Add Owncast to publication services ([#369](https://github.com/datarhei/restreamer/issues/369))
521 | -   Add Telegram to publication services (thx Martin Held)
522 | -   Add Polish translations (thx Robert Rykała)
523 | -   Mod extends the datarhei Core publication service with srt streaming
524 | -   Mod allow decoders and encoders to set global options
525 | -   Mod allow trailing slash on Core address
526 | -   Fix player problem with different stream formats (9:16)
527 | -   Fix process report naming
528 | -   Fix publication service icon styles
529 | -   Fix VAAPI encoder
530 | 
531 | ### Core v16.9.0 > v16.9.1
532 | 
533 | -   Fix v1 import app
534 | -   Fix race condition
535 | 
536 | ### Core v16.8.0 > v16.9.0
537 | 
538 | -   Add new placeholders and parameters for placeholder
539 | -   Add optional escape character to process placeholder
540 | -   Add experimental SRT connection stats and logs API
541 | -   Add experimental SRT server (datarhei/gosrt)
542 | -   Add trailing slash for routed directories ([#340](https://github.com/datarhei/restreamer/issues/340))
543 | -   Mod allow RTMP server if RTMPS server is enabled
544 | -   Mod create v16 in go.mod
545 | -   Mod allow relative URLs in content in static routes
546 | -   Fix output address validation for tee outputs
547 | -   Fix updating process config
548 | -   Fix hide /config/reload endpoint in reade-only mode
549 | -   Fix data races, tests, lint, and update dependencies
550 | 
551 | ## 2.1.0
552 | 
553 | -   Fix Dockerfile (bundles frontend, backend and FFmpeg)
554 | 
555 | ### Restreamer UI v1.0.0 > v1.1.0
556 | 
557 | -   Add "HLS cleanup" as an optional function ([Philipp Trenz](https://github.com/philipptrenz))
558 | -   Add /ui info to / ([#326](https://github.com/datarhei/restreamer/issues/326))
559 | -   Add Russian translation (thx Inthegamelp)
560 | -   Add missed VAAPI encoder
561 | -   Add missed V4L2_M2M encoder
562 | -   Add missed Raspberry Pi 64bit Docker image
563 | -   Mod updates VideoJS
564 | -   Add option to disable playersites share-button (thx Anders Mellgren)
565 | -   Fix hides unset content license on playersite (thx Anders Mellgren)
566 | -   Fix updates V4L2 device-list on select
567 | -   Fix snapshot interval ([#341](https://github.com/datarhei/restreamer/issues/340))
568 | -   Fix reverse proxy issue ([#340](https://github.com/datarhei/restreamer/issues/340))
569 | -   Fix double escape failer ([#336](https://github.com/datarhei/restreamer/issues/336))
570 | -   Fix type in player plugin ([#336](https://github.com/datarhei/restreamer/issues/336))
571 | -   Fix deletes processes with dependencies (thx Patron Ramakrishna Chillara)
572 | -   Fix datarhei Core publication service
573 | -   Fix dependabot alerts
574 | -   Fix code scanning alerts
575 | -   Merge security pr
576 | 
577 | Preparation for FFmpeg v5.0 (migration will not work)
578 | 
579 | -   Add FFmpeg v5.0 commands (preparation)
580 | -   Mod allows FFmpeg v5.0 (preparation)
581 | 
582 | ### Core v16.7.2 > v16.8.0
583 | 
584 | -   Add purge_on_delete function
585 | -   Mod updated dependencies
586 | -   Mod updated API docs
587 | -   Fix disabled session logging
588 | -   Fix FFmpeg skills reload
589 | -   Fix ignores processes with invalid references (thx Patron Ramakrishna Chillara)
590 | -   Fix code scanning alerts
591 | 
592 | ### FFmpeg v4.2.2 > v4.2.2-1
593 | 
594 | -   Mod enables libv4l2 + v4l2_m2m for all Docker images ([#339](https://github.com/datarhei/restreamer/issues/339))
595 | -   Mod updates packages (freetype, libxml2, VAAPI-Libs (gmmlib, media-driver, media-sdk))
596 | -   Fix cuda Docker image ([#328](https://github.com/datarhei/restreamer/issues/328))
597 | -   Fix VAAPI Docker image
598 | 
599 | ### FFmpeg v5.0.1
600 | 
601 | -   Add FFmpeg v5.0 JSONSTATS patch (preparation)
602 | 
603 | ### Documentation
604 | 
605 | -   Add [Basic troubleshooting guide](https://docs.datarhei.com/restreamer/knowledge-base/troubleshooting/basic-troubleshooting)
606 | -   Add [custom playersite guide](https://docs.datarhei.com/restreamer/knowledge-base/user-guides/how-to-integrate-a-website) ([#337](https://github.com/datarhei/restreamer/issues/337))
607 | -   Add [guide for custom RTMP port](https://docs.datarhei.com/restreamer/knowledge-base/user-guides/how-to-change-the-rtmp-port)
608 | -   Add [encoding compatiblity list](https://docs.datarhei.com/restreamer/knowledge-base/troubleshooting/encoding-compatibility-list))
609 | 


--------------------------------------------------------------------------------
/CODE_OF_CONDUCT.md:
--------------------------------------------------------------------------------
 1 | Contributor Code of Conduct
 2 | ===========================
 3 | 
 4 | As contributors and maintainers of this project, we pledge to respect all
 5 | people who contribute through reporting issues, posting feature requests,
 6 | updating documentation, submitting pull requests or patches, and other
 7 | activities.
 8 | 
 9 | Examples of unacceptable behavior by participants include:
10 | - Sexual language or imagery.
11 | - Derogatory comments or personal attacks.
12 | - Trolling, public or private harassment.
13 | - Insults.
14 | - Other unprofessional conduct.
15 | 
16 | Examples of unacceptable behavior by participants include sexual
17 | language or imagery, derogatory comments or personal attacks, trolling, public
18 | or private harassment, insults, or other unprofessional conduct.
19 | 
20 | Project maintainers have the right and responsibility to remove, edit, or reject 
21 | comments, commits, code, wiki edits, issues, and other contributions that are not
22 | aligned with this Code of Conduct. In addition, project maintainers who do not
23 | follow the Code of Conduct may be removed from the project team.
24 | 
25 | This code of conduct applies both within a project and in public spaces when an
26 | individual represents the project or its community.
27 | 
28 | Instances of abusive, harassing, or otherwise unacceptable behavior may be
29 | reported by opening an issue or contacting one or more of the project maintainers.
30 | 
31 | This Code of Conduct is adapted from the [Contributor
32 | Covenant](https://contributor-covenant.org/), version 1.1.0, available at
33 | [https://contributor-covenant.org/version/1/1/0/](https://contributor-covenant.org/version/1/1/0/)
34 | 


--------------------------------------------------------------------------------
/CONTRIBUTING.md:
--------------------------------------------------------------------------------
1 | # How to contribute
2 | 
3 | Before you start developing, please start a discussion or open an issue. In principle, 
4 | pull requests are very welcome. However, contributing to the `datarhei Restreamer` is 
5 | currently sometimes tricky. We know this and are working on official guidelines to understand the code structures better.
6 | 
7 | If you have any questions, you can also send us an email at support@datarhei.com.
8 | 


--------------------------------------------------------------------------------
/Dockerfile:
--------------------------------------------------------------------------------
 1 | ARG RESTREAMER_UI_IMAGE=datarhei/restreamer-ui:latest
 2 | ARG CORE_IMAGE=datarhei/base:alpine-core-latest
 3 | ARG FFMPEG_IMAGE=datarhei/base:alpine-ffmpeg-latest
 4 | 
 5 | FROM $RESTREAMER_UI_IMAGE AS restreamer-ui
 6 | FROM $CORE_IMAGE AS core
 7 | FROM $FFMPEG_IMAGE
 8 | 
 9 | COPY --from=core /core /core
10 | COPY --from=restreamer-ui /ui/build /core/ui
11 | 
12 | ADD https://raw.githubusercontent.com/datarhei/restreamer/2.x/CHANGELOG.md /core/ui/CHANGELOG.md
13 | COPY ./run.sh /core/bin/run.sh
14 | COPY ./ui-root /core/ui-root
15 | 
16 | RUN ffmpeg -buildconf
17 | 
18 | ENV CORE_CONFIGFILE=/core/config/config.json
19 | ENV CORE_DB_DIR=/core/config
20 | ENV CORE_ROUTER_UI_PATH=/core/ui
21 | ENV CORE_STORAGE_DISK_DIR=/core/data
22 | 
23 | EXPOSE 8080/tcp
24 | EXPOSE 8181/tcp
25 | EXPOSE 1935/tcp
26 | EXPOSE 1936/tcp
27 | EXPOSE 6000/udp
28 | 
29 | VOLUME ["/core/data", "/core/config"]
30 | ENTRYPOINT ["/core/bin/run.sh"]
31 | WORKDIR /core
32 | 


--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
  1 |                                  Apache License
  2 |                            Version 2.0, January 2004
  3 |                         http://www.apache.org/licenses/
  4 | 
  5 |    TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
  6 | 
  7 |    1. Definitions.
  8 | 
  9 |       "License" shall mean the terms and conditions for use, reproduction,
 10 |       and distribution as defined by Sections 1 through 9 of this document.
 11 | 
 12 |       "Licensor" shall mean the copyright owner or entity authorized by
 13 |       the copyright owner that is granting the License.
 14 | 
 15 |       "Legal Entity" shall mean the union of the acting entity and all
 16 |       other entities that control, are controlled by, or are under common
 17 |       control with that entity. For the purposes of this definition,
 18 |       "control" means (i) the power, direct or indirect, to cause the
 19 |       direction or management of such entity, whether by contract or
 20 |       otherwise, or (ii) ownership of fifty percent (50%) or more of the
 21 |       outstanding shares, or (iii) beneficial ownership of such entity.
 22 | 
 23 |       "You" (or "Your") shall mean an individual or Legal Entity
 24 |       exercising permissions granted by this License.
 25 | 
 26 |       "Source" form shall mean the preferred form for making modifications,
 27 |       including but not limited to software source code, documentation
 28 |       source, and configuration files.
 29 | 
 30 |       "Object" form shall mean any form resulting from mechanical
 31 |       transformation or translation of a Source form, including but
 32 |       not limited to compiled object code, generated documentation,
 33 |       and conversions to other media types.
 34 | 
 35 |       "Work" shall mean the work of authorship, whether in Source or
 36 |       Object form, made available under the License, as indicated by a
 37 |       copyright notice that is included in or attached to the work
 38 |       (an example is provided in the Appendix below).
 39 | 
 40 |       "Derivative Works" shall mean any work, whether in Source or Object
 41 |       form, that is based on (or derived from) the Work and for which the
 42 |       editorial revisions, annotations, elaborations, or other modifications
 43 |       represent, as a whole, an original work of authorship. For the purposes
 44 |       of this License, Derivative Works shall not include works that remain
 45 |       separable from, or merely link (or bind by name) to the interfaces of,
 46 |       the Work and Derivative Works thereof.
 47 | 
 48 |       "Contribution" shall mean any work of authorship, including
 49 |       the original version of the Work and any modifications or additions
 50 |       to that Work or Derivative Works thereof, that is intentionally
 51 |       submitted to Licensor for inclusion in the Work by the copyright owner
 52 |       or by an individual or Legal Entity authorized to submit on behalf of
 53 |       the copyright owner. For the purposes of this definition, "submitted"
 54 |       means any form of electronic, verbal, or written communication sent
 55 |       to the Licensor or its representatives, including but not limited to
 56 |       communication on electronic mailing lists, source code control systems,
 57 |       and issue tracking systems that are managed by, or on behalf of, the
 58 |       Licensor for the purpose of discussing and improving the Work, but
 59 |       excluding communication that is conspicuously marked or otherwise
 60 |       designated in writing by the copyright owner as "Not a Contribution."
 61 | 
 62 |       "Contributor" shall mean Licensor and any individual or Legal Entity
 63 |       on behalf of whom a Contribution has been received by Licensor and
 64 |       subsequently incorporated within the Work.
 65 | 
 66 |    2. Grant of Copyright License. Subject to the terms and conditions of
 67 |       this License, each Contributor hereby grants to You a perpetual,
 68 |       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
 69 |       copyright license to reproduce, prepare Derivative Works of,
 70 |       publicly display, publicly perform, sublicense, and distribute the
 71 |       Work and such Derivative Works in Source or Object form.
 72 | 
 73 |    3. Grant of Patent License. Subject to the terms and conditions of
 74 |       this License, each Contributor hereby grants to You a perpetual,
 75 |       worldwide, non-exclusive, no-charge, royalty-free, irrevocable
 76 |       (except as stated in this section) patent license to make, have made,
 77 |       use, offer to sell, sell, import, and otherwise transfer the Work,
 78 |       where such license applies only to those patent claims licensable
 79 |       by such Contributor that are necessarily infringed by their
 80 |       Contribution(s) alone or by combination of their Contribution(s)
 81 |       with the Work to which such Contribution(s) was submitted. If You
 82 |       institute patent litigation against any entity (including a
 83 |       cross-claim or counterclaim in a lawsuit) alleging that the Work
 84 |       or a Contribution incorporated within the Work constitutes direct
 85 |       or contributory patent infringement, then any patent licenses
 86 |       granted to You under this License for that Work shall terminate
 87 |       as of the date such litigation is filed.
 88 | 
 89 |    4. Redistribution. You may reproduce and distribute copies of the
 90 |       Work or Derivative Works thereof in any medium, with or without
 91 |       modifications, and in Source or Object form, provided that You
 92 |       meet the following conditions:
 93 | 
 94 |       (a) You must give any other recipients of the Work or
 95 |           Derivative Works a copy of this License; and
 96 | 
 97 |       (b) You must cause any modified files to carry prominent notices
 98 |           stating that You changed the files; and
 99 | 
100 |       (c) You must retain, in the Source form of any Derivative Works
101 |           that You distribute, all copyright, patent, trademark, and
102 |           attribution notices from the Source form of the Work,
103 |           excluding those notices that do not pertain to any part of
104 |           the Derivative Works; and
105 | 
106 |       (d) If the Work includes a "NOTICE" text file as part of its
107 |           distribution, then any Derivative Works that You distribute must
108 |           include a readable copy of the attribution notices contained
109 |           within such NOTICE file, excluding those notices that do not
110 |           pertain to any part of the Derivative Works, in at least one
111 |           of the following places: within a NOTICE text file distributed
112 |           as part of the Derivative Works; within the Source form or
113 |           documentation, if provided along with the Derivative Works; or,
114 |           within a display generated by the Derivative Works, if and
115 |           wherever such third-party notices normally appear. The contents
116 |           of the NOTICE file are for informational purposes only and
117 |           do not modify the License. You may add Your own attribution
118 |           notices within Derivative Works that You distribute, alongside
119 |           or as an addendum to the NOTICE text from the Work, provided
120 |           that such additional attribution notices cannot be construed
121 |           as modifying the License.
122 | 
123 |       You may add Your own copyright statement to Your modifications and
124 |       may provide additional or different license terms and conditions
125 |       for use, reproduction, or distribution of Your modifications, or
126 |       for any such Derivative Works as a whole, provided Your use,
127 |       reproduction, and distribution of the Work otherwise complies with
128 |       the conditions stated in this License.
129 | 
130 |    5. Submission of Contributions. Unless You explicitly state otherwise,
131 |       any Contribution intentionally submitted for inclusion in the Work
132 |       by You to the Licensor shall be under the terms and conditions of
133 |       this License, without any additional terms or conditions.
134 |       Notwithstanding the above, nothing herein shall supersede or modify
135 |       the terms of any separate license agreement you may have executed
136 |       with Licensor regarding such Contributions.
137 | 
138 |    6. Trademarks. This License does not grant permission to use the trade
139 |       names, trademarks, service marks, or product names of the Licensor,
140 |       except as required for reasonable and customary use in describing the
141 |       origin of the Work and reproducing the content of the NOTICE file.
142 | 
143 |    7. Disclaimer of Warranty. Unless required by applicable law or
144 |       agreed to in writing, Licensor provides the Work (and each
145 |       Contributor provides its Contributions) on an "AS IS" BASIS,
146 |       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
147 |       implied, including, without limitation, any warranties or conditions
148 |       of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
149 |       PARTICULAR PURPOSE. You are solely responsible for determining the
150 |       appropriateness of using or redistributing the Work and assume any
151 |       risks associated with Your exercise of permissions under this License.
152 | 
153 |    8. Limitation of Liability. In no event and under no legal theory,
154 |       whether in tort (including negligence), contract, or otherwise,
155 |       unless required by applicable law (such as deliberate and grossly
156 |       negligent acts) or agreed to in writing, shall any Contributor be
157 |       liable to You for damages, including any direct, indirect, special,
158 |       incidental, or consequential damages of any character arising as a
159 |       result of this License or out of the use or inability to use the
160 |       Work (including but not limited to damages for loss of goodwill,
161 |       work stoppage, computer failure or malfunction, or any and all
162 |       other commercial damages or losses), even if such Contributor
163 |       has been advised of the possibility of such damages.
164 | 
165 |    9. Accepting Warranty or Additional Liability. While redistributing
166 |       the Work or Derivative Works thereof, You may choose to offer,
167 |       and charge a fee for, acceptance of support, warranty, indemnity,
168 |       or other liability obligations and/or rights consistent with this
169 |       License. However, in accepting such obligations, You may act only
170 |       on Your own behalf and on Your sole responsibility, not on behalf
171 |       of any other Contributor, and only if You agree to indemnify,
172 |       defend, and hold each Contributor harmless for any liability
173 |       incurred by, or claims asserted against, such Contributor by reason
174 |       of your accepting any such warranty or additional liability.
175 | 
176 |    END OF TERMS AND CONDITIONS
177 | 
178 |    APPENDIX: How to apply the Apache License to your work.
179 | 
180 |       To apply the Apache License to your work, attach the following
181 |       boilerplate notice, with the fields enclosed by brackets "{}"
182 |       replaced with your own identifying information. (Don't include
183 |       the brackets!)  The text should be enclosed in the appropriate
184 |       comment syntax for the file format. We also recommend that a
185 |       file or class name and description of purpose be included on the
186 |       same "printed page" as the copyright notice for easier
187 |       identification within third-party archives.
188 | 
189 |    Copyright 2022 FOSS GmbH
190 | 
191 |    Licensed under the Apache License, Version 2.0 (the "License");
192 |    you may not use this file except in compliance with the License.
193 |    You may obtain a copy of the License at
194 | 
195 |        http://www.apache.org/licenses/LICENSE-2.0
196 | 
197 |    Unless required by applicable law or agreed to in writing, software
198 |    distributed under the License is distributed on an "AS IS" BASIS,
199 |    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
200 |    See the License for the specific language governing permissions and
201 |    limitations under the License.
202 | 
203 | 


--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
  1 | <h1 align="center">Restreamer</h1>
  2 | <h3 align="center">A really nice and free alternative for handling live streams.</h3>
  3 | <p align="center">
  4 | <a href="https://github.com/datarhei/restreamer/blob/2.x/LICENSE" target="_blank"><img src="https://img.shields.io/github/license/datarhei/restreamer" alt="License" /></a>
  5 | <a href="https://github.com/datarhei/restreamer/releases" target="_blank"><img src="https://img.shields.io/github/v/release/datarhei/restreamer?include_prereleases" alt="License" /></a>
  6 | <a href="https://hub.docker.com/r/datarhei/restreamer" target="_blank"><img src="https://img.shields.io/docker/pulls/datarhei/restreamer" alt="Docker pulls" /></a>
  7 | <a href="https://docs.datarhei.com/restreamer/getting-started/quick-start" target="_blank"><img src="https://img.shields.io/badge/documentation-get%20started-green" alt="Documentation" /></a>
  8 | </p>
  9 | <p align="center"><a href="https://demo.datarhei.com/ui" target="_blank">Try live demo</a><br />
 10 | <a href="https://demo.datarhei.com/ui" target="_blank"><img src="https://img.shields.io/badge/username-admin-blue" alt="demo username" /></a>
 11 | <a href="https://demo.datarhei.com/ui" target="_blank"><img src="https://img.shields.io/badge/password-demo-blue" alt="demo password" /></a>
 12 | 
 13 | <p align="center">
 14 |   <a href="https://datarhei.com">
 15 |     <img src="https://github.com/datarhei/restreamer/blob/2.x/readme-promo.gif" alt="Restreamer Promo Video" />
 16 |   </a>
 17 | </p>
 18 | 
 19 | <p align="center">Self-hosting solution to stream live to your website and publish to many like YouTube-Live, Twitter, Twitch, Vimeo, and other platforms or services. Our Docker-Image is easy to install and runs on Linux environments (MacOS/Windows by Docker Desktop). Moreover, combine the Restreamer with single-board computers like Raspberry Pi or GPU powered systems for Video-Encoding.</p>
 20 | <br />
 21 | <hr />
 22 | 
 23 | ## Features
 24 | 
 25 | - Simplified User-Interface
 26 | - Easy wizard configuration
 27 | - Multiple audio/video inputs, outputs, protocols, and codecs
 28 | - ReStreaming to platforms such as YouTube-Live, to software such as Wowza Media Server, and others based on protocols such as RTMP, SRT, ...
 29 | - Option to mux a separate audio channel to the video
 30 | - Build-in VideoJS-Player for your Website
 31 | - Configurable publication website for streaming without player embedding
 32 | - Content license with Creative Commons
 33 | - HTTP/S- (HLS), RTMP/S- & SRT-Streaming Server
 34 | - Automatic Let's Encrypt HTTPS certification
 35 | - Viewer/Bandwidth Monitoring and limiting
 36 | - Raspberry Pi (MMAL/OMX), Nvidia Cuda, Intel VAAPI support
 37 | - Support for Hardware- and Virtual-Devices
 38 | - FFmpeg Video-Processing (as native as possible)
 39 | - REST-API (JSON) and 100% Swagger documented
 40 | - Resource Monitoring (optionally by Prom-Metrics)
 41 | - Server- and Process-Logging
 42 | - GDPR compliant without third-party providers and does not save audience data
 43 | 
 44 | ## Quick setup
 45 | 
 46 | ### AMD64/ARMv7/ARM64:
 47 | ```sh
 48 | docker run -d --restart=always --name restreamer \
 49 |    -v /opt/restreamer/config:/core/config -v /opt/restreamer/data:/core/data \
 50 |    -p 8080:8080 -p 8181:8181 \
 51 |    -p 1935:1935 -p 1936:1936 \
 52 |    -p 6000:6000/udp \
 53 |    datarhei/restreamer:latest
 54 | ```
 55 | 
 56 | *`--privileged` just for local devices like usb cameras.*    
 57 | *Try `--security-opt seccomp=unconfined` if no network source can be reached.*
 58 | 
 59 | ### ARMv7/ARM64 Raspberry Pi:
 60 | ```sh
 61 | docker run -d --restart=always --name restreamer \
 62 |    -v /opt/restreamer/config:/core/config -v /opt/restreamer/data:/core/data \
 63 |    --privileged \
 64 |    -p 8080:8080 -p 8181:8181 \
 65 |    -p 1935:1935 -p 1936:1936 \
 66 |    -p 6000:6000/udp \
 67 |    datarhei/restreamer:rpi-latest
 68 | ```
 69 | 
 70 | *`--privileged` just for local devices like usb cameras.*    
 71 | *Try `--security-opt seccomp=unconfined` if no network source can be reached.*
 72 | 
 73 | ### AMD64 Nvidia Cuda:
 74 | ```sh
 75 | docker run -d --restart=always --name restreamer \
 76 |    -v /opt/restreamer/config:/core/config -v /opt/restreamer/data:/core/data \
 77 |    --runtime=nvidia --privileged \
 78 |    -p 8080:8080 -p 8181:8181 \
 79 |    -p 1935:1935 -p 1936:1936 \
 80 |    -p 6000:6000/udp \
 81 |    datarhei/restreamer:cuda-latest
 82 | ```
 83 | 
 84 | *`--privileged` just for local devices like usb cameras.*    
 85 | *Try `--security-opt seccomp=unconfined` if no network source can be reached.*
 86 | 
 87 | ### AMD64 Intel VAAPI:
 88 | ```sh
 89 | docker run -d --restart=always --name restreamer \
 90 |    -v /opt/restreamer/config:/core/config -v /opt/restreamer/data:/core/data \
 91 |    -v /dev/dri:/dev/dri --privileged \
 92 |    -p 8080:8080 -p 8181:8181 \
 93 |    -p 1935:1935 -p 1936:1936 \
 94 |    -p 6000:6000/udp \
 95 |    datarhei/restreamer:vaapi-latest
 96 | ```
 97 | 
 98 | *`--privileged` just for local devices like usb cameras.*    
 99 | *Try `--security-opt seccomp=unconfined` if no network source can be reached.*
100 | 
101 | *For external access (http/s, rtmp/s, srt), port forwarding from your Internet-Router to the Restreamer's internal IP address may need to be set up.*
102 | 
103 | ## Documentation
104 | 
105 | Documentation is available on [docs.datarhei.com/restreamer](https://docs.datarhei.com/restreamer). We give many pieces of information, from setting up a camera, embedding your player upon your website, and streaming to services like, e.g., YouTube-Live, and many more.
106 | 
107 | - [Quick start](https://docs.datarhei.com/restreamer/getting-started/quick-start)
108 | - [Installation](https://docs.datarhei.com/restreamer/installing/minimum-requirements)
109 | - [Manual](https://docs.datarhei.com/restreamer/knowledge-base/manual)
110 | - [Guides](https://docs.datarhei.com/restreamer/knowledge-base/user-guides)
111 | 
112 | ## Development
113 | 
114 | ### Create a custom image (bundle):
115 | 
116 | #### [Restreamer FFmpeg](https://github.com/datarhei/ffmpeg):
117 | ```
118 | $ git clone github.com/datarhei/ffmpeg
119 | $ cd ffmpeg
120 | $ docker build -f Dockerfile.alpine -t myffmpeg .
121 | ```
122 | 
123 | #### [Restreamer backend](https://github.com/datarhei/core) (Golang):
124 | 
125 | ```
126 | $ git clone github.com/datarhei/core
127 | $ cd core
128 | $ docker build -t mycore .
129 | ```
130 | 
131 | #### [Restreamer interface](https://github.com/datarhei/restreamer-ui) (React):
132 | ```
133 | $ git clone github.com/datarhei/restreamer-ui
134 | $ cd restreamer-ui
135 | $ docker build -t myrsui .
136 | ```
137 | 
138 | #### Restreamer bundle:
139 | ```
140 | $ git clone github.com/datarhei/restreamer
141 | $ cd restreamer
142 | $ docker build --build-arg FFMPEG_IMAGE=myffmpeg --build-arg CORE_IMAGE=mycore --build-arg RESTREAMER_UI_IMAGE=myrsui -t myrestreamer .
143 | $ docker run -it --rm -p 8080:8080 myrestreamer
144 | ```
145 | 
146 | ### To add/fix translations in the [Restreamer interface](https://github.com/datarhei/restreamer-ui):
147 | 
148 | The Restreamer interface is currently translated in different languages, such as German, French, Italian, Spanish, and more. If you find errors in the translations or have better suggestions for some sentences, you can become a translation contributor on [poeditor.com](https://poeditor.com/join/project/ogATl3F48K).
149 | There you can also start a translation into a language that is not yet available in the Restreamer interface.
150 | 
151 | Contribute to the translations on: [https://poeditor.com/join/project/ogATl3F48K](https://poeditor.com/join/project/ogATl3F48K)
152 | 
153 | ## Community support
154 | 
155 | For general help using Restreamer, please refer to the official [documentation](https://docs.datarhei.com/restreamer). For additional support, you can use Github to ask a question (Bug reports, Contributions, Features).
156 | 
157 | ## License
158 | See the [LICENSE](./LICENSE) file for licensing information.
159 | 
160 | ## Business inquiries
161 | **We provide support for commercial requirements with professional support, agile software development, and consulting.** If you have a commercial request, be it a bug or a feature enhancement, please contact us directly at support@datarhei.com.
162 | 


--------------------------------------------------------------------------------
/SECURITY.md:
--------------------------------------------------------------------------------
 1 | # Security Policy
 2 | 
 3 | ## Supported Versions
 4 | 
 5 | All versions in the list receive security updates.
 6 | 
 7 | | Version | Supported          |
 8 | | ------- | ------------------ |
 9 | | 2.0.0   | :white_check_mark: |
10 | | < 2.0   | :x:                |
11 | 
12 | ## Reporting a Vulnerability
13 | 
14 | If you have found or just suspect a security problem somewhere in Restreamer or Core, report it on support@datarhei.com.
15 | 
16 | We treat security issues with confidentiality until controlled and disclosed responsibly.
17 | 


--------------------------------------------------------------------------------
/_BUNDLE_OF:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/datarhei/restreamer/056921f120b24bf3904c1c7fac800e2515e4abde/_BUNDLE_OF


--------------------------------------------------------------------------------
/_RESTREAMER-UI+CORE:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/datarhei/restreamer/056921f120b24bf3904c1c7fac800e2515e4abde/_RESTREAMER-UI+CORE


--------------------------------------------------------------------------------
/readme-promo.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/datarhei/restreamer/056921f120b24bf3904c1c7fac800e2515e4abde/readme-promo.gif


--------------------------------------------------------------------------------
/readme.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/datarhei/restreamer/056921f120b24bf3904c1c7fac800e2515e4abde/readme.png


--------------------------------------------------------------------------------
/run.sh:
--------------------------------------------------------------------------------
 1 | #!/bin/sh
 2 | 
 3 | # Start script for the Restreamer bundle
 4 | 
 5 | # First run the import program. It will read the db.dir from the config file in order to
 6 | # find an old v1.json. This will be converted to the new db format.
 7 | 
 8 | if [ -x ./bin/import ]; then
 9 |     ./bin/import
10 |     if [ $? -ne 0 ]; then
11 |         exit 1
12 |     fi
13 | fi
14 | 
15 | # Run the FFmpeg migration program. In case a FFmpeg 5 binary is present, it will create a
16 | # backup of the current DB and modify the FFmpeg parameter such that they are compatible
17 | # with FFmpeg 5.
18 | 
19 | if [ -x ./bin/ffmigrate ]; then
20 |     ./bin/ffmigrate
21 |     if [ $? -ne 0 ]; then
22 |         exit 1
23 |     fi
24 | fi
25 | 
26 | # Create a hint for the admin interface if there is no index.html
27 | 
28 | if ! [ -f "${CORE_STORAGE_DISK_DIR}/index.html" ]; then
29 |     cp /core/ui-root/index.html /core/ui-root/index_icon.svg ${CORE_STORAGE_DISK_DIR}
30 | fi
31 | 
32 | # Now run the core with the possibly converted configuration.
33 | 
34 | exec ./bin/core
35 | 


--------------------------------------------------------------------------------
/ui-root/index.html:
--------------------------------------------------------------------------------
 1 | <html>
 2 | 	<head>
 3 | 		<meta charset="utf-8" />
 4 | 		<link rel="icon" href="./ui/favicon.ico" />
 5 | 		<meta name="viewport" content="minimum-scale=1, initial-scale=1, width=device-width" />
 6 | 		<meta name="theme-color" content="#000000" />
 7 | 		<meta name="description" content="Restreamer – Video-Streaming" />
 8 | 		<link rel="apple-touch-icon" href="./ui/logo192.png" />
 9 | 		<link rel="manifest" href="./ui/manifest.json" />
10 | 		<title>Restreamer</title>
11 | 		<style>
12 | 			html {
13 | 				background-color: rgb(26,26,26);
14 | 			}
15 | 			body {
16 | 				font-family: Arial, Helvetica, sans-serif;
17 | 				color: #fff;
18 | 			}
19 | 			a, a.hover {
20 | 				color: #fff;
21 | 			}
22 | 			hr {
23 | 				margin-bottom: 20px;
24 | 				border-color: rgba(0,0,0,.25);
25 | 			}
26 | 			p {
27 | 				vertical-align: middle;
28 | 				margin-top: -15px;
29 | 			}
30 | 			.container {
31 | 				width: 100%;
32 | 				height: 100%;
33 | 				display: flex;
34 | 				justify-content: center;
35 | 				align-items: center;
36 | 			}
37 | 			.box {
38 | 				width: 350px;
39 |     			height: 365px;
40 | 				background-color: rgba(56, 56, 56, .95);
41 | 				border-radius: 15px;
42 | 				text-align: center;
43 | 			}
44 | 			.icon {
45 | 				width: 285px;
46 |     			height: 190px;
47 | 				vertical-align: middle;
48 | 				margin: 30px;
49 | 			}
50 | 		</style>
51 | 	</head>
52 | 	<body>
53 | 		<div class="container">
54 | 			<div class="box">
55 | 				<img src='index_icon.svg' class="icon" alt='datarhei Restreamer logo' />
56 | 				<p style="padding: 10px 20px 20px 20px;">
57 | 					An easy to use video server and framework for video streaming.
58 | 				</p>
59 | 				<p>
60 | 					<hr>
61 | 					<a href='./ui/'>Did you mean to go to the admin panel?</a>
62 | 				</p>
63 | 			</div>
64 | 		</div>
65 | 	</body>
66 | </html>
67 | 


--------------------------------------------------------------------------------
/ui-root/index_icon.svg:
--------------------------------------------------------------------------------
1 | <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" baseProfile="basic" viewBox="0 0 271.5 181"><g fill="#fff"><path d="M15.635 163.337H4.512v15.935H1.251v-38.285h12.438c1.998 0 3.799.246 5.403.736 1.604.491 2.971 1.214 4.102 2.169 1.131.956 1.999 2.134 2.603 3.537.605 1.402.907 3.016.907 4.838 0 1.263-.193 2.45-.579 3.563s-.929 2.116-1.63 3.011c-.702.894-1.539 1.665-2.511 2.313-.973.649-2.047 1.148-3.221 1.499l9.571 16.276v.342H24.89l-9.255-15.934zm-11.123-2.761h9.913c1.49 0 2.8-.228 3.931-.684 1.131-.456 2.073-1.065 2.827-1.828.754-.762 1.319-1.647 1.696-2.655.376-1.008.565-2.055.565-3.143 0-1.314-.21-2.498-.631-3.55-.42-1.052-1.047-1.945-1.88-2.682-.833-.736-1.854-1.302-3.063-1.696-1.209-.394-2.603-.591-4.181-.591H4.512v16.829zM45.795 179.798c-1.858 0-3.568-.347-5.127-1.039-1.561-.692-2.906-1.656-4.037-2.893-1.13-1.235-2.011-2.704-2.643-4.404-.631-1.7-.946-3.567-.946-5.601v-1.131c0-2.191.329-4.176.986-5.956.657-1.778 1.547-3.295 2.669-4.549 1.122-1.253 2.415-2.222 3.878-2.905 1.463-.684 3.011-1.025 4.641-1.025 1.805 0 3.409.324 4.812.973 1.402.648 2.581 1.552 3.537 2.709.955 1.156 1.678 2.533 2.169 4.128s.736 3.339.736 5.232v1.92H36.171v.604c0 1.561.237 3.028.71 4.404s1.139 2.572 1.999 3.589c.858 1.018 1.884 1.819 3.076 2.406 1.192.588 2.515.881 3.971.881 1.683 0 3.168-.307 4.457-.92 1.288-.614 2.458-1.596 3.51-2.945l1.972 1.499c-.474.684-1.021 1.332-1.644 1.945-.623.614-1.346 1.148-2.169 1.604-.824.456-1.753.814-2.787 1.078-1.035.264-2.192.396-3.471.396zm-.579-26.821c-1.192 0-2.297.229-3.313.684-1.017.456-1.916 1.104-2.695 1.946-.78.842-1.42 1.854-1.919 3.037-.5 1.183-.837 2.494-1.013 3.931h17.065v-.342c-.036-1.191-.228-2.344-.579-3.458-.351-1.112-.864-2.099-1.538-2.958-.675-.858-1.512-1.547-2.511-2.063-.999-.519-2.165-.777-3.497-.777zM79.635 172.04c0-.578-.101-1.156-.302-1.735-.202-.578-.579-1.126-1.13-1.644-.552-.517-1.324-.999-2.314-1.445-.991-.447-2.274-.837-3.853-1.171-1.578-.332-2.984-.718-4.22-1.156s-2.279-.969-3.129-1.591c-.851-.622-1.495-1.363-1.933-2.223-.438-.858-.657-1.866-.657-3.023 0-1.052.232-2.051.697-2.998.464-.946 1.13-1.77 1.998-2.472.868-.7 1.92-1.257 3.156-1.669s2.625-.618 4.167-.618c1.647 0 3.125.215 4.431.645 1.306.43 2.41 1.025 3.313 1.788.903.762 1.591 1.66 2.064 2.694.473 1.035.71 2.156.71 3.366h-3.156c0-.736-.162-1.455-.486-2.156-.325-.701-.798-1.318-1.42-1.854-.623-.535-1.394-.969-2.314-1.302s-1.968-.5-3.142-.5c-1.227 0-2.274.149-3.142.447-.868.299-1.578.684-2.13 1.157-.552.473-.956 1.004-1.209 1.591-.254.587-.381 1.179-.381 1.774 0 .631.096 1.206.289 1.723.193.518.565.999 1.118 1.446s1.323.859 2.314 1.235c.99.378 2.283.75 3.878 1.118 1.718.403 3.199.851 4.444 1.341 1.244.491 2.274 1.074 3.089 1.748.815.676 1.42 1.446 1.814 2.314.395.867.592 1.871.592 3.011 0 1.175-.246 2.248-.736 3.221-.491.974-1.192 1.806-2.104 2.498-.912.693-2.016 1.232-3.313 1.617-1.297.386-2.744.579-4.338.579-1.806 0-3.401-.233-4.786-.697s-2.551-1.091-3.497-1.88c-.947-.789-1.661-1.696-2.143-2.722-.482-1.025-.723-2.091-.723-3.194h3.155c.07 1.121.359 2.055.868 2.8s1.14 1.341 1.894 1.788c.753.447 1.591.768 2.511.96.92.193 1.828.289 2.722.289 1.192 0 2.244-.14 3.155-.421.911-.28 1.678-.657 2.301-1.131.622-.473 1.091-1.016 1.407-1.63.314-.611.471-1.251.471-1.918zM94.756 143.537v7.283h5.889v2.577h-5.889v18.959c0 .999.1 1.801.301 2.405.201.605.475 1.078.816 1.42s.736.57 1.184.684c.445.114.914.171 1.406.171.473 0 .928-.03 1.367-.092.438-.062.832-.118 1.184-.171l.131 2.577c-.387.14-.891.25-1.512.328-.623.079-1.24.119-1.854.119-.895 0-1.723-.119-2.484-.355-.764-.236-1.416-.645-1.959-1.223-.545-.578-.969-1.345-1.275-2.301-.308-.955-.461-2.143-.461-3.562v-18.959h-5.232v-2.577H91.6v-7.283h3.156zM120.313 153.503c-.666-.123-1.376-.185-2.13-.185-1.069 0-2.033.158-2.893.474-.858.315-1.616.759-2.274 1.328-.657.569-1.209 1.245-1.656 2.024-.447.78-.802 1.644-1.064 2.59v19.537h-3.13V150.82h3.077l.053 4.523c.771-1.561 1.818-2.792 3.142-3.694 1.323-.903 2.949-1.354 4.878-1.354.386 0 .779.035 1.184.105.402.07.7.148.894.236l-.081 2.867zM135.801 179.798c-1.858 0-3.567-.347-5.127-1.039-1.561-.692-2.906-1.656-4.036-2.893-1.131-1.235-2.012-2.704-2.643-4.404-.632-1.7-.947-3.567-.947-5.601v-1.131c0-2.191.329-4.176.986-5.956.657-1.778 1.547-3.295 2.669-4.549 1.122-1.253 2.415-2.222 3.879-2.905 1.463-.684 3.011-1.025 4.641-1.025 1.806 0 3.409.324 4.812.973s2.581 1.552 3.537 2.709c.955 1.156 1.678 2.533 2.169 4.128.49 1.595.736 3.339.736 5.232v1.92h-20.3v.604c0 1.561.237 3.028.71 4.404.474 1.376 1.14 2.572 1.999 3.589.858 1.018 1.884 1.819 3.076 2.406 1.192.588 2.516.881 3.971.881 1.683 0 3.168-.307 4.457-.92 1.288-.614 2.458-1.596 3.51-2.945l1.973 1.499c-.474.684-1.021 1.332-1.644 1.945-.622.614-1.346 1.148-2.169 1.604-.824.456-1.754.814-2.788 1.078-1.035.264-2.192.396-3.471.396zm-.578-26.821c-1.192 0-2.297.229-3.313.684-1.017.456-1.915 1.104-2.695 1.946s-1.42 1.854-1.919 3.037c-.5 1.183-.838 2.494-1.013 3.931h17.065v-.342c-.035-1.191-.229-2.344-.578-3.458-.352-1.112-.864-2.099-1.539-2.958-.675-.858-1.512-1.547-2.511-2.063-.999-.519-2.165-.777-3.497-.777zM170.562 179.271c-.176-.49-.312-1.091-.408-1.801s-.162-1.434-.197-2.17c-.473.614-1.034 1.192-1.683 1.735-.648.544-1.376 1.018-2.183 1.42-.807.403-1.691.728-2.655.974-.965.245-2.008.368-3.129.368-1.386 0-2.643-.202-3.773-.605-1.131-.402-2.095-.968-2.893-1.695s-1.416-1.582-1.854-2.564c-.438-.981-.657-2.051-.657-3.208 0-1.384.298-2.633.894-3.747.596-1.112 1.455-2.06 2.577-2.84 1.121-.779 2.484-1.376 4.089-1.787 1.604-.412 3.405-.618 5.403-.618h5.837v-3.234c0-2.033-.627-3.633-1.88-4.799s-3.081-1.749-5.482-1.749c-1.104 0-2.121.149-3.05.447-.93.299-1.731.71-2.406 1.236-.675.525-1.201 1.135-1.577 1.827-.378.692-.565 1.433-.565 2.222l-3.155-.026c0-1.068.263-2.104.788-3.103.526-.999 1.267-1.889 2.223-2.669.955-.779 2.104-1.406 3.444-1.88s2.826-.71 4.457-.71c1.507 0 2.896.193 4.168.578 1.271.386 2.361.965 3.273 1.735.911.771 1.621 1.735 2.13 2.893.508 1.157.763 2.507.763 4.05v13.778c0 .491.017.999.052 1.524.035.526.093 1.035.171 1.525.079.491.171.96.276 1.407.105.446.228.837.368 1.17v.315h-3.366zm-9.886-2.261c1.139 0 2.195-.145 3.168-.434s1.854-.688 2.643-1.196c.789-.508 1.473-1.1 2.051-1.774.579-.675 1.043-1.407 1.394-2.196v-6.258h-5.39c-1.613 0-3.055.145-4.326.434-1.271.289-2.345.706-3.221 1.249-.877.544-1.547 1.206-2.012 1.985-.465.78-.696 1.661-.696 2.643 0 .771.148 1.495.446 2.169.298.676.724 1.263 1.275 1.762.553.5 1.223.895 2.012 1.184s1.673.432 2.656.432zM184.314 150.82l.105 4.628c.474-.771 1.021-1.477 1.644-2.116.622-.64 1.318-1.184 2.09-1.631.771-.446 1.613-.793 2.524-1.038s1.894-.368 2.945-.368c2.086 0 3.874.438 5.364 1.314 1.489.877 2.551 2.279 3.182 4.207.455-.788 1.003-1.521 1.644-2.195.64-.675 1.367-1.258 2.183-1.749.814-.49 1.713-.876 2.694-1.156s2.042-.421 3.182-.421c1.473 0 2.788.197 3.944.592 1.157.395 2.134 1.017 2.932 1.866.798.851 1.407 1.933 1.828 3.248.421 1.314.631 2.893.631 4.732v18.538h-3.155v-18.564c0-1.507-.167-2.756-.5-3.746s-.807-1.779-1.42-2.367c-.613-.587-1.345-.994-2.195-1.223-.851-.228-1.784-.342-2.801-.342-1.332.018-2.497.259-3.497.724-.999.464-1.845 1.052-2.537 1.762s-1.231 1.503-1.617 2.379c-.386.877-.613 1.728-.684 2.551v18.827h-3.155v-18.801c0-1.42-.167-2.603-.5-3.55-.333-.946-.806-1.709-1.42-2.287-.613-.579-1.345-.99-2.195-1.236-.851-.245-1.792-.368-2.826-.368-1.192 0-2.244.188-3.155.565-.912.377-1.705.881-2.38 1.512-.675.632-1.232 1.351-1.67 2.156-.438.807-.789 1.64-1.052 2.498v19.511h-3.155V150.82h3.022zM240.19 179.798c-1.858 0-3.567-.347-5.127-1.039-1.561-.692-2.906-1.656-4.036-2.893-1.131-1.235-2.012-2.704-2.643-4.404-.632-1.7-.947-3.567-.947-5.601v-1.131c0-2.191.329-4.176.986-5.956.657-1.778 1.547-3.295 2.669-4.549 1.122-1.253 2.415-2.222 3.879-2.905 1.463-.684 3.011-1.025 4.641-1.025 1.806 0 3.409.324 4.812.973s2.581 1.552 3.537 2.709c.955 1.156 1.678 2.533 2.169 4.128.49 1.595.736 3.339.736 5.232v1.92h-20.3v.604c0 1.561.237 3.028.71 4.404.474 1.376 1.14 2.572 1.999 3.589.858 1.018 1.884 1.819 3.076 2.406 1.192.588 2.516.881 3.971.881 1.683 0 3.168-.307 4.457-.92 1.288-.614 2.458-1.596 3.51-2.945l1.973 1.499c-.474.684-1.021 1.332-1.644 1.945-.622.614-1.346 1.148-2.169 1.604-.824.456-1.754.814-2.788 1.078-1.034.264-2.191.396-3.471.396zm-.578-26.821c-1.192 0-2.297.229-3.313.684-1.017.456-1.915 1.104-2.695 1.946s-1.42 1.854-1.919 3.037c-.5 1.183-.838 2.494-1.013 3.931h17.065v-.342c-.035-1.191-.229-2.344-.578-3.458-.352-1.112-.864-2.099-1.539-2.958-.675-.858-1.512-1.547-2.511-2.063-.999-.519-2.165-.777-3.497-.777zM270.14 153.503c-.666-.123-1.376-.185-2.13-.185-1.069 0-2.033.158-2.893.474-.858.315-1.616.759-2.274 1.328-.657.569-1.209 1.245-1.656 2.024-.447.78-.802 1.644-1.064 2.59v19.537h-3.13V150.82h3.077l.053 4.523c.771-1.561 1.818-2.792 3.142-3.694 1.323-.903 2.949-1.354 4.878-1.354.386 0 .779.035 1.184.105.402.07.7.148.894.236l-.081 2.867z"/></g><circle cx="133.75" cy="65.026" r="61.425" fill="#4d4d4d"/><image xlink:href="data:image/png;base64,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" width="122" height="167" overflow="visible" transform="translate(73.75 1)"/><g fill="#ff0"><path d="M162.18 82.63c-.811-.709-2.089-.778-3.661-.316l-3.588-7.959c.008-.006.014-.015.02-.021 1.565-1.786 1.387-4.501-.396-6.068-.022-.017.015-.106-.008-.123l7.006-7.993-.116-.103.605-1.064.02-.022.668-.755-.21.064 1.486-1.27h-.004l12.174-13.713c4.999-5.704 5.146-14.083.576-19.804l1.96-2.202-1.118-1.034L192.586 1.08 175.59 18.398l-1.151-1.021-1.92 2.189c-6.266-3.762-14.19-2.368-19.188 3.334l-11.58 13.89v.001L138.7 37.99l-.145-.082-.012.727.225-.028-.749.968.318.104-6.587 8.001v-.006c-1-1.491-4.859-1.396-6.425.389-.006.007-.189.013-.196.02l-8.451-2.516c.254-1.619-.029-2.88-.84-3.591-2.537-2.225-9.622 1.677-15.941 8.89-1.995 2.274-3.89 4.839-4.825 6.634l.543.479c-1.221 1.541-1.378 1.945-1.885 2.811l6.245 5.604c.794-.617 1.572-1.286 2.386-2.058l.528.495c1.993-1.547 4.068-3.496 6.063-5.772 3.034-3.463 5.313-7.019 6.588-10.034l8.417 2.531c.146.926.594 1.811 1.334 2.491-.15.215-.292.436-.431.653l-3.273 3.735 1.25 1.095c-.216.939-.331 1.875-.375 2.829l.259 3.689c.041.208.069.418.117.622l-1.595 1.822c-.925 1.05-.783 2.613.27 3.539l.471.415c-1.67 2.019-2.909 3.816-3.959 5.614l.529.499c-.661.906-1.259 1.812-1.764 2.68l6.306 5.534c.792-.615 1.602-1.315 2.414-2.087l.573.447c1.645-1.278 3.253-2.734 5.04-4.651l.478.419c1.054.926 2.516.979 3.44-.074l1.486-1.698-.051-.046c.608-.338.697-.092.992-.092l3.848-.456c.836-.167 1.65-.383 2.447-.673l1.274 1.123 3.266-3.726c.201-.166.401-.336.592-.519.785.686 1.747 1.029 2.714 1.056l3.61 8.015c-2.821 1.657-6.053 4.39-9.089 7.853-1.991 2.276-3.662 4.598-4.936 6.774l.545.479c-.658.905-1.249 1.802-1.756 2.667l6.402 5.431c.796-.615 1.57-1.277 2.511-2.194l.541.478c2.088-1.653 3.984-3.403 5.979-5.681 6.327-7.21 9.3-14.761 6.764-16.988zm-25.087-18.232c-1.786-1.565-1.964-4.281-.396-6.065 1.563-1.785 4.279-1.966 6.064-.398 1.785 1.562 1.963 4.281.397 6.063-1.562 1.786-4.278 1.966-6.065.4zm15.831-38.934 1.379-1.57c4.943-5.641 13.525-6.176 19.157-1.226l.233.206c5.634 4.95 6.242 13.511 1.299 19.152l-1.397 1.603-20.671-18.165z"/><path d="M172.019 24.55c-1.077-.929-2.263-1.646-3.494-2.157-4.169-1.26-8.791-.18-11.776 3.17l2.56 2.242c3.395-3.569 8.408-4.721 12.71-3.255z"/></g><path d="M162.652 82.759c-.81-.711-2.089-.782-3.662-.321l-3.586-7.957c.003-.008.012-.014.019-.022 1.566-1.787 1.388-4.5-.398-6.068-.024-.022-.054-.025-.077-.044l6.93-7.909-.116-.105.915-1.08.021-.022.668-.757-.066-.041 1.323-1.355 12.099-13.689c4.999-5.705 5.036-13.991.463-19.713l1.893-2.13-1.138-1.021L192.995 1.28l-2.666 2.719-16.619 18.899c.024.02.054.038.077.06l.233.206c5.633 4.949 6.314 13.427 1.374 19.071l-1.365 1.555-10.523-9.281-20.525 23.35c.085.064.172.128.249.199 1.787 1.566 1.967 4.281.403 6.068-1.566 1.783-4.281 1.962-6.067.399-.084-.074-.164-.154-.24-.232l-17.223 19.59 3.457 3.026c.795-.616 1.608-1.319 2.42-2.093l.504.526c1.645-1.275 3.186-2.651 4.97-4.573l.48.42c1.05.925 2.513.98 3.436-.076l1.486-1.699-.048-.042c.608-.337.695-.094.988-.094l3.923-.537c.838-.166 1.686-.421 2.482-.713l1.293 1.102 3.275-3.737c.2-.166.404-.342.596-.522.787.683 1.751 1.027 2.716 1.052l3.613 8.014c-2.821 1.662-6.055 4.386-9.088 7.849-1.996 2.277-3.665 4.598-4.938 6.778l.547.477c-.661.905-1.248 1.801-1.756 2.668l6.329 5.513c.795-.617 1.499-1.195 2.436-2.114l.547.48c2.088-1.651 4.054-3.484 6.05-5.762 6.323-7.213 9.37-14.842 6.831-17.067z" opacity=".15"/><g fill-rule="evenodd" clip-rule="evenodd"><path fill="#b3b3b3" d="M94.675 63.647c-2.156 1.324-3.253 4.285-3.309 6.185.11 1.753 5.486-2.621 5.442-4.628 1.34.65-.762 3.595-1.661 4.636-1.795 2.077-4.732 3.422-6.148 3.942-.292-3.067 1.428-8.609 5.229-10.46.149.107.299.215.447.325z"/><path fill="#fff" d="M98.29 65.767c-.565 1.149-1.126 2.694-1.978 3.891-.411.559-.82 1.122-1.23 1.684-2.548 2.996-5.353 4.342-8.211 5.359-.353-4.138 2.152-11.103 6.93-14.21-.822-.583 5.312 3.842 4.489 3.276zm-4.979 1.873c.828-1.224 1.313-2.394 1.927-3.583-.188-.136-.375-.271-.563-.409-.148-.11-.298-.218-.447-.326-3.8 1.851-5.521 7.393-5.229 10.46 1.416-.52 4.353-1.865 6.148-3.942.899-1.041 3.001-3.986 1.661-4.636-.112-.083-.225-.164-.336-.246-1.025.65-1.965 1.846-2.937 2.846-.122.118-.175-.023-.224-.164z"/></g><g fill-rule="evenodd" clip-rule="evenodd"><path fill="#999" d="M140.324 104.345c-2.279 1.1-3.669 3.937-3.918 5.817-.067 1.759 5.723-2.052 5.883-4.051 1.268.781-1.123 3.496-2.123 4.442-1.995 1.883-5.053 2.925-6.515 3.301.02-3.083 2.29-8.42 6.259-9.88.139.124.277.25.414.371z"/><path fill="#fff" d="M143.705 106.82c-.68 1.085-1.393 2.569-2.362 3.669-.464.516-.929 1.034-1.394 1.55-2.836 2.723-5.763 3.778-8.71 4.502.067-4.152 3.262-10.83 8.331-13.437-.758-.661 4.897 4.362 4.135 3.716zm-5.143 1.359c.946-1.132 1.548-2.248 2.277-3.369-.172-.154-.344-.309-.516-.465-.138-.122-.275-.247-.414-.37-3.969 1.459-6.239 6.796-6.259 9.88 1.462-.376 4.52-1.418 6.515-3.301 1-.946 3.391-3.662 2.123-4.442-.102-.094-.206-.187-.31-.28-1.085.542-2.144 1.638-3.211 2.532-.133.106-.169-.037-.205-.185z"/></g></svg>


--------------------------------------------------------------------------------