Skip to content

Latest commit

 

History

History
952 lines (524 loc) · 68.9 KB

CHANGELOG.md

File metadata and controls

952 lines (524 loc) · 68.9 KB

@livepeer/core

3.1.17

Patch Changes

  • #535 8684ce1 Thanks @0xcadams! - Fix: fixed an issue where onError gets called with null in the addMediaMetrics plugin, when there is no error.

3.1.16

Patch Changes

  • #533 c0aa640 Thanks @0xcadams! - Fix: fixed metrics to report preloadTime as the time between connecting addMediaMetrics and the first play event.

3.1.15

Patch Changes

  • #530 adbd11b Thanks @0xcadams! - Fix: fix for metrics using disableProgressListener where the metrics does not register a playing event.

3.1.14

Patch Changes

  • #526 3f0c10a Thanks @0xcadams! - Fix: added playing event listener to addMediaMetrics, in addition to the existing play event listener.

3.1.13

Patch Changes

  • #521 6082120 Thanks @0xcadams! - Feature: added audio and video constraints to the Broadcast Root component.

3.1.12

Patch Changes

  • #518 95b9592 Thanks @0xcadams! - Fix: removed element.load() side effect from the addEventListeners function.

3.1.11

Patch Changes

  • #515 922ff14 Thanks @0xcadams! - Feature: added disableProgressListener to addMediaMetrics so progress events from an HTML5 video element can be ignored when monitoring for playing/paused.

3.1.10

Patch Changes

3.1.9

Patch Changes

  • #505 0875372 Thanks @0xcadams! - Feature: added backoff and backoffMax 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;

3.1.8

Patch Changes

  • #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.

3.1.7

Patch Changes

  • #496 faf536b Thanks @0xcadams! - Fix: added FLV mime typing to allow for FLV URLs to be passed into getMediaMetrics.

3.1.6

Patch Changes

  • #494 b8220d9 Thanks @0xcadams! - Fix: changed getUserMedia 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 with muted Video prop and volume getting out of sync.

3.1.5

Patch Changes

3.1.4

Patch Changes

  • 0b7d85b Thanks @0xcadams! - Fix: fixes for addMediaMetrics to report metrics properly when blob:... or no src is set on custom media players.

3.1.3

Patch Changes

  • #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 for useMediaContext and useBroadcastContext.

3.1.2

Patch Changes

3.1.1

Patch Changes

3.1.0

Minor Changes

  • #481 44420a5 Thanks @0xcadams! - Fix: moved back to tsup from bunchee for the build system, due to import issues across various projects.

Patch Changes

  • #481 44420a5 Thanks @0xcadams! - Fix: fixed type entrypoints for node resolution.

  • #481 44420a5 Thanks @0xcadams! - Fix: added back typesVersions for node module resolution.

  • #481 44420a5 Thanks @0xcadams! - Fix: removed browser entrypoint for web and react packages for maximum moduleResolution compatibility.

3.1.0-next.3

Patch Changes

  • 4f0303c Thanks @0xcadams! - Fix: added back typesVersions for node module resolution.

3.1.0-next.2

Patch Changes

3.1.0-next.1

Patch Changes

  • b618eb6 Thanks @0xcadams! - Fix: removed browser entrypoint for web and react packages for maximum moduleResolution compatibility.

3.1.0-next.0

Minor Changes

  • #477 1e670ae Thanks @github-actions! - Fix: moved back to tsup from bunchee for the build system, due to import issues across various projects.

3.0.3

Patch Changes

  • #475 a922f9b Thanks @0xcadams! - Feature: added Broadcast.StatusIndicator and moved LiveIndicator as a Player-only primitive.

    The LiveIndicator was not providing an accurate representation of the stream state, and Broadcast.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 now Player.LiveIndicator since this only applies to live/not-live playback.

3.0.2

Patch Changes

  • #472 89aec9c Thanks @0xcadams! - Fix: added hlsConfig to <Player.Video />, autohide to <Controls />, and miscellaneous fixes for player and broadcast.

3.0.1

Patch Changes

  • #470 81ead35 Thanks @0xcadams! - Fix: fixed the interface for broadcasting (and player) to be vendor agnostic. This now uses getIngest similar to the getSrc for Player, which attempts to parse out a WHIP ingest URL. This has been tested against Cloudflare's WHIP/WHEP offering.

3.0.0

Major Changes

  • #459 8463de1 Thanks @0xcadams! - Major release: first preview release of the unstyled, composable <Player /> and <Broadcast /> primitives based on Radix UI.

The motivation

This is a ground-up rewrite of most of the @livepeer/react library. In this release, we had some problems we wanted to solve:

  1. The <Player />/<Broadcast /> components are not very composable. They essentially break with any type of customization.
  2. 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.
  3. The styling is difficult and hard to rework as a developer (and not compatible with Server Components).
  4. The react native package is under-maintained and far behind the web player in terms of features/support.

