dolbyio-samples / rts-app-react-publisher-viewer Goto Github PK
View Code? Open in Web Editor NEWA Real Time Streaming App example for dolby.io
License: MIT License
A Real Time Streaming App example for dolby.io
License: MIT License
On Publisher app, the version is set to 0.0.1.
When PR is merged, the minor version number of app should be incremented. This would help the QA team to log the bug against the version number and it would be easy to track the bugs based on the version number.
Netlify will keep deploying our website by ignoring the build and test results. We should use CLI and deploy it manually.
Publisher is not able to stream the contents and error 'Invalid codec' is displayed in the browser console when the Publisher is disabling the simulcast after enabling it.
STEPS:
Error: Invalid codec. Possible values are: vp8,vp9,h264,av1
at @millicast.fc59a0e8.js:26:5969
at Generator.next ()
at Co (@millicast.fc59a0e8.js:1:616)
at c (@millicast.fc59a0e8.js:1:819)
at @millicast.fc59a0e8.js:1:880
at new Promise ()
at @millicast.fc59a0e8.js:1:760
at tp.publish (@millicast.fc59a0e8.js:26:6863)
at @millicast.fc59a0e8.js:26:24435
at Generator.next ()
Screen Reference: https://dolby.box.com/s/6vr54ysmmv32ck5ojus8ftah7u39e0pt
Environment:
OS: MAC [macOS Monterey Version 12.3.1]
Browser: Chrome [Version 106.0.5249.119 (Official Build) (x86_64)]
Create a Viewer app inside the mono repo with a working link for Netlify deployment.
Acceptance Criteria
Viewer
Out of scope
When simulcast is on, user can select different video quality from a dropdown list
https://docs.dolby.io/streaming-apis/docs/source-and-layer-selection
to be further refined
We need a GitHub action to deploy our app into netlify
STEPS:
Also with the VP8 simulcast works.
Publisher Codec. Viewer. Status
Chrome. VP8. Chrome. Worked
Chrome. VP8. Firefox. Worked
Chrome. H264. Chrome. Worked
Chrome. H264. Firefox. Worked
Chrome. VP9. Chrome. No option to select Video Quality
Chrome. VP9. Firefox. No option to select Video Quality
Firefox. * Chrome. No option to select Video Quality
Firefox. * Firefox. No option to select Video Quality
Environment:
OS: MAC [macOS Monterey Version 12.3.1]
Browser: Chrome [Version 106.0.5249.119 (Official Build) (x86_64)]
When the user selects a different camera or microphone, the popup always jumps up. While the expected behavior is it should show at the original position.
The publisher needs to be updated to support Simulcast.
BroadcastOptions
with a boolean for simulcastpublisher.connect
in the usePublisher
hookSimulcast
if browser is chrome.Note :
h.264
or VP8
codec. No other browser or codec is supported.Developer needs a useViewer
hook so that the incoming stream can be played.
Acceptance Criteria
useViewer
hook that accept stream name and account iduseViewer
hook so that the incoming stream can be played[deviceChange](https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/devicechange_event)
event then update the device listWhen the external devices such as camera or microphone is disconnected during the stream, viewer participant is not able to hear the publisher audio and video. Ideally when the external devices are disconnected during the streaming, it should fallback to the build-in devices.
STEPS:
Ideally when the external devices are disconnected during the streaming, it should fallback to the build-in devices.
Environment:
OS: MAC [macOS Monterey Version 12.3.1]
Browser: Chrome [Version 106.0.5249.119 (Official Build) (x86_64)]
User needs to refresh the page every time when the external devices are connected/disconnected, ideally App should be able to detect the devices dynamically when connected/disconnected.
STEPS:
Environment:
OS: MAC [macOS Monterey Version 12.3.1]
Browser: Chrome [Version 106.0.5249.119 (Official Build) (x86_64)]
When the publisher copies the live event viewer link to share with the attendies, the copied viewer link has streamId as undefined
Copied Viewer Link: https://viewer.millicast.com/?streamId=undefined/l9c58zkw
STEPS:
Publisher App URL: https://deploy-preview-34--astounding-lily-fa33fc.netlify.app/
Tested On:
OS: MAC [macOS Monterey Version 12.3.1]
Browser: Chrome [Version 106.0.5249.119 (Official Build) (x86_64)]
Add a button to both the viewer and publisher that closes the tab when pressed. The UX is not currently final and is still awaited.
Acceptance Criteria
When the Publisher starts the streaming and views the stream information, following stream information is missing from the stats and certain attributes needs unit conversion dynamically based on its value.
Missing Stats Information:
Dynamic Unit Display:
Main Branch Reference App: https://astounding-lily-fa33fc.netlify.app/
Millicast Reference App: https://streaming.dolby.io/#/broadcast-new?id=<TOKEN_ID>&s=<STREAM_NAME>
Environment:
OS: MAC [macOS Monterey Version 12.3.1]
Browser: Chrome [Version 106.0.5249.119 (Official Build) (x86_64)]
Note: return Codec
, resolution
, from useMediaDevices hook
If one of the capabilities is not supported, we can hide the options in settings
For resolution, we should filter out the unsupported ones from the list below:
2160p/4K
1440p/2k
1080p/ Full HD
720p/ HD
480p/SD
Out of scope -
For getting a list of codecs - please use this method
Refer to this screenshot from the sample app for the sort of settings we need to expose
Designs will be confirmed soon. Will update tickets with updated designs.
useViewer
hookThe current Millicast project shows the following settings - please try and replicate all/as many as possible
Out of scope
We need a VideoView to preview the current video stream
We need to have the ability to select a video file as the source for Millicast playback.
Questions to be resolved -
Stream info button is not visible to Publisher in following scenario:
** Stream info button is shown when the user hovers over the area where button is present
Environment:
OS: MAC [macOS Monterey Version 12.3.1]
Browser: Chrome [Version 106.0.5249.119 (Official Build) (x86_64)]
Viewer needs to select Video/Audio Source from the Setting panel to view the streaming content.
STEPS:
Environment:
OS: MAC [macOS Monterey Version 12.3.1]
Browser: Chrome [Version 106.0.5249.119 (Official Build) (x86_64)]
We need to have an icon button for video view to mute/unmute the audio track
We need a timer component to show the duration of the streaming session
Only surface this while stream is on-going.
Add test-id for components
Codec dropdown should be disabled when simulcast is disabled
When the simulcast is disabled, codec dropdown component should also be disabled.
When the simulcast is enabled, default codec should be set in the dropdown
when the user enables the simulcast by turning on the simulcast toogle, and without selecting codec, publisher can go live with the vp8 as codec, better to set the default codec in the dropdown when the simulcast is enabled.
Environment:
OS: MAC [macOS Monterey Version 12.3.1]
Browser: Chrome [Version 106.0.5249.119 (Official Build) (x86_64)]
** Update** not needed for milestone 1
Support Chromium & Safari
<video>
HTML tagReference:
https://github.com/millicast/millicast-sdk/blob/18f118ca28f0075cac3e776132fc94af5923700f/packages/millicast-publisher-demo/src/js/MillicastMedia.js
https://stackoverflow.com/questions/68047599/how-to-switch-cameras-in-pwa-app-built-with-reactjs
Browsers: Chrome & Safari
We need to show the settings UI in a popup
Note: We nee another Publisher to present the shared screen as a video track
Ref: https://developer.mozilla.org/en-US/docs/Web/API/Screen_Capture_API/Using_Screen_Capture
Chromium & Safari
Rough guide
Note, need to enable the multi-source option from the dashboard
Support Chormium and Safari
In lieu of designs/icons, add a text based indicator to the viewer app to indicate that the publisher is publishing.
This can be done by subscribing to broadcast
events on millicastView
Acceptance Criteria
Refer to this for more details - https://www.figma.com/file/mpGO2yc1EBeDKgcvhmm5CA/Dolby.io-%2F-Real-time-Streaming-%E2%80%93-MVP?node-id=5826%3A19616
Currently for simulcast, we use a property VideoCodec
of type string
. VideoCodec
is a bit generic. Constrain it like the SDK does.
The current Millicast project shows the following settings - please try and replicate all/as many as possible
Use the current skeleton app as a baseline
Since millicast sdk still doesn't support typescript, so we need to add the type definitions
When the publisher selects the camera/microphone devices from the Manage Your Devices popup, following issues are observed:
STEPS:
Screen Recording: https://dolby.box.com/s/ld8mdw522b9p5qbjfoyyu3k053rqi09m
Environment:
OS: MAC [macOS Monterey Version 12.3.1]
Browser: Chrome [Version 106.0.5249.119 (Official Build) (x86_64)]
Subsribe to broadcastEvents
from the viewer
. This will allow you to subscribe to viewercount
events.
Acceptance Criteria
out of scope
Test the publisher functionality
Testing the below functionality on Publisher side:
- On Setup
- After going live
- Don't give Camera and Microphone
- Don't give Camera
- Don't give Microphone
- Remove permission during live stream
- Dynamic detection
- On Setup
- After going live
- Connect/Disconnect on Setup
- Connect/Disconnect during Live
Netlify has a default security setting that prints out a log in the console
[Report Only] Refused to connect to ‘https://cdn.segment.com/v1/projects/PzoD1qlC1wpvDGhNckresPQM3zcX8I1s/settings’ because it violates the following Content Security Policy directive: “connect-src ‘self’ data: *.amazonaws.com *.bugsnag.com *.firebaseio.com *.giphy.com *.launchdarkly.com *.netlify.com .segment.io netlify-cocoon.netlify.app netlify-slapp.netlify.app netlilink.netlify.app ws://localhost:3000/ wss://.services.netlify.com”.
This does not block the application from running in any way, it simply controls the number of domains that the app is allowed to connect.
We need to fix the error
Note:
Reference: https://docs.dolby.io/streaming-apis/docs/web
Browsers: Chrome & Safari
Show broadcast in videoview
Design a component to mute/unmute the speaker on the viewer side. This will then allow us to set muted
on the VideoView
component. By default the incoming stream's audio is not muted.
** Acceptance Criteria **
Millicast does not offer session continuance; if you close the browser window or hit refresh during a stream, the stream is disconnected.
As an enhancement, later, we would like to have the ability to tell the user what will happen if the browser tab is closed/reloaded so that they can make an informed decision.
When working on #82 please make sure this warning is shown to the viewer
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.