- #535
8684ce1
Thanks @0xcadams! - Fix: fixed an issue whereonError
gets called withnull
in theaddMediaMetrics
plugin, when there is no error.
- #533
c0aa640
Thanks @0xcadams! - Fix: fixed metrics to reportpreloadTime
as the time between connectingaddMediaMetrics
and the firstplay
event.
- #530
adbd11b
Thanks @0xcadams! - Fix: fix for metrics usingdisableProgressListener
where the metrics does not register aplaying
event.
- #526
3f0c10a
Thanks @0xcadams! - Fix: addedplaying
event listener toaddMediaMetrics
, in addition to the existingplay
event listener.
- #521
6082120
Thanks @0xcadams! - Feature: added audio and video constraints to the Broadcast Root component.
- #518
95b9592
Thanks @0xcadams! - Fix: removedelement.load()
side effect from theaddEventListeners
function.
- #515
922ff14
Thanks @0xcadams! - Feature: addeddisableProgressListener
toaddMediaMetrics
so progress events from an HTML5 video element can be ignored when monitoring for playing/paused.
-
#505
0875372
Thanks @0xcadams! - Feature: addedbackoff
andbackoffMax
to the Player, which defines the time which the Player waits before attempting, as well as the cap for exponential backoff./** * Controls the initial value for exponential backoff, in ms. Defaults to 500ms, which is subsequently multiplied by 2^n power on each error. */ backoff: number; /** * Controls the maximum backoff when an error is encountered, in ms. Defaults to 30s. */ backoffMax: number;
- #498
511ae87
Thanks @0xcadams! - Fix: fixed the mouse interactions to not hide when a Radix Popover is open, and not flash when a user hovers over the video element.
- #496
faf536b
Thanks @0xcadams! - Fix: added FLV mime typing to allow for FLV URLs to be passed intogetMediaMetrics
.
-
#494
b8220d9
Thanks @0xcadams! - Fix: changedgetUserMedia
to override to request video when both audio and video are disabled, so that the Broadcast doesn't get stuck in a pending state. -
#494
b8220d9
Thanks @0xcadams! - Fix: fixed issue withmuted
Video prop and volume getting out of sync.
0b7d85b
Thanks @0xcadams! - Fix: fixes foraddMediaMetrics
to report metrics properly whenblob:...
or nosrc
is set on custom media players.
-
#489
d012808
Thanks @0xcadams! - Fix: fixed issue with JWT not being included headers for static assets. -
#487
8c066f1
Thanks @0xcadams! - Types: small fix for type usability foruseMediaContext
anduseBroadcastContext
.
- #481
44420a5
Thanks @0xcadams! - Fix: moved back totsup
frombunchee
for the build system, due to import issues across various projects.
-
#481
44420a5
Thanks @0xcadams! - Fix: fixed type entrypoints fornode
resolution. -
#481
44420a5
Thanks @0xcadams! - Fix: added backtypesVersions
for node module resolution. -
#481
44420a5
Thanks @0xcadams! - Fix: removedbrowser
entrypoint for web and react packages for maximummoduleResolution
compatibility.
b618eb6
Thanks @0xcadams! - Fix: removedbrowser
entrypoint for web and react packages for maximummoduleResolution
compatibility.
- #477
1e670ae
Thanks @github-actions! - Fix: moved back totsup
frombunchee
for the build system, due to import issues across various projects.
-
#475
a922f9b
Thanks @0xcadams! - Feature: addedBroadcast.StatusIndicator
and movedLiveIndicator
as a Player-only primitive.The
LiveIndicator
was not providing an accurate representation of the stream state, andBroadcast.StatusIndicator
was added to represent the third possible state,pending
, which is when the stream is pending negotiation with the WebRTC WHIP endpoint.LiveIndicator
is nowPlayer.LiveIndicator
since this only applies to live/not-live playback.
- #472
89aec9c
Thanks @0xcadams! - Fix: addedhlsConfig
to<Player.Video />
,autohide
to<Controls />
, and miscellaneous fixes for player and broadcast.
- #470
81ead35
Thanks @0xcadams! - Fix: fixed the interface for broadcasting (and player) to be vendor agnostic. This now usesgetIngest
similar to thegetSrc
for Player, which attempts to parse out a WHIP ingest URL. This has been tested against Cloudflare's WHIP/WHEP offering.
- #459
8463de1
Thanks @0xcadams! - Major release: first preview release of the unstyled, composable<Player />
and<Broadcast />
primitives based on Radix UI.
This is a ground-up rewrite of most of the @livepeer/react
library. In this release, we had some problems we wanted to solve:
- The
<Player />
/<Broadcast />
components are not very composable. They essentially break with any type of customization. - They encapsulate a lot of application logic (fetching data from the backend, auto-upload, etc) and the Player pushes CORS API keys, which are not a good security practice and cause a lot of developer confusion.
- The styling is difficult and hard to rework as a developer (and not compatible with Server Components).
- The react native package is under-maintained and far behind the web player in terms of features/support.
- Break out the logic of the components to be more composable. Instead of a single
<Player />
, there is now a<Player.Root />
,<Player.Container />
,<Player.Video />
,<Player.LoadingIndicator />
,<Player.FullscreenTrigger />
,<Player.FullscreenIndicator />
, etc. Very similar to Radix, which we use under the hood.- This means that instead of one giant component with a lot of logic baked into it, we have a bunch of composable primitives which you can build your apps on top of. We hope you like it!
- This also brings us much closer to web standards - we don't want to hide the internals from you. You can pass props directly to the video element, like
poster
, and it will "just work" as expected. - We still provide a lot of auto-wiring for the components and event listeners - very similar to the previous versions.
- We removed all API data fetching on the Player (e.g. all of the hooks like
useCreateAsset
), and now provide helpers to use the newlivepeer
SDK with the React components.getSrc
takes in the response from the playback info endpoint and parses it into something the Player can understand.- The only web requests are for pure playback or broadcasting (WHEP/WHIP and metrics reporting) - there are no more API requests to Livepeer Studio from any components.
- This means that you do not need to configure a
LivepeerProvider
with an API key. Keep those keys on the backend.
- The components are now completely unstyled, and the docs will provide examples of how to style them similarly to how they were in the previous releases. You can copy-pasta and then tweak from there.
- We deprecated the React Native package, for now. It would have been a huge lift to bring it up to feature parity with the React package, and is less straightforward than web to do the WebRTC/HLS fallback and all of the advanced features in the React web package.
- We want to have first-class support for React Native in the future, but for now, we want to only ship software that we're 100% confident our users will benefit from.
- Composable components - all components are extremely narrow in their scope, and support the
asChild
pattern popularized by Radix UI. WhenasChild
is set to true, we will not render a default DOM element, instead cloning the part's child and passing it the props and behavior required to make it functional. - Automatic poster images - if you pass in the playback info response directly into
getSrc
, it will automatically parse the thumbnail image and pass it into theposter
for the video. - Resume progress on fallback - now, when an error happens during playback for any reason, we resume playback where it left off.
- BYOC - bring your own components.
useMediaContext
is now much easier to use - since the<Player.Root />
is now just a simple React Context provider, you can build out your own components inside of it which consume the video controller. We have some examples to help avoid the footgunning.
- We are dropping support for
autoUrlUpload
and the fallback to playing directly from IPFS. We understand some users rely on that, and we will work with them to provide docs for how to implement that outside of the player. - We moved to a new build system which includes
use client
anduse server
directives in the output. If you don't use React Server Components, this doesn't affect you. But this means that you can directly import the client components into a RSC and you don't need to wrap them.
-
#459
8463de1
Thanks @0xcadams! - Fix: fixed the broadcast experience to handle display media and included a settings popover in the demo Next.js app. -
#459
8463de1
Thanks @0xcadams! - Fix: small fixes for ARIA keyboard shortcuts, resizing CSS variables, permissions errors in broadcasting, and usability fixes. -
#459
8463de1
Thanks @0xcadams! - Fix: fixed syncing of MediaStream with audio/video enabled, UI tweaks, CSS variables for media width/height, and more.
-
#465
158f13f
Thanks @0xcadams! - Fix: small fixes for ARIA keyboard shortcuts, resizing CSS variables, permissions errors in broadcasting, and usability fixes. -
#463
cea94f5
Thanks @0xcadams! - Fix: fixed syncing of MediaStream with audio/video enabled, UI tweaks, CSS variables for media width/height, and more.
- #460
4847132
Thanks @0xcadams! - Fix: fixed the broadcast experience to handle display media and included a settings popover in the demo Next.js app.
- #456
4669aaf
Thanks @0xcadams! - Major release: first preview release of the unstyled, composable<Player />
and<Broadcast />
primitives based on Radix UI.
This is a ground-up rewrite of most of the @livepeer/react
library. In this release, we had some problems we wanted to solve:
- The
<Player />
/<Broadcast />
components are not very composable. They essentially break with any type of customization. - They encapsulate a lot of application logic (fetching data from the backend, auto-upload, etc) and the Player pushes CORS API keys, which are not a good security practice and cause a lot of developer confusion.
- The styling is difficult and hard to rework as a developer (and not compatible with Server Components).
- The react native package is under-maintained and far behind the web player in terms of features/support.
- Break out the logic of the components to be more composable. Instead of a single
<Player />
, there is now a<Player.Root />
,<Player.Container />
,<Player.Video />
,<Player.LoadingIndicator />
,<Player.FullscreenTrigger />
,<Player.FullscreenIndicator />
, etc. Very similar to Radix, which we use under the hood.- This means that instead of one giant component with a lot of logic baked into it, we have a bunch of composable primitives which you can build your apps on top of. We hope you like it!
- This also brings us much closer to web standards - we don't want to hide the internals from you. You can pass props directly to the video element, like
poster
, and it will "just work" as expected. - We still provide a lot of auto-wiring for the components and event listeners - very similar to the previous versions.
- We removed all API data fetching on the Player (e.g. all of the hooks like
useCreateAsset
), and now provide helpers to use the newlivepeer
SDK with the React components.getSrc
takes in the response from the playback info endpoint and parses it into something the Player can understand.- The only web requests are for pure playback or broadcasting (WHEP/WHIP and metrics reporting) - there are no more API requests to Livepeer Studio from any components.
- This means that you do not need to configure a
LivepeerProvider
with an API key. Keep those keys on the backend.
- The components are now completely unstyled, and the docs will provide examples of how to style them similarly to how they were in the previous releases. You can copy-pasta and then tweak from there.
- We deprecated the React Native package, for now. It would have been a huge lift to bring it up to feature parity with the React package, and is less straightforward than web to do the WebRTC/HLS fallback and all of the advanced features in the React web package.
- We want to have first-class support for React Native in the future, but for now, we want to only ship software that we're 100% confident our users will benefit from.
- Composable components - all components are extremely narrow in their scope, and support the
asChild
pattern popularized by Radix UI. WhenasChild
is set to true, we will not render a default DOM element, instead cloning the part's child and passing it the props and behavior required to make it functional. - Automatic poster images - if you pass in the playback info response directly into
getSrc
, it will automatically parse the thumbnail image and pass it into theposter
for the video. - Resume progress on fallback - now, when an error happens during playback for any reason, we resume playback where it left off.
- BYOC - bring your own components.
useMediaContext
is now much easier to use - since the<Player.Root />
is now just a simple React Context provider, you can build out your own components inside of it which consume the video controller. We have some examples to help avoid the footgunning.
- We are dropping support for
autoUrlUpload
and the fallback to playing directly from IPFS. We understand some users rely on that, and we will work with them to provide docs for how to implement that outside of the player. - We moved to a new build system which includes
use client
anduse server
directives in the output. If you don't use React Server Components, this doesn't affect you. But this means that you can directly import the client components into a RSC and you don't need to wrap them.
- #448
26204f4
Thanks @suhailkakar! - Added .quicktime extension to mime.ts and src.ts to allow .quicktime video playback
- #444
6057932
Thanks @0xcadams! - Fix: fixed an issue where all HLS requests with JWT headers will time out.
-
#442
f6ddf09
Thanks @0xcadams! - Fix: resolves issue with VPNs transparently blocking WebRTC playback and failing to start.The timeout for playback can be customized with
webrtcConfig.canPlayTimeout
:import { Player, WebRTCVideoConfig } from "@livepeer/react"; const webrtcConfig: WebRTCVideoConfig = { canPlayTimeout: 8000, }; const Page = () => { return <Player playbackId={playbackId} webrtcConfig={webrtcConfig} />; };
- #437
714f354
Thanks @0xcadams! - Fix: added backwebrtcConfig
to the dependencies for WebRTC negotiation useEffect.
-
#434
ad3009c
Thanks @0xcadams! - Fix: removed?recordings=true
parameter on playback info endpoint and fixed HLS CORS issues with JWT headers. -
#432
b3081f3
Thanks @0xcadams! - Fix: changed to useHEAD
instead ofGET
and removed listener for changes towebrtcConfig
to reduce developer confusion. -
#435
b83480c
Thanks @0xcadams! - Fix: fix for metrics reporting when switching quickly between streams.
-
#426
ab4da5f
Thanks @0xcadams! - Feature: added track selectors to WebRTC so developers can override video and audio tracks.<Player webrtcConfig={{ videoTrackSelector: "~1280x720", }} />
See here for more documentation.
-
#424
c1a871a
Thanks @0xcadams! - Fix: added timeout for VPN playback blocking ICE candidates and stalling indefinitely. The default is 5000ms with an override with:<Player webrtcConfig={{ iceCandidateTimeout: 2000, }} />
-
#427
d453ebc
Thanks @0xcadams! - Fix: fixed a rare bug where coturn could be located in a different region from playback, resulting in playback failing.
- #418
7b6b1d7
Thanks @0xcadams! - Fix: fixed WebRTC negotiation endpoint to reduce hops to assigned node.
- #416
d4f9abe
Thanks @0xcadams! - Feature: added redirect URL caching for faster WebRTC playback switching times.
fadfa23
Thanks @0xcadams! - Fix: fixed the metrics URL to always use the URL for playback. This fixes the edge case where playback and metrics are assigned to different nodes.
- #413
b8ba1f3
Thanks @0xcadams! - Fix: fixed randomStream is offline
errors occurring on live stream playback, and reporting to websocket metrics.
- #411
c627b39
Thanks @0xcadams! - Fix: fixed properly closing the playback websocket when a new playback ID is passed into the Player.
- #406
570342f
Thanks @victorges! - Fix: fixed metrics to only send values when they are defined, to avoid filtering on the backend.
- #403
2d29716
Thanks @0xcadams! - Fix: fixed a race condition when b-frames are present in a stream, and fallback happens to HLS while SDP negotiation is still pending.
- #401
06095b6
Thanks @0xcadams! - Fix: resolved issues with WebRTC not playing back correctly on Firefox.
- #398
8ce5d5c
Thanks @0xcadams! - Fix: added loading states to the clipping button in the Player, with better callbacks for users to implement UIs on top of clipping.
- #395
119c28b
Thanks @0xcadams! - Breaking: movedlivepeer
to@livepeer/core-web
, which will be aligned with ourlivepeer
packages that are 1-1 with the backend API.
- #390
961772d
Thanks @0xcadams! - Breaking: removedplaybackUrl
from stream responses. Developers should migrate to usingplaybackId
to query stream playback URLs.
- #388
6095d73
Thanks @0xcadams! - Feature: addedonClipStarted
and ensured overriddenliveSyncDurationCount
in HLS config does not throw errors in HLS.js.
-
#386
1dc5657
Thanks @0xcadams! - Feature: added constant to WebRTCConfig to allow constant playback speed in the Player, and prevent audio distortion. -
#383
9264eee
Thanks @iameli-streams! - Fix: added single SDP negotiation when performing WHEP.
-
#379
b29684d
Thanks @0xcadams! - Feature: added custom components to render in place of the default error components, for when a stream is offline:streamOfflineErrorComponent
, when an access control error occurs (like an invalid JWT is passed):accessControlErrorComponent
, and when playback fails another unknown error:playbackFailedErrorComponent
.Also added a callback for when these errors occur:
onPlaybackError
. This can be used like:onPlaybackError={(e) => { if (e === null) { doSomethingWithErrorResolved(); } else if (e?.type === 'offline') { doSomethingWithOfflineError(); } }}
- #376
3301827
Thanks @0xcadams! - Fix: fixed to have a cleaner fallback for 406 response from WebRTC negotiation.
- #374
5cbf402
Thanks @0xcadams! - Fix: fixed the fallback when b-frames exist to not show a playback error until HLS has been attempted.
d809f28
Thanks @0xcadams! - Fix: added changes to strip a non-standard port number from the WebRTC redirect host, if present.
- #370
269d3a3
Thanks @0xcadams! - Fix: fix for TTFF reporting, to measure the difference between theplay
event and the first progress update.
-
#364
37c97e7
Thanks @0xcadams! - Feature: addedlowLatency
option offorce
- this requires WebRTC to be used, if a WebRTC playback source exists (which is only for livestreams). It disables the automatic fallback to HLS.Fixed issue when
lowLatency
istrue
where it would immediately fall back to HLS - it should now retry if the stream is offline, and fall back to HLS only when there is an unknown error (this could be a variety of causes - intermittent network issues, browser failure, etc).The default
lowLatency
option is nowtrue
- to opt out of low latency, passlowLatency=false
to the Player or the lvpr.tv search params.
-
#362
5c905ce
Thanks @0xcadams! - Chore: update downstream packages and changed the default icon for microphone mute/unmute in<Broadcast />
.Package updates include:
hls.js
upgraded from "^1.4.0" to "^1.4.9", to include a fix from Livepeer's @Thulinma for missing AUD unitscore-js
upgraded from "^3.27.2" to "^3.31.1".cross-fetch
upgraded from "^3.1.5" to "^4.0.0".tus-js-client
upgraded from "^3.0.1" to "^3.1.0".zustand
upgraded from "^4.3.2" to "^4.3.9".@tanstack/query-async-storage-persister
,@tanstack/query-core
,@tanstack/react-query
,@tanstack/react-query-persist-client
all upgraded from "4.22.4" to "4.29.23".
-
#358
50551ce
Thanks @0xcadams! - Feature: added basic<Broadcast />
component to kick off WebRTC broadcasting testing. -
#358
50551ce
Thanks @0xcadams! - Feature: added controls for<Broadcast />
-<BroadcastSettings />
,<AudioToggle />
, and<VideoToggle />
. -
#358
50551ce
Thanks @0xcadams! - Feature: added<Screenshare />
component for Broadcast, which allows a user to share a screen with their WebRTC broadcast.
-
#358
50551ce
Thanks @0xcadams! - Feature: addedrenderChildrenOutsideContainer
to both Broadcast and Player, which determines whether the children should be rendered outside of the aspect ratio container. This is used for custom controls, so children of the Player/Broadcast can useuseMediaController
without any parent elements.Also added
onPlaybackStatusUpdate
, which is a callback that is called when the broadcast status updates. This should be used withplaybackStatusSelector
to limit state updates.
- #356
ac886fb
Thanks @0xcadams! - Feature: added<Screenshare />
component for Broadcast, which allows a user to share a screen with their WebRTC broadcast.
-
#356
ac886fb
Thanks @0xcadams! - Feature: addedrenderChildrenOutsideContainer
to both Broadcast and Player, which determines whether the children should be rendered outside of the aspect ratio container. This is used for custom controls, so children of the Player/Broadcast can useuseMediaController
without any parent elements.Also added
onPlaybackStatusUpdate
, which is a callback that is called when the broadcast status updates. This should be used withplaybackStatusSelector
to limit state updates.
60b46ad
Thanks @0xcadams! - Feature: added controls for<Broadcast />
-<BroadcastSettings />
,<AudioToggle />
, and<VideoToggle />
.
- #349
82429d8
Thanks @0xcadams! - Feature: added basic<Broadcast />
component to kick off WebRTC broadcasting testing.
-
4811b3e
Thanks @0xcadams! - Feature: thanks @martincik - addedassetId
to the asset upload progress. -
7dcda99
Thanks @0xcadams! - Fix: fixed bug withnavigator.mediaDevices.getUserMedia
throwing an undefined error in a secure context.
- #345
af16f6d
Thanks @0xcadams! - Chore: added version identifiers to the playback websocket to help narrow issues related to specific Livepeer UI Kit releases.
- #342
e36b570
Thanks @0xcadams! - Fix: fixed Safari not emittingcanplay
event with autoplay disabled, and replaced this event withloadedmetadata
to know when the video is ready for playback.
- #340
99321fb
Thanks @0xcadams! - Fix: fixed WebRTC playback on Safari and removed redundantHEAD
request in SDP negotiation.
- #338
8efce52
Thanks @0xcadams! - Feature: addedcreatorId
to useCreateStream, useUpdateStream, and useUpdateAsset.
- #336
effc06b
Thanks @0xcadams! - Fix: fixed TTFF bug with the Player reporting an inaccurate TTFF whenpriority
was used with a Player which is below the fold. This was happening on the lvpr.tv player, since it is always set topriority
even though the Player can be below the fold.
- #334
8cd5537
Thanks @0xcadams! - Fix: added a prop,lowLatency
, to the Player, to allow for opting-in to low latency WebRTC.
- #314
49c4c99
Thanks @0xcadams! - Feature: Added WebRTC playback for the web Player, which uses the new endpoint from the Studio provider to play back WebRTC livestreams, if they are available. If these do not succeed in playing back, the Player will automatically fall back to HLS playback. Also, if the stream contains "bframes" (which are common for users streaming with OBS or other streaming providers), the Player will automatically fall back.
-
#332
7924cb5
Thanks @0xcadams! - Fix: changed default track selector tofirst
and loosened video track selector type defs to allow any string. -
#320
c49706d
Thanks @0xcadams! - Fix: fixed error reporting for metrics websocket with MP4 playback. -
#329
be5a1cc
Thanks @0xcadams! - Fix: fixed bugs on iOS - use native playback for HLS (instead of HLS.js) and fixed single touch not seeking on Progress. -
#324
4c6e1c7
Thanks @0xcadams! - Fix: resolved continuous restart on playback errors and reworked player to only create a single websocket across playbacks. -
#330
24111d4
Thanks @0xcadams! - Chore: enable prioritization of WebRTC playback over HLS. -
#333
ad1781c
Thanks @0xcadams! - Fix: removed the video track selector due to an upstream bug, and added configurable timeout for SDP negotiation. -
#325
d2c76a6
Thanks @0xcadams! - Fix: added debouncing to the error handler to increment the source index with exponential backoff, to prevent any fast reloads. -
#327
bbb2727
Thanks @0xcadams! - Fix: resolve tus upload issue with large uploads (>1GB) going over nginx limit. -
#322
e15a399
Thanks @0xcadams! - Fix: fixed issue with release not using the latest changes to MP4 restart.
-
#329
be5a1cc
Thanks @0xcadams! - Fix: fixed bugs on iOS - use native playback for HLS (instead of HLS.js) and fixed single touch not seeking on Progress. -
#327
bbb2727
Thanks @0xcadams! - Fix: resolve tus upload issue with large uploads (>1GB) going over nginx limit.
- #325
d2c76a6
Thanks @0xcadams! - Fix: added debouncing to the error handler to increment the source index with exponential backoff, to prevent any fast reloads.
-
#324
4c6e1c7
Thanks @0xcadams! - Fix: resolved continuous restart on playback errors and reworked player to only create a single websocket across playbacks. -
#322
e15a399
Thanks @0xcadams! - Fix: fixed issue with release not using the latest changes to MP4 restart.
- #320
c49706d
Thanks @0xcadams! - Fix: fixed error reporting for metrics websocket with MP4 playback.
- #314
49c4c99
Thanks @0xcadams! - Feature: Added WebRTC playback for the web Player, which uses the new endpoint from the Studio provider to play back WebRTC livestreams, if they are available. If these do not succeed in playing back, the Player will automatically fall back to HLS playback. Also, if the stream contains "bframes" (which are common for users streaming with OBS or other streaming providers), the Player will automatically fall back.
-
#315
f7246ca
Thanks @0xcadams! - Feature: added creator ID to create asset, so users can provide either a string (which is an unverified address) or an object with atype
. We currently only supportunverified
types, which means that passing a verified signature to verify the address is not yet possible.type CreateAssetCreatorId = | { /** * The `type` of the identifier - unverified means that the value is not signed, and is an address * that is blindly trusted. */ type: "unverified"; /** * Developer-managed ID of the user who created the asset. */ value: string; } | string;
-
#310
f840c70
Thanks @0xcadams! - Fix: fixed blank source URLs on lvpr.tv. -
c8050be
Thanks @0xcadams! - Feature:: added the ability to pass in aviewerId
to the Player to pass along to the metrics endpoint, for application builders to be able to query viewership by wallet. -
c8050be
Thanks @0xcadams! - Fix:: fix from @Tiagogv to resolve import errors due to the most recent HLS.js release.
- #306
07f4a6e
Thanks @0xcadams! - Fix: fixed access control error not resetting when livestream starts.
- #304
d2522dd
Thanks @spreadzp! - Feature: added support for base64 video sources - this allows for a video source likedata:video/webm;base64,GkX...AUL3
to be passed into thesrc
prop and the Player will handle it properly.
- #299
ec96b12
Thanks @0xcadams! - Feature: addedaccessKey
andonAccessKeyRequest
props to the Player, to support thewebhook
playback policy which allows users to play back streams/assets with webhook authentication. The access key is appended to the query string in the source URL of the video, and this access key is passed along to a user-defined webhook which validates the payload to make sure the user has access to the content.
-
#303
8f65da8
Thanks @0xcadams! - Fix: updated the metrics to send thepageUrl
as thedocument.referrer
when used in an iFrame context, to be able to attribute metrics to a page which uses an iFrame. -
#302
4ebec15
Thanks @0xcadams! - Fix: added anonError
callback to the Player to allow users to catch and handle miscellaneous errors which occur in the Player, which are not already handled.
-
#298
b79c11b
Thanks @0xcadams! - Feature: added the ability to autoplay videos without forcing mute. This works only in certain conditions where the site is considered "trusted" and the user has interacted with the site - see Chrome and Safari docs for further details on when this is allowed. We recommend testing on your site to ensure that the media will autoplay under the conditions that you expect the user to engage with your content. -
#295
3f653f7
Thanks @0xcadams! - Fix: fixed the user agent string to be sanitized before passing to the metrics websocket. -
#297
1d34ea4
Thanks @0xcadams! - Feature: added IPFS upload on creation of an asset, so no subsequent calls need to be made to upload to IPFS. -
#298
b79c11b
Thanks @0xcadams! - Fix: changed the default Player volume level to 1.0, from 0.2. To continue with the previous behavior, usedefaultVolume
in the controls prop.
- #289
20879a4
Thanks @0xcadams! - Feature: changed the Player on React and React Native to hide the progress bar when viewing a livestream. Also improved the live stream experience with better HLS.js defaults for lower latency.
-
#291
2c9bb91
Thanks @0xcadams! - Fix: fixed the styling of the stream error image on small displays (<400px). -
#289
20879a4
Thanks @0xcadams! - Fix: fixed an error where HLS errors would not provide detail and the Player would throw anobject undefined
error.
- #286
cd502da
Thanks @0xcadams! - Fix: renamed theprotocol
field tosourceType
to align with the backend metrics websocket.
-
#270
68f2e64
Thanks @0xcadams! - Fix: fixedusePlayerList
to use a React ref to avoid dynamic runtimeonViewableItemsChanged
errors. -
#270
68f2e64
Thanks @0xcadams! - Fix: fixed uploads in React Native environments by removing chunk size for tus. -
#272
b11ea90
Thanks @0xcadams! - Feature: addedallowCrossOriginCredentials
to the React Player to allow cookies to be sent with playback requests. -
#270
68f2e64
Thanks @0xcadams! - Fix: fixedgetIsVolumeChangeSupported
check to not fail for negative volume values.
-
#267
85e4c05
Thanks @0xcadams! - Feature: added MP4 rendition prioritization to the React and React Native Player.This is for support of MP4 renditions returned from
playbackInfo
from the Studio provider. If an MP4 rendition exists for an Asset, it will be prioritized over HLS, since this has been introduced as a performance improvement over HLS for short-form video.The MP4 renditions will be chosen with the following algorithm: the device screen width and multiplied by a static multiplier (currently set to x2.5). This value is then compared to the rendition widths, and the renditions are prioritized based on the distance between these values. This results in a choice of a rendition which is close to the screen size without visual quality issues. For instance, a device with a 1280 pixel width would compute
1280px * 2.5 = 3200px
, and then sort the MP4 renditions by which are closest to this value.
- #267
85e4c05
Thanks @0xcadams! - Fix: addedpageUrl
,protocol
,preloadTime
, andautoplay
to metrics to track performance of video load under specific conditions.
- #259
9568500
Thanks @0xcadams! - Feature: added Time to First Frame, Autoplay, and User Agent to metrics reporting. Fixed bugs with play time metrics reporting.
a8a2c58
Thanks @0xcadams! - Chore: downgraded packages due to versioning conflicts and upgradedzustand
.
-
#248
5a1c060
Thanks @0xcadams! - Fix: fixed version headers to reference the correct package names. -
#251
686fb51
Thanks @0xcadams! - Chore: updated dependencies to latest versions.
- #240
c4cb597
Thanks @clacladev! - Fix: added clearer Player error handling instead of an infinite loading spinner. The Player now shows error states for gated streams which do not have a proper JWT and streams which are currently offline.
- #204
9ce1fa4
Thanks @0xcadams! - Refactor: moved the web logic out oflivepeer
into@livepeer/core
to prevent polyfills from conflicting with React Native.
- #204
9ce1fa4
Thanks @0xcadams! - Breaking: removed the peer dependency onethers
andtypechain
in favor of exporting const ABIs which can be used with tools like abitype.
-
#218
07ef48e
Thanks @0xcadams! - Fix: fixed regression with slider thumb not showing in correct position, add React Native video customization props, and fixed Player getting stuck in "play" after exit of fullscreen. -
#218
07ef48e
Thanks @0xcadams! - Feature: addedpriority
boolean to Player to enable lazy loading for content. -
#204
9ce1fa4
Thanks @0xcadams! - Feature: addedloading
color override to ThemeConfig. -
#204
9ce1fa4
Thanks @0xcadams! - Feature: added further theming overrides to progress and volume sliders. -
#213
7f5202d
Thanks @0xcadams! - Fix: fixed player to display hours correctly and added version headers to API requests for debugging errors. -
#204
9ce1fa4
Thanks @0xcadams! - Feature: added native file URI uploading for React Native, default volume config for the Player, and fixed the slider thumb to not extend past the left boundary.
- #212
da28e70
Thanks @clacladev! - Fix: added clearer Player error handling instead of an infinite loading spinner. The Player now shows error states for gated streams which do not have a proper JWT and streams which are currently offline.
-
#218
07ef48e
Thanks @0xcadams! - Fix: fixed regression with slider thumb not showing in correct position, add React Native video customization props, and fixed Player getting stuck in "play" after exit of fullscreen. -
#218
07ef48e
Thanks @0xcadams! - Feature: addedpriority
boolean to Player to enable lazy loading for content.
- #213
7f5202d
Thanks @0xcadams! - Fix: fixed player to display hours correctly and added version headers to API requests for debugging errors.
- #204
9ce1fa4
Thanks @0xcadams! - Feature: added native file URI uploading for React Native, default volume config for the Player, and fixed the slider thumb to not extend past the left boundary.
- #187
44adf29
Thanks @0xcadams! - Feature: added further theming overrides to progress and volume sliders.