Our approach

  1. 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.
  2. We removed all API data fetching on the Player (e.g. all of the hooks like useCreateAsset), and now provide helpers to use the new livepeer 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.
  3. 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.
  4. 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.

New features & fixes

  • Composable components - all components are extremely narrow in their scope, and support the asChild pattern popularized by Radix UI. When asChild 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 the poster 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.

Callouts

  • 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 and use 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.

Patch Changes

  • #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.

3.0.0-next.2

Patch Changes

  • #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.

3.0.0-next.1

Patch Changes

  • #460 4847132 Thanks @0xcadams! - Fix: fixed the broadcast experience to handle display media and included a settings popover in the demo Next.js app.

3.0.0-next.0

Major Changes

  • #456 4669aaf Thanks @0xcadams! - Major release: first preview release of the unstyled, composable <Player /> and <Broadcast /> primitives based on Radix UI.

The motivation

This is a ground-up rewrite of most of the @livepeer/react library. In this release, we had some problems we wanted to solve:

  1. The <Player />/<Broadcast /> components are not very composable. They essentially break with any type of customization.
  2. 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.
  3. The styling is difficult and hard to rework as a developer (and not compatible with Server Components).
  4. The react native package is under-maintained and far behind the web player in terms of features/support.

Our approach

  1. 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.
  2. We removed all API data fetching on the Player (e.g. all of the hooks like useCreateAsset), and now provide helpers to use the new livepeer 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.
  3. 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.
  4. 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.

New features & fixes

  • Composable components - all components are extremely narrow in their scope, and support the asChild pattern popularized by Radix UI. When asChild 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 the poster 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.

Callouts

  • 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 and use 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.

2.1.9

Patch Changes

  • #448 26204f4 Thanks @suhailkakar! - Added .quicktime extension to mime.ts and src.ts to allow .quicktime video playback

2.1.8

Patch Changes

2.1.7

Patch Changes

  • #444 6057932 Thanks @0xcadams! - Fix: fixed an issue where all HLS requests with JWT headers will time out.

2.1.6

Patch Changes

  • #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} />;
    };

2.1.5

Patch Changes

2.1.4

Patch Changes

  • #437 714f354 Thanks @0xcadams! - Fix: added back webrtcConfig to the dependencies for WebRTC negotiation useEffect.

2.1.3

Patch Changes

  • #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 use HEAD instead of GET and removed listener for changes to webrtcConfig to reduce developer confusion.

  • #435 b83480c Thanks @0xcadams! - Fix: fix for metrics reporting when switching quickly between streams.

2.1.2

Patch Changes

2.1.1

Patch Changes

2.1.0

Minor Changes

  • #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.

Patch Changes

  • #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.

2.0.10

Patch Changes

  • #418 7b6b1d7 Thanks @0xcadams! - Fix: fixed WebRTC negotiation endpoint to reduce hops to assigned node.

2.0.9

Patch Changes

  • #416 d4f9abe Thanks @0xcadams! - Feature: added redirect URL caching for faster WebRTC playback switching times.

2.0.8

Patch Changes

  • 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.

2.0.7

Patch Changes

  • #413 b8ba1f3 Thanks @0xcadams! - Fix: fixed random Stream is offline errors occurring on live stream playback, and reporting to websocket metrics.

2.0.6

Patch Changes

  • #411 c627b39 Thanks @0xcadams! - Fix: fixed properly closing the playback websocket when a new playback ID is passed into the Player.

2.0.5

Patch Changes

2.0.4

Patch Changes

  • #406 570342f Thanks @victorges! - Fix: fixed metrics to only send values when they are defined, to avoid filtering on the backend.

2.0.3

Patch Changes

  • #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.

2.0.2

Patch Changes

  • #401 06095b6 Thanks @0xcadams! - Fix: resolved issues with WebRTC not playing back correctly on Firefox.

2.0.1

Patch Changes

  • #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.

2.0.0

Major Changes

  • #395 119c28b Thanks @0xcadams! - Breaking: moved livepeer to @livepeer/core-web, which will be aligned with our livepeer packages that are 1-1 with the backend API.

1.9.2

Patch Changes

1.9.1

Patch Changes

  • #392 b8e2831 Thanks @0xcadams! - Fix: added better error handling for HLS.js buffer append errors.

1.9.0

Minor Changes

  • #390 961772d Thanks @0xcadams! - Breaking: removed playbackUrl from stream responses. Developers should migrate to using playbackId to query stream playback URLs.

1.8.8

