1
0
Fork 0
mirror of https://gitlab.com/futo-org/fcast.git synced 2025-06-24 21:25:23 +00:00

Updated readme for Electron player 2.0.0 release

This commit is contained in:
Michael Hollister 2024-11-19 17:44:17 -06:00
parent ce0865bca6
commit f7cc247d8b
8 changed files with 322 additions and 64 deletions

View file

@ -1,4 +1,20 @@
# FCast
<p align="center">
<br/>
<a href="https://opensource.org/license/mit"><img src="https://img.shields.io/badge/License-MIT-blue.svg?color=008BD7&style=for-the-badge&label=License&logoColor=000000&labelColor=ececec" alt="License: MIT"></a>
<br/>
<br/>
</p>
<p align="center">
<a href="https://fcast.org/">
<img src="website/images/ic_banner.svg" height="300">
</a>
</p>
<h3 align="center"> Open source protocol for audio and video content streaming</h3>
<br/>
## What is FCast?
FCast is an open source protocol that enables wireless streaming of audio and video content between devices, supporting various stream types such as DASH, HLS, and mp4.
@ -40,4 +56,4 @@ This project is licensed under the MIT License - see the LICENSE.md file for det
## Documentation
Click [here](https://gitlab.com/futo-org/fcast/-/wikis/Protocol-version-1) to see the protocol documentation.
Click [here](https://gitlab.futo.org/videostreaming/fcast/-/wikis/Protocol-version-1) to see the protocol documentation.

View file

@ -6,29 +6,31 @@ FCast is a protocol designed for wireless streaming of audio and video content b
The FCast receiver is a working receiver implementation compatible with Linux, Windows and MacOS that supports various stream types such as DASH, HLS and mp4.
![FCast receiver running on Linux](images/Untitled2.png)
![FCast receiver running on Linux](images/player-window.png)
# Protocol specification
The protocol specification can be found here https://gitlab.com/futo-org/fcast/-/wikis/home
The protocol specification can be found here https://gitlab.futo.org/videostreaming/fcast/-/wikis/home
# Senders
# Receiver application
# Receivers
There are currently receivers for
1. Download the latest build for your platform from https://gitlab.com/futo-org/fcast/-/releases or build it yourself by following the build instructions.
1. Download the latest build for your platform from https://fcast.org/#downloads or build it yourself by following the build instructions.
2. Unzip the archive at your desired location.
3. Run the FCast receiver.
- **MacOS:** Run the FCastReceiver application
- **MacOS:** Run the `FCast Receiver` application
- **Linux:** Run the `fcast-receiver` application
- **Windows:** Run the `fcast-receiver.exe` application
4. You should now have the receiver running on the background. On desktop it will have a tray icon as such allowing you to close the receiver.
4. The application will open the main window where you can setup a connection to your sender device.
![FCast receiver tray icon running on Linux](images/Untitled.png)
![Main window](images/main-window.png)
The application will continue to run in the system tray when you close the player or main window. You can exit the application or access other menu options from the tray icon.
There are also command line flags to customize application behavior, some of which include:
* `--no-main-window`: Hide the main window on start
* `--fullscreen`: Start the main window in fullscreen
Use the `--help` flag to see full list of available flags.
# Connecting to the FCast receiver with the video streaming application
@ -56,61 +58,38 @@ There are currently receivers for
# How to build
# Preparing for build
## Preparing for build
Run the following commands in the `root` directory.
A docker file is provided to setup your build environment. From the root of the repository:
* Build: `docker build -t fcast/receiver-electron-dev:latest receivers/electron/`
* Run: `docker run --rm -it -w /app/receivers/electron --entrypoint='bash' -v .:/app fcast/receiver-electron-dev:latest`
You can then run the following commands to finish setup.
```
npm install
```
# Building
## Development
Run the following commands in the `root` directory.
Run the following commands in the `/app/receivers/electron` directory.
* Build: `npm run build`
* Run: `npm run start`
```
npm run build
```
## Packaging
# Packaging
Below are the following platforms currently used for packaging:
* `npm run make -- --platform="darwin" --arch="arm64"`
* `npm run make -- --platform="darwin" --arch="x64"`
* `npm run make -- --platform="win32" --arch="x64"`
* `npm run make -- --platform="linux" --arch="x64"`
* `npm run make -- --platform="linux" --arch="arm64"`
## Windows
Other platforms and architectures supported by [Electron Forge](https://www.electronforge.io/) might work, but are currently untested.
Run the following commands in the `packaging` directory.
Packages that will be built from running the above `make` commands:
* Windows: `.msi` and `.zip`
* MacOS: `.dmg` and `.zip`
* Linux: `.deb`, `.rpm` and `.zip`
```
sh package.sh win32-x64
```
## MacOS ARM64
Run the following commands in the `packaging` directory.
```
sh package-macos.sh darwin-arm64
```
## MacOS x64
Run the following commands in the `packaging` directory.
```
sh package-macos.sh darwin-x64
```
## Linux ARM64
Run the following commands in the `packaging` directory.
```
sh package.sh linux-arm64
```
## Linux x64
Run the following commands in the `packaging` directory.
```
sh package.sh linux-x64
```
Package artifacts will be located in `/app/receivers/electron/out/make`

Binary file not shown.

Before

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 715 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 226 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1 MiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 41 KiB

View file

@ -1,4 +1,103 @@
<svg width="97" height="97" viewBox="0 0 97 97" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect width="97" height="97" rx="20" fill="#D9D9D9"/>
<path d="M17.0303 67V30.6364H42.5985V38.5909H26.9024V44.8409H41.036V52.7955H26.9024V67H17.0303ZM80.1784 44.2727H70.1642C70.0931 43.4441 69.9037 42.6925 69.596 42.0178C69.3 41.343 68.8857 40.763 68.3531 40.2777C67.8322 39.7805 67.199 39.4018 66.4532 39.1413C65.7075 38.8691 64.8611 38.733 63.9142 38.733C62.257 38.733 60.8543 39.1354 59.7061 39.9403C58.5697 40.7453 57.7056 41.8994 57.1137 43.4027C56.5337 44.906 56.2437 46.7112 56.2437 48.8182C56.2437 51.0436 56.5396 52.9079 57.1315 54.4112C57.7352 55.9027 58.6052 57.0272 59.7416 57.7848C60.8779 58.5305 62.2451 58.9034 63.8431 58.9034C64.7546 58.9034 65.5713 58.791 66.2934 58.5661C67.0155 58.3293 67.6428 57.992 68.1755 57.554C68.7082 57.116 69.1402 56.5893 69.4717 55.9737C69.815 55.3464 70.0458 54.642 70.1642 53.8608L80.1784 53.9318C80.06 55.4706 79.6279 57.0391 78.8822 58.6371C78.1365 60.2232 77.077 61.6911 75.7039 63.0405C74.3427 64.3781 72.6559 65.4553 70.6436 66.272C68.6312 67.0888 66.2934 67.4972 63.6301 67.4972C60.292 67.4972 57.2972 66.781 54.6457 65.3487C52.006 63.9164 49.9168 61.8094 48.3779 59.0277C46.8509 56.246 46.0874 52.8428 46.0874 48.8182C46.0874 44.7699 46.8687 41.3608 48.4312 38.5909C49.9937 35.8092 52.1007 33.7081 54.7522 32.2876C57.4037 30.8553 60.363 30.1392 63.6301 30.1392C65.9265 30.1392 68.0394 30.4529 69.9688 31.0803C71.8983 31.7076 73.591 32.625 75.047 33.8324C76.5029 35.0279 77.6748 36.5017 78.5626 38.2536C79.4504 40.0054 79.989 42.0118 80.1784 44.2727Z" fill="black"/>
<svg width="320" height="320" viewBox="0 0 320 320" fill="none" xmlns="http://www.w3.org/2000/svg">
<g clip-path="url(#clip0_200_650)">
<rect width="319.291" height="319.291" rx="72" fill="url(#paint0_linear_200_650)"/>
<path fill-rule="evenodd" clip-rule="evenodd" d="M205.646 77.6738C208.925 74.3951 206.603 68.7891 201.966 68.7891H75.9545C73.0802 68.7891 70.75 71.1192 70.75 73.9936V200.005C70.75 204.642 76.356 206.964 79.6347 203.685L103.168 180.152C104.144 179.176 104.692 177.852 104.692 176.472V107.933C104.692 105.059 107.022 102.729 109.897 102.729H178.436C179.816 102.729 181.14 102.18 182.116 101.204L205.646 77.6738Z" fill="#252525" fill-opacity="0.3"/>
<g filter="url(#filter0_dddddd_200_650)">
<path d="M141.456 183.508C142.714 183.508 143.734 184.528 143.734 185.786V213.126C143.734 214.385 142.714 215.405 141.456 215.405H114.571C113.313 215.405 112.293 214.385 112.293 213.126L112.293 185.786C112.293 184.528 113.313 183.508 114.571 183.508H141.456Z" fill="url(#paint1_linear_200_650)"/>
<path d="M141.456 147.965C142.714 147.965 143.734 148.985 143.734 150.244V177.584C143.734 178.842 142.714 179.862 141.456 179.862H114.571C113.313 179.862 112.293 178.842 112.293 177.584L112.293 150.244C112.293 148.985 113.313 147.965 114.571 147.965H141.456Z" fill="url(#paint2_linear_200_650)"/>
<path d="M176.543 147.965C177.801 147.965 178.821 148.985 178.821 150.244V177.584C178.821 178.842 177.801 179.862 176.543 179.862H149.658C148.4 179.862 147.38 178.842 147.38 177.584V150.244C147.38 148.985 148.4 147.965 149.658 147.965H176.543Z" fill="url(#paint3_linear_200_650)"/>
<path d="M176.543 112.423C177.801 112.423 178.821 113.443 178.821 114.701V142.041C178.821 143.3 177.801 144.32 176.543 144.32H149.658C148.4 144.32 147.38 143.3 147.38 142.041V114.701C147.38 113.443 148.4 112.423 149.658 112.423L176.543 112.423Z" fill="url(#paint4_linear_200_650)"/>
<path d="M211.629 147.965C212.888 147.965 213.908 148.985 213.908 150.244V177.584C213.908 178.842 212.888 179.862 211.629 179.862H184.745C183.486 179.862 182.466 178.842 182.466 177.584V150.244C182.466 148.985 183.486 147.965 184.745 147.965H211.629Z" fill="url(#paint5_linear_200_650)"/>
<path d="M176.543 183.508C177.801 183.508 178.821 184.528 178.821 185.786V213.126C178.821 214.385 177.801 215.405 176.543 215.405H149.658C148.4 215.405 147.38 214.385 147.38 213.126V185.786C147.38 184.528 148.4 183.508 149.658 183.508H176.543Z" fill="url(#paint6_linear_200_650)"/>
<path d="M211.629 112.423C212.888 112.423 213.908 113.443 213.908 114.701V142.041C213.908 143.3 212.888 144.32 211.629 144.32H184.745C183.486 144.32 182.466 143.3 182.466 142.041V114.701C182.466 113.443 183.486 112.423 184.745 112.423L211.629 112.423Z" fill="url(#paint7_linear_200_650)"/>
<path d="M141.456 112.423C142.714 112.423 143.734 113.443 143.734 114.701V142.041C143.734 143.3 142.714 144.32 141.456 144.32H114.571C113.313 144.32 112.293 143.3 112.293 142.041L112.293 114.701C112.293 113.443 113.313 112.423 114.571 112.423L141.456 112.423Z" fill="url(#paint8_linear_200_650)"/>
<path d="M141.456 219.05C142.714 219.05 143.734 220.07 143.734 221.328V248.669C143.734 249.927 142.714 250.947 141.456 250.947H114.571C113.313 250.947 112.293 249.927 112.293 248.669L112.293 221.328C112.293 220.07 113.313 219.05 114.571 219.05H141.456Z" fill="url(#paint9_linear_200_650)"/>
<path d="M246.641 112.423C247.899 112.423 248.919 113.443 248.919 114.701V142.041C248.919 143.3 247.899 144.32 246.641 144.32H219.757C218.498 144.32 217.478 143.3 217.478 142.041V114.701C217.478 113.443 218.498 112.423 219.757 112.423L246.641 112.423Z" fill="url(#paint10_linear_200_650)"/>
<path d="M145.326 213.126V185.786C145.326 183.649 143.593 181.916 141.456 181.916H114.571C112.434 181.916 110.702 183.649 110.702 185.786L110.702 213.126C110.702 215.263 112.434 216.996 114.571 216.996H141.456C143.593 216.996 145.326 215.263 145.326 213.126ZM145.326 177.584V150.244C145.326 148.106 143.593 146.374 141.456 146.374H114.571C112.434 146.374 110.702 148.106 110.702 150.244L110.702 177.584C110.702 179.721 112.434 181.454 114.571 181.454H141.456C143.593 181.454 145.326 179.721 145.326 177.584ZM180.412 177.584V150.244C180.412 148.106 178.68 146.374 176.543 146.374H149.658C147.521 146.374 145.788 148.106 145.788 150.244V177.584C145.788 179.721 147.521 181.454 149.658 181.454H176.543C178.68 181.454 180.412 179.721 180.412 177.584ZM180.412 142.041V114.701C180.412 112.564 178.68 110.831 176.543 110.831L149.658 110.831C147.521 110.831 145.788 112.564 145.788 114.701V142.041C145.788 144.179 147.521 145.911 149.658 145.911H176.543C178.68 145.911 180.412 144.179 180.412 142.041ZM215.499 177.584V150.244C215.499 148.106 213.767 146.374 211.629 146.374H184.745C182.607 146.374 180.875 148.106 180.875 150.244V177.584C180.875 179.721 182.607 181.454 184.745 181.454H211.629C213.767 181.454 215.499 179.721 215.499 177.584ZM180.412 213.126V185.786C180.412 183.649 178.68 181.916 176.543 181.916H149.658C147.521 181.916 145.788 183.649 145.788 185.786V213.126C145.788 215.263 147.521 216.996 149.658 216.996H176.543C178.68 216.996 180.412 215.263 180.412 213.126ZM215.499 142.041V114.701C215.499 112.564 213.767 110.831 211.629 110.831L184.745 110.831C182.607 110.831 180.875 112.564 180.875 114.701V142.041C180.875 144.179 182.607 145.911 184.745 145.911H211.629C213.767 145.911 215.499 144.179 215.499 142.041ZM145.326 142.041V114.701C145.326 112.564 143.593 110.831 141.456 110.831L114.571 110.831C112.434 110.831 110.702 112.564 110.702 114.701L110.702 142.041C110.702 144.179 112.434 145.911 114.571 145.911H141.456C143.593 145.911 145.326 144.179 145.326 142.041ZM145.326 248.669V221.328C145.326 219.191 143.593 217.458 141.456 217.458H114.571C112.434 217.458 110.702 219.191 110.702 221.328L110.702 248.669C110.702 250.806 112.434 252.538 114.571 252.538H141.456C143.593 252.538 145.326 250.806 145.326 248.669ZM250.511 142.041V114.701C250.511 112.564 248.778 110.831 246.641 110.831L219.757 110.831C217.619 110.831 215.887 112.564 215.887 114.701V142.041C215.887 144.179 217.619 145.911 219.757 145.911H246.641C248.778 145.911 250.511 144.179 250.511 142.041Z" stroke="black" stroke-opacity="0.11" stroke-width="3.18289"/>
</g>
</g>
<defs>
<filter id="filter0_dddddd_200_650" x="-18.2058" y="107.177" width="397.624" height="433.413" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
<feOffset dy="2.94712"/>
<feGaussianBlur stdDeviation="2.50505"/>
<feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0312963 0"/>
<feBlend mode="normal" in2="BackgroundImageFix" result="effect1_dropShadow_200_650"/>
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
<feOffset dy="12.9673"/>
<feGaussianBlur stdDeviation="5.18693"/>
<feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.051037 0"/>
<feBlend mode="normal" in2="effect1_dropShadow_200_650" result="effect2_dropShadow_200_650"/>
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
<feOffset dy="31.8289"/>
<feGaussianBlur stdDeviation="10.3444"/>
<feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.065 0"/>
<feBlend mode="normal" in2="effect2_dropShadow_200_650" result="effect3_dropShadow_200_650"/>
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
<feOffset dy="61.3001"/>
<feGaussianBlur stdDeviation="20.2762"/>
<feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.078963 0"/>
<feBlend mode="normal" in2="effect3_dropShadow_200_650" result="effect4_dropShadow_200_650"/>
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
<feOffset dy="103.149"/>
<feGaussianBlur stdDeviation="37.2811"/>
<feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.0987037 0"/>
<feBlend mode="normal" in2="effect4_dropShadow_200_650" result="effect5_dropShadow_200_650"/>
<feColorMatrix in="SourceAlpha" type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
<feOffset dy="159.145"/>
<feGaussianBlur stdDeviation="63.6578"/>
<feColorMatrix type="matrix" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.13 0"/>
<feBlend mode="normal" in2="effect5_dropShadow_200_650" result="effect6_dropShadow_200_650"/>
<feBlend mode="normal" in="SourceGraphic" in2="effect6_dropShadow_200_650" result="shape"/>
</filter>
<linearGradient id="paint0_linear_200_650" x1="13" y1="12" x2="280" y2="313" gradientUnits="userSpaceOnUse">
<stop stop-color="#26D1FF"/>
<stop offset="0.545685" stop-color="#0A62F5"/>
<stop offset="1" stop-color="#1E05FF"/>
</linearGradient>
<linearGradient id="paint1_linear_200_650" x1="201.333" y1="120.597" x2="201.333" y2="250.947" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="#D3D3D3"/>
</linearGradient>
<linearGradient id="paint2_linear_200_650" x1="201.333" y1="120.597" x2="201.333" y2="250.947" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="#D3D3D3"/>
</linearGradient>
<linearGradient id="paint3_linear_200_650" x1="201.333" y1="120.597" x2="201.333" y2="250.947" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="#D3D3D3"/>
</linearGradient>
<linearGradient id="paint4_linear_200_650" x1="201.333" y1="120.597" x2="201.333" y2="250.947" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="#D3D3D3"/>
</linearGradient>
<linearGradient id="paint5_linear_200_650" x1="201.333" y1="120.597" x2="201.333" y2="250.947" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="#D3D3D3"/>
</linearGradient>
<linearGradient id="paint6_linear_200_650" x1="201.333" y1="120.597" x2="201.333" y2="250.947" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="#D3D3D3"/>
</linearGradient>
<linearGradient id="paint7_linear_200_650" x1="201.333" y1="120.597" x2="201.333" y2="250.947" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="#D3D3D3"/>
</linearGradient>
<linearGradient id="paint8_linear_200_650" x1="201.333" y1="120.597" x2="201.333" y2="250.947" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="#D3D3D3"/>
</linearGradient>
<linearGradient id="paint9_linear_200_650" x1="201.333" y1="120.597" x2="201.333" y2="250.947" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="#D3D3D3"/>
</linearGradient>
<linearGradient id="paint10_linear_200_650" x1="201.333" y1="120.597" x2="201.333" y2="250.947" gradientUnits="userSpaceOnUse">
<stop stop-color="white"/>
<stop offset="1" stop-color="#D3D3D3"/>
</linearGradient>
<clipPath id="clip0_200_650">
<rect width="319.291" height="319.291" rx="72" fill="white"/>
</clipPath>
</defs>
</svg>

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 11 KiB

Before After
Before After