-
Notifications
You must be signed in to change notification settings - Fork 5
Description
Introduction
This issue is to define the minimum viable product for a MVP "Livestream-to-earn" Template Publisher App.
MVP stands for "minimum viable product", and represents the minimal feature set to achieve the objective.
A Template App is a body of code which can be used to publish an app, configured for a specific situation. This allows a base level of functionality to be replicated by anyone for their specific circumstance.
"Livestream-to-earn" is the act of livestreaming, and at the same time being paid by anyone who is consuming the livestream.
Example Usage
For example, the Template can be used by Ethereum Football Club to publish the Ethereum FC Livestream-to-earn app.
This would allow any spectator at an Ethereum FC match to livestream the action, and get paid in Ethereum, by anyone who is watching.
Scope of Functionality
The app should allow the User to:
-
Publish video and audio from their device's camera and microphone
-
See the video which is being livestreamed
- on their device's screen
-
Monitor for payments from "pay-to-play" consumers
- to an Ethereum wallet created by the app
User Journey
Screen 1 - on launch:
The following user interactions are possible:
- Tap the Camera Thumbnail "You" in the bottom right to go to Screen 2
- Tap the Hamburger Button to go to Screen 4
- Tap the x to close the app
Screen 2 - go live:
The following user interactions are possible:
- Tap the Hamburger Button to go to Screen 4
- Tap the x to close the app
Screen 3 - receive first payment:
The following user interactions are possible:
- Tap the Hamburger Button to go to Screen 4
- Tap the x to close the app
Screen 4 - more information (overlay)
The following user interactions are possible:
- Tap the "Copy Private Key to clipboard" to copy private key to clipboard
- Tap the "Copy Ethereum address to clipboard" to copy Ethereum address to clipboard
- Tap the Hamburger Button to go to hide overlay
Layout
The layout of the app should be as defined below.
The app must be implemented to these specifications in order for this issue to be closed and bounty to be paid out.
Base Canvas (9x16)
The app as designed above requires a canvas on a device with a 9x16 aspect ratio - such as 2160x3840, 1080x1920, 720x1280 or 450x800.
If the device has a screen with a 9x16 aspect ratio, laying out the app should be trivial.
If the device does not have a screen with a 9x16 aspect ratio, the app should allocate an appropriate frame with a 9x16 aspect ratio on the device's screen for the app to operate in. Laying out the app should then be trivial.
On Launch Layout
Livestreaming View Layout
Livestreaming View Detailed Layout
Layout Components
Header Bar (9x1)
The artwork for the Hamburger Button and x will be provided during the implementation.
Wallet Bar (9x1)
The two lines of text should be the same length (which will require different font sizes).
The two lines of text should be aligned in the centre of the panel, with appropriate padding / spacing.
Live Camera Panel (9x9)
The "live" text should be displayed over the camera feed, to tell the user that they are live.
The microphone level monitor should show if sound is being detected by the microphone.
"You" Panel (9x2)
Note: the price per minute should be set as a default in the app template.
Note: the "set your price per minute" function should be inactive (for now). This will require some further integration with the Consumer app.
Broadcaster Node Bar (9x1)
The Broadcaster Node is the server receiving the livestream from the user, and distributing to consumers.
They are responsible for running the broadcasting server. They will not receive any income from consumers in this phase.
Live Stream Selector Bar (9x2)
App Specifics
No Internet Connect
In the event that the device does not have internet access to the RTMP endpoint or the ETH endpoint, the app should still launch successfully, activate the camera, and allow a user to select "You" to go live.
In this instance, the app will not be able to retrieve the wallet balance, and will not be able to go live.
The app should be able to gracefully handle the situation when it is unable to either a) reach the RTMP endpoint, b) reach the ETH endpoint, and to report these errors to the user.
Disconnection
In the event that the livestream fails for any reason, the app should handle this gracefully, and inform the user that they are no longer live.
In this instance, the app should return the user to Screen 1, with an appropriate error message.
Configuration of template
The following parameters should be configurable by a user of the template, when creating the app:
Copy
All copy, e.g. error messages, titles, hamburger button content should be configurable in the template.
Broadcaster Node settings
- RTMP endpoint for publishing content to, e.g.
rtmp://89.145.161.141:1935 - ETH Address for display in UI, and in future, to receive payment
Payment settings
- ETH endpoint (e.g. infura)
- Default "price per minute"
AV settings
- Keyframe interval e.g. every 60 frames / 2 seconds
- Maximum Video Stream Bitrate e.g.
2000kbps - Maximum Audio Stream Bitrate, e.g.
320kbps
Specific Deliverables
Code should be written in pure Kotlin, and should make use of existing open-source libraries wherever possible.
The following specific deliverables are required for this issue to be closed and any bounties paid out:
-
Sample app generated from template:
.apkfile fordebugpurposes.apkfile signed forreleaseto e.g. Google Play Store or FDroid.
-
Merged PR to this repo containing:
- Template App codebase
- Project which can be imported to Android Studio
- Documented process for generating an APK from template, e.g. which configuration files to edit to change config





