Patch Changes

  • #388 6095d73 Thanks @0xcadams! - Feature: added onClipStarted and ensured overridden liveSyncDurationCount in HLS config does not throw errors in HLS.js.

1.8.7

Patch Changes

  • #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.

1.8.6

Patch Changes

  • #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();
      }
    }}

1.8.5

Patch Changes

  • 17f84fd Thanks @0xcadams! - Fix: bumping version due to intermittent release error.

1.8.4

Patch Changes

  • #376 3301827 Thanks @0xcadams! - Fix: fixed to have a cleaner fallback for 406 response from WebRTC negotiation.

1.8.3

Patch Changes

  • #374 5cbf402 Thanks @0xcadams! - Fix: fixed the fallback when b-frames exist to not show a playback error until HLS has been attempted.

1.8.2

Patch Changes

  • d809f28 Thanks @0xcadams! - Fix: added changes to strip a non-standard port number from the WebRTC redirect host, if present.

1.8.1

Patch Changes

  • #370 269d3a3 Thanks @0xcadams! - Fix: fix for TTFF reporting, to measure the difference between the play event and the first progress update.

1.8.0

Minor Changes

  • #364 37c97e7 Thanks @0xcadams! - Feature: added lowLatency option of force - 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 is true 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 now true - to opt out of low latency, pass lowLatency=false to the Player or the lvpr.tv search params.

1.7.0

Minor Changes

  • #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 units
    • core-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".

1.6.1

Patch Changes

  • a89e71c Thanks @0xcadams! - Fix: small styling fix for the video/audio source dropdowns.

1.6.0

Minor Changes

  • #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.

Patch Changes

  • #358 50551ce Thanks @0xcadams! - Feature: added renderChildrenOutsideContainer 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 use useMediaController without any parent elements.

    Also added onPlaybackStatusUpdate, which is a callback that is called when the broadcast status updates. This should be used with playbackStatusSelector to limit state updates.

1.6.0-next.2

Minor Changes

  • #356 ac886fb Thanks @0xcadams! - Feature: added <Screenshare /> component for Broadcast, which allows a user to share a screen with their WebRTC broadcast.

Patch Changes

  • #356 ac886fb Thanks @0xcadams! - Feature: added renderChildrenOutsideContainer 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 use useMediaController without any parent elements.

    Also added onPlaybackStatusUpdate, which is a callback that is called when the broadcast status updates. This should be used with playbackStatusSelector to limit state updates.

1.6.0-next.1

Minor Changes

  • 60b46ad Thanks @0xcadams! - Feature: added controls for <Broadcast /> - <BroadcastSettings />, <AudioToggle />, and <VideoToggle />.

1.6.0-next.0

Minor Changes

  • #349 82429d8 Thanks @0xcadams! - Feature: added basic <Broadcast /> component to kick off WebRTC broadcasting testing.

1.5.8

Patch Changes

  • 4811b3e Thanks @0xcadams! - Feature: thanks @martincik - added assetId to the asset upload progress.

  • 7dcda99 Thanks @0xcadams! - Fix: fixed bug with navigator.mediaDevices.getUserMedia throwing an undefined error in a secure context.

1.5.7

Patch Changes

  • 9811490 Thanks @0xcadams! - Fix: hotfix to improve handling of player version.

1.5.6

Patch Changes

  • #345 af16f6d Thanks @0xcadams! - Chore: added version identifiers to the playback websocket to help narrow issues related to specific Livepeer UI Kit releases.

1.5.5

Patch Changes

1.5.4

Patch Changes

  • #340 99321fb Thanks @0xcadams! - Fix: fixed WebRTC playback on Safari and removed redundant HEAD request in SDP negotiation.

1.5.3

Patch Changes

  • #338 8efce52 Thanks @0xcadams! - Feature: added creatorId to useCreateStream, useUpdateStream, and useUpdateAsset.

1.5.2

Patch Changes

  • #336 effc06b Thanks @0xcadams! - Fix: fixed TTFF bug with the Player reporting an inaccurate TTFF when priority was used with a Player which is below the fold. This was happening on the lvpr.tv player, since it is always set to priority even though the Player can be below the fold.

1.5.1

Patch Changes

  • #334 8cd5537 Thanks @0xcadams! - Fix: added a prop, lowLatency, to the Player, to allow for opting-in to low latency WebRTC.

1.5.0

Minor Changes

  • #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.

Patch Changes

  • #332 7924cb5 Thanks @0xcadams! - Fix: changed default track selector to first 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.

1.5.0-next.4

Patch Changes

  • #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.

1.5.0-next.3

Patch Changes

  • #325 d2c76a6 Thanks @0xcadams! - Fix: added debouncing to the error handler to increment the source index with exponential backoff, to prevent any fast reloads.

1.5.0-next.2

Patch Changes

  • #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.

