├── .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 | Streamlab 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 `