├── .env
├── .github
├── ISSUE_TEMPLATE
│ ├── bug_report.md
│ ├── feature_request.md
│ └── question.md
└── workflows
│ ├── deploy.yml
│ └── main.yml
├── .gitignore
├── .nvmrc
├── LICENSE
├── README.md
├── e2e
├── advanced.spec.ts
├── basic.spec.ts
├── history.spec.ts
├── page.ts
└── runner.js
├── manual-tests.md
├── package.json
├── public
├── favicon.ico
├── index.html
├── logo192.png
├── logo512.png
├── manifest.json
├── robots.txt
└── ui.png
├── src
├── App.css
├── App.tsx
├── __tests__
│ └── store
│ │ ├── actions
│ │ ├── history.test.ts
│ │ ├── player.test.ts
│ │ ├── playerOptions.test.ts
│ │ ├── streamDetails.test.ts
│ │ └── ui.test.ts
│ │ ├── model
│ │ ├── history.test.ts
│ │ ├── messageResolver.test.ts
│ │ ├── request-interceptors.test.ts
│ │ ├── sharing.test.ts
│ │ └── streamDetails.test.ts
│ │ └── reducers
│ │ ├── history.test.ts
│ │ ├── information.test.ts
│ │ ├── player.test.ts
│ │ ├── playerOptions.test.ts
│ │ ├── streamDetails.test.ts
│ │ └── ui.test.ts
├── components
│ ├── Header.tsx
│ ├── HeaderRows.tsx
│ ├── JsonEditor.tsx
│ ├── SidebarSwitch.tsx
│ └── react-split.d.ts
├── graphics
│ ├── replay-logo.svg
│ ├── streamlab-logo.svg
│ └── vimond-logo.svg
├── index.css
├── index.tsx
├── panels
│ ├── Advanced.tsx
│ ├── Basic.tsx
│ ├── FormHistory.tsx
│ ├── HeaderBar.tsx
│ ├── Information.tsx
│ ├── Player.tsx
│ ├── PlayerOptions.tsx
│ ├── Sharing.tsx
│ ├── Sidebar.tsx
│ ├── StreamDetails.tsx
│ └── VideoStreamerResolver.tsx
├── react-app-env.d.ts
├── serviceWorker.ts
└── store
│ ├── actions
│ ├── history.ts
│ ├── index.ts
│ ├── player.ts
│ ├── playerOptions.ts
│ ├── streamDetails.ts
│ └── ui.ts
│ ├── migrations.ts
│ ├── model
│ ├── history.ts
│ ├── messageResolver.ts
│ ├── messages.ts
│ ├── request-interceptors
│ │ ├── hlsjsRequestInterceptor.ts
│ │ ├── index.ts
│ │ └── shakaRequestInterceptor.ts
│ ├── sharing-old.js
│ ├── sharing.ts
│ └── streamDetails.ts
│ ├── persistentStore.ts
│ └── reducers
│ ├── history.ts
│ ├── index.ts
│ ├── information.ts
│ ├── player.ts
│ ├── playerOptions.ts
│ ├── streamDetails.ts
│ └── ui.ts
├── tsconfig.json
└── yarn.lock
/.env:
--------------------------------------------------------------------------------
1 | REACT_APP_VERSION=$npm_package_version
2 | PORT=3030
3 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/bug_report.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Bug report
3 | about: Report a problem with Streamlab
4 | title: '[BUG] '
5 | labels: 'bug'
6 |
7 | ---
8 |
9 | **Is the problem actually a Streamlab bug?**
10 |
11 | Streamlab and its player Replay facilitates stream playback with different technologies. However, for this it mainly relies on native browser features and/or third party libraries.
12 |
13 | Bug reports that in reality appear to be requests for troubleshooting playback issues with specific streams, will mainly be rejected.
14 |
15 | Before considering submitting a bug report, please get an understanding of whether the experienced issue is in fact a Streamlab bug, or if it is related to the stream or underlying third party player libraries.
16 |
17 | If you are not confident Streamlab is capable of playing your stream properly, you can test it in the demo/test pages for the third party player libraries themselves:
18 |
19 | https://hls-js.netlify.com/demo
20 | http://shaka-player-demo.appspot.com/
21 | https://developers.canal-plus.com/rx-player/
22 |
23 | If your stream also doesn't play here, refrain from submitting a Streamlab bug report.
24 |
25 | **Describe the bug**
26 |
27 | A clear and concise description of what the bug is.
28 |
29 | **To Reproduce**
30 |
31 | Use the Sharing feature to a share your stream setup/form data needed for reproduction:
32 |
33 | [Paste link here]
34 |
35 | Further steps to reproduce the behavior:
36 |
37 | 1. Click on '....'
38 | 2. Scroll down to '....'
39 | 3. See error [possibly in the Developer console]
40 |
41 | **Expected behavior**
42 |
43 | A clear and concise description of what you expected to happen.
44 |
45 | **Screenshots**
46 |
47 | If applicable, add screenshots to help explain your problem.
48 |
49 | **Desktop (please complete the following information):**
50 |
51 | - OS: [e.g. iOS]
52 | - Browser [e.g. chrome, safari]
53 | - Version [e.g. 22]
54 |
55 | **Smartphone (please complete the following information):**
56 |
57 | - Device: [e.g. iPhone6]
58 | - OS: [e.g. iOS8.1]
59 | - Browser [e.g. stock browser, safari]
60 | - Version [e.g. 22]
61 |
62 | **Additional context**
63 |
64 | - Video/stream type, characteristics (e.g. DVR, subtitles) and stream technologies (DASH, HLS) related to the problem.
65 | - Add any other context about the problem here.
66 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/feature_request.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Feature request
3 | about: Suggest an idea for this project
4 | title: '[FEATURE] '
5 |
6 | ---
7 |
8 | **Is your suggestion within the scope of the Streamlab project?**
9 |
10 | Some features should perhaps be added as part of the underlying player libraries, or in general externally to this project.
11 |
12 | **Is your feature request related to a problem? Please describe.**
13 |
14 | A clear and concise description of what the problem is.
15 |
16 | **Describe the solution you'd like**
17 |
18 | A clear and concise description of what you want to happen.
19 |
20 | **Describe alternatives you've considered**
21 |
22 | A clear and concise description of any alternative solutions or features you've considered.
23 |
24 | **Additional context**
25 |
26 | Add any other context or screenshots about the feature request here.
27 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/question.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Question
3 | about: Anything about Streamlab, except a bug report or feature request
4 | title: '[QUESTION] '
5 | labels: question
6 |
7 | ---
8 |
--------------------------------------------------------------------------------
/.github/workflows/deploy.yml:
--------------------------------------------------------------------------------
1 | name: Deploy to GitHub pages
2 |
3 | on:
4 | push:
5 | tags:
6 | - 'v[0-9]+.[0-9]+.[0-9]+'
7 |
8 | jobs:
9 | deploy:
10 | runs-on: ubuntu-latest
11 | steps:
12 | - name: Checkout
13 | uses: actions/checkout@v2.3.1
14 | with:
15 | persist-credentials: false
16 |
17 | - name: Set up Node.js 12
18 | uses: actions/setup-node@v1
19 | with:
20 | node-version: '12'
21 |
22 | - name: Install dependencies
23 | run: yarn install
24 |
25 | - name: Test
26 | run: |
27 | yarn lint
28 | yarn test
29 |
30 | - name: Build
31 | run: yarn build
32 |
33 | - name: Deploy 🚀
34 | uses: JamesIves/github-pages-deploy-action@3.7.1
35 | with:
36 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
37 | BRANCH: gh-pages
38 | FOLDER: build
39 |
--------------------------------------------------------------------------------
/.github/workflows/main.yml:
--------------------------------------------------------------------------------
1 | name: Test
2 |
3 | on:
4 | push:
5 | branches: [ master ]
6 | tags-ignore:
7 | - 'v[0-9]+.[0-9]+.[0-9]+*'
8 | workflow_dispatch:
9 |
10 | jobs:
11 | unittests:
12 | runs-on: ubuntu-latest
13 | steps:
14 | - uses: actions/checkout@v2
15 | - uses: actions/setup-node@v1
16 | with:
17 | node-version: 14
18 | - run: yarn install
19 | - run: yarn test
20 | env:
21 | CI: true
22 | e2esetup:
23 | runs-on: windows-latest
24 | steps:
25 | - uses: actions/checkout@v1
26 | - uses: actions/setup-node@v1
27 | with:
28 | node-version: 14
29 | - name: Cache node_modules
30 | uses: actions/cache@v1
31 | with:
32 | path: node_modules
33 | key: e2e-yarn-${{ hashFiles('**\yarn.lock') }}
34 | restore-keys: e2e-yarn-
35 | - run: yarn
36 | e2etests:
37 | needs: [e2esetup]
38 | runs-on: windows-latest
39 | strategy:
40 | matrix:
41 | browser: [chrome,firefox]
42 | steps:
43 | - uses: actions/checkout@v1
44 | - uses: actions/setup-node@v1
45 | with:
46 | node-version: 14
47 | - name: Restore node_modules cache
48 | uses: actions/cache@v1
49 | with:
50 | path: node_modules
51 | key: e2e-yarn-${{ hashFiles('**\yarn.lock') }}
52 | restore-keys: e2e-yarn-
53 | - run: yarn
54 | - name: Run test
55 | run: yarn test:e2e
56 | env:
57 | BROWSER: ${{ matrix.browser }}
58 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2 |
3 | # dependencies
4 | /node_modules
5 | /.pnp
6 | .pnp.js
7 |
8 | # testing
9 | /coverage
10 |
11 | # production
12 | /build
13 |
14 | # misc
15 | .npmrc
16 | .DS_Store
17 | .env.local
18 | .env.development.local
19 | .env.test.local
20 | .env.production.local
21 |
22 | npm-debug.log*
23 | yarn-debug.log*
24 | yarn-error.log*
25 |
26 | .idea
27 | *.iml
28 |
--------------------------------------------------------------------------------
/.nvmrc:
--------------------------------------------------------------------------------
1 | 14.15.4
2 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
2 |
3 | [Streamlab](https://vimond.github.io/streamlab/) is a cross-technology stream test tool for the browser, created by, and used by [Vimond](https://vimond.com) developers.
4 |
5 | Experiment with, verify, or troubleshoot MPEG-DASH, HLS, CMAF, and smooth streams, or progressive video files.
6 |
7 | The Streamlab provides a consistent and convenient user interface for playing adaptive streams through [Shaka Player](https://github.com/google/shaka-player), [RxPlayer](https://github.com/canalplus/rx-player), and [HLS.js](https://github.com/video-dev/hls.js), or directly through the browser's internal stream support in the HTML `