1.5.0-next.1

Patch Changes

  • #320 c49706d Thanks @0xcadams! - Fix: fixed error reporting for metrics websocket with MP4 playback.

1.5.0-next.0

Minor Changes

  • #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.

1.4.4

Patch Changes

  • #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 a type. We currently only support unverified 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;

1.4.3

Patch Changes

  • #310 f840c70 Thanks @0xcadams! - Fix: fixed blank source URLs on lvpr.tv.

  • c8050be Thanks @0xcadams! - Feature:: added the ability to pass in a viewerId 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.

1.4.2

Patch Changes

  • #306 07f4a6e Thanks @0xcadams! - Fix: fixed access control error not resetting when livestream starts.

1.4.1

Patch Changes

  • #304 d2522dd Thanks @spreadzp! - Feature: added support for base64 video sources - this allows for a video source like data:video/webm;base64,GkX...AUL3 to be passed into the src prop and the Player will handle it properly.

1.4.0

Minor Changes

  • #299 ec96b12 Thanks @0xcadams! - Feature: added accessKey and onAccessKeyRequest props to the Player, to support the webhook 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.

Patch Changes

  • #303 8f65da8 Thanks @0xcadams! - Fix: updated the metrics to send the pageUrl as the document.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 an onError callback to the Player to allow users to catch and handle miscellaneous errors which occur in the Player, which are not already handled.

1.3.2

Patch Changes

  • #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, use defaultVolume in the controls prop.

1.3.1

Patch Changes

1.3.0

Minor Changes

  • #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.

Patch Changes

  • #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 an object undefined error.

1.2.3

Patch Changes

  • #286 cd502da Thanks @0xcadams! - Fix: renamed the protocol field to sourceType to align with the backend metrics websocket.

1.2.2

Patch Changes

1.2.1

Patch Changes

  • #270 68f2e64 Thanks @0xcadams! - Fix: fixed usePlayerList to use a React ref to avoid dynamic runtime onViewableItemsChanged errors.

  • #270 68f2e64 Thanks @0xcadams! - Fix: fixed uploads in React Native environments by removing chunk size for tus.

  • #272 b11ea90 Thanks @0xcadams! - Feature: added allowCrossOriginCredentials to the React Player to allow cookies to be sent with playback requests.

  • #270 68f2e64 Thanks @0xcadams! - Fix: fixed getIsVolumeChangeSupported check to not fail for negative volume values.

1.2.0

Minor Changes

  • #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.

Patch Changes

  • #267 85e4c05 Thanks @0xcadams! - Fix: added pageUrl, protocol, preloadTime, and autoplay to metrics to track performance of video load under specific conditions.

1.1.5

Patch Changes

1.1.4

Patch Changes

  • #259 9568500 Thanks @0xcadams! - Feature: added Time to First Frame, Autoplay, and User Agent to metrics reporting. Fixed bugs with play time metrics reporting.

1.1.3

Patch Changes

1.1.2

Patch Changes

  • a8a2c58 Thanks @0xcadams! - Chore: downgraded packages due to versioning conflicts and upgraded zustand.

1.1.1

Patch Changes

1.1.0

Minor Changes

  • #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.

1.0.0

Major Changes

  • #204 9ce1fa4 Thanks @0xcadams! - Refactor: moved the web logic out of livepeer into @livepeer/core to prevent polyfills from conflicting with React Native.

Minor Changes

  • #204 9ce1fa4 Thanks @0xcadams! - Breaking: removed the peer dependency on ethers and typechain in favor of exporting const ABIs which can be used with tools like abitype.

Patch Changes

  • #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: added priority boolean to Player to enable lazy loading for content.

  • #204 9ce1fa4 Thanks @0xcadams! - Feature: added loading 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.

1.0.0-next.6

Minor Changes

  • #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.

1.0.0-next.5

Patch Changes

  • #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: added priority boolean to Player to enable lazy loading for content.

1.0.0-next.4

Patch Changes

  • #213 7f5202d Thanks @0xcadams! - Fix: fixed player to display hours correctly and added version headers to API requests for debugging errors.

1.0.0-next.3

Patch Changes

  • #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.

1.0.0-next.2

Patch Changes

1.0.0-next.1

Patch Changes

  • #187 44adf29 Thanks @0xcadams! - Feature: added further theming overrides to progress and volume sliders.

1.0.0-next.0

Major Changes

  • #182 16b1307 Thanks @0xcadams! - Refactor: moved the web logic out of livepeer into @livepeer/core to prevent polyfills from conflicting with React Native.

Minor Changes

  • #182 16b1307 Thanks @0xcadams! - Breaking: removed the peer dependency on ethers and typechain in favor of exporting const ABIs which can be used with tools like abitype.