Changelog

Follow up on the latest improvements andย updates.

RSS

Since our initial launch of the Livepeer Player and in-browser Broadcast libraries, the Livepeer Studio team has been collecting feedback and iterating on developer experience, performance, and customizability. Today weโ€™re ringing in February with the launch of the Livepeer Kit - a ground-up rewrite of our React library.
๐Ÿ—บ ๐ˆ๐ฆ๐ฉ๐ฅ๐ž๐ฆ๐ž๐ง๐ญ๐š๐ญ๐ข๐จ๐ง ๐†๐ฎ๐ข๐๐ž๐ฌ ๐š๐ง๐ ๐‘๐ž๐Ÿ๐ž๐ซ๐ž๐ง๐œ๐ž:
๐ŸŽ ๐Œ๐š๐ฃ๐จ๐ซ ๐‚๐ก๐š๐ง๐ ๐ž๐ฌ
๐…๐ž๐ž๐๐›๐š๐œ๐ค: The Player and Broadcast components are not very composable
๐’๐ก๐ข๐ฉ๐ฉ๐ž๐: Weโ€™ve decomposed the previous livepeer-react monolith into libraries of primitives, so that you have full control over your usersโ€™ experience. You can use Player primitives to build a media playback experience, and Broadcast primitives to build an in-browser broadcasting experience.
๐…๐ž๐ž๐๐›๐š๐œ๐ค: livepeer-react encapsulates a lot of application logic (fetching data from the backend, auto-upload, etc), leading to confusing integration pathways
๐’๐ก๐ข๐ฉ๐ฉ๐ž๐: Weโ€™ve decoupled data fetching from the Player and Broadcast with a shared helper library and improved the interaction between the Player and Livepeer SDKs, to provide a more flexible and cohesive experience. 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 styling is difficult and hard to rework (and not compatible with Server Components)
๐’๐ก๐ข๐ฉ๐ฉ๐ž๐: 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.
๐Ÿ’ก ๐Ž๐ญ๐ก๐ž๐ซ ๐ˆ๐ฆ๐ฉ๐ซ๐จ๐ฏ๐ž๐ฆ๐ž๐ง๐ญ๐ฌ
๐‚๐จ๐ฆ๐ฉ๐จ๐ฌ๐š๐›๐ฅ๐ž ๐œ๐จ๐ฆ๐ฉ๐จ๐ง๐ž๐ง๐ญ๐ฌ - 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.
๐€๐ฎ๐ญ๐จ๐ฆ๐š๐ญ๐ข๐œ ๐ฉ๐จ๐ฌ๐ญ๐ž๐ซ ๐ข๐ฆ๐š๐ ๐ž๐ฌ - 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.
๐‘๐ž๐ฌ๐ฎ๐ฆ๐ž ๐ฉ๐ซ๐จ๐ ๐ซ๐ž๐ฌ๐ฌ ๐จ๐ง ๐Ÿ๐š๐ฅ๐ฅ๐›๐š๐œ๐ค - when an error happens during playback for any reason, we resume playback where it left off.
๐๐ซ๐ข๐ง๐  ๐ฒ๐จ๐ฎ๐ซ ๐จ๐ฐ๐ง ๐œ๐จ๐ฆ๐ฉ๐จ๐ง๐ž๐ง๐ญ๐ฌ - 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.

new

Catalyst

Studio

Thumbnailing

Overview
This update allows builders to easily retrieve thumbnails for ongoing livestreams, as well as on-demand assets. Thumbnails are frequently used as poster images when displaying livestreams or assets within an application, and can also enable timeline hover previews (i.e., hovering over the player's timeline bar and seeing a preview image for a portion of the video).
Details
For livestreams, we provide a single updating thumbnail URL - it will return the first frame of the most recent segment of video.
For on-demand assets we provide a way to retrieve a list of thumbnails for your video assets. Thumbnails will be generated as part of the asset processing step, with each โ€œsegmentโ€ (roughly 2-3 seconds) of video resulting in one image. These images are stored in a WebVTT file that is suitable for use in timeline hover previews in addition to retrieval of single images.
Thumbnail URLs for both Live and VOD assets will be accessible through the existing playback info API endpoint.
For more information, please refer to the guides linked below.
Resources
Known Limitations
  • The Livepeer Player supports thumbnails through the
    posterImage
    prop. However, you will need to supply the imageURL; it will not retrieve it automatically.
  • While the thumbnailing feature enables timeline hover previews, the Livepeer Player does not yet have this capability. It will be added in a future release.

new

Catalyst

Livepeer.js

Studio

Livestream Clipping

Overview
This update allows builders to easily create clips of ongoing livestreams. Currently, builders can create clips from the most recent N seconds of a given stream, or clip arbitrary sections of a long-running stream, such as a particular session from a live-streamed conference.
This release includes:
  • Flexible Clip API
  • Player integration for simple clipping use cases (e.g. last 30 seconds)
  • Reference implementation of a social livestream clipping experience
To access these features:
  • SDK and Player users should update to @livepeer/react@3.0.0 or later.
  • Builders using the Clip API should follow the guides below to implement their clipping experience, but do not need to take additional action.
Details
This release of clipping is an expressive API to enable sophisticated livestream clipping workflows. By specifying arbitrary start and end times from a given viewer's perspective, application developers can create clips of ongoing livestreams to capture and share exciting moments.
Resources
Known Limitations
These updates only allow clipping of livestreams; asset clipping will be included in a future release.
Update
We've just released version 3.0.0 of the
@livepeer/react
npm package. This includes renaming the
livepeer
package to
@livepeer/core-web
.
Action Items
If you are using functionality like
parseCid
from that library, we recommend you move to importing from
@livepeer/core-web
.
If you use
livepeer
as a NodeJS library, please prepare to migrate to the new version which is one-to-one with the API. Keep an eye out for our announcement soon regarding the next version of the library.

fixed

Catalyst

Studio

Multistream Target Switching

Overview
With this update, builders and creators can change multistream targets at any time before or during an ongoing stream.
Details
The previous implementation of multistream was unstable and did not allow builders to change multistream targets mid-stream. No implementation details have changed, and developers do not need to change existing integrations to access these features.
Resources
go-livepeer v0.6.0 was just released!
In the Release
In addition to several bugfixes and performance improvements, this release adds a configurable blocklist allowing B nodes to include or exclude specific Orchestrator addresses according to their requirements. For example, Broadcasters using only VOD may prioritize price over performance; Broadcasters who run their own Os may choose to exclude all addresses but their own.
The blocklist is a first step towards an open marketplace for selection configuration, and we expect all sorts of configurations to become available for different use cases.
The hosted gatewayโ€™s current policy can be viewed here.
Overview
This update allows builders to create in-browser broadcasting experiences, so that they can create innovative livestreaming experiences and so that creators are not required to download and configure 3rd-party broadcasting software unless they desire.
This release includes:
  • React SDK for creating custom broadcasting experience
  • Embeddable broadcasting component for easy integration, at
    https://lvpr.tv/broadcast/<stream-key>
To access these features:
  • SDK users should update to
    @livepeer/react@2.6.0
    or later.
  • Builders using the embeddable broadcasting component should follow the guides below to implement their broadcasting experience, but do not need to take additional action.
Details
This release of in-browser broadcasting is a drop-in solution for a basic livestreaming workflow. It is intended to enable creators and social app users (who may not be familiar with the ins and outs of third-party broadcasting software like OBS) to easily livestream.
This release is not intended to be a full replacement for OBS, and does not include complex editing and compositing tools. Instead, it is meant to (1) unlock livestreaming for less technically sophisticated creators and (2) give builders the tools to create novel livestreaming experiences.
Resources
Known Limitations
  • This release does not include a React Native SDK or component. While we may prioritize this in the future, we recommend that builders who are unable to use a web browser make use of the
    react-native-webrtc
    package (link) to capture audio and video + transmit to Livepeer.
Overview
With this update, builders gain access to more detail from the Viewership Engagement API and receive a quick-start tutorial for how to get started.
To access these features, please follow the guides linked in the Resources section below. Please note that these updates alter behavior for some API requests (see note on playbackId). Existing builders leveraging Engagement Analytics should check that their integration behaves as expected and update it accordingly.
Detail
API improvements
Additional Breakdowns:
  • viewerId - ID of the viewer. This must be integrated at the application layer and passed into the player at watch time.
  • creatorId - ID of the creator associated with the video. This value is supplied when the asset is created.
  • playbackId - ID of video or stream. Previously, the API would return this unprompted. Now it needs to be requested explicitly; otherwise, metrics will be application-wide.
  • geohash - Geographical encoding of the viewer's location.
Time window defaults:
  • If the
    from
    parameter is not supplied, then it will default to either seven days before the
    to
    parameter or seven days before "now" if
    to
    is not specified.
Template
We've created a tutorial to help you get started with the API quickly. The tutorial uses Grafana and includes a dashboard template. You can use a free Grafana account and should be able to complete it in about 10 minutes.
Resources

new

Catalyst

Go Livepeer

Broadcaster Logs

Overview
This release offers a public API to enable inspection of Broadcaster logs, so that Orchestrators and other API users can understand the selection algorithms used to assign work to Orchestrator nodes.
To access these logs, builders should query the Broadcaster Introspection API as described here.
Details
This is the initial release of the API, and only a few log lines have been enabled in the public logs. Orchestrators are encouraged to open pull requests to enable additional logs, which will be closely reviewed by the Livepeer team. Additionally, Livepeer core contributors will publish more logs from Livepeer Inc Broadcasters that may aid in understanding the selection algorithms.
Known Limitations
At present, these logs are
only
available for Livepeer Inc broadcasters (though other broadcasters could choose to spin up their own Loki instance to serve their logs). In the future, we may consider collecting logs from other Bs on an opt-in basis.
Resources
Overview
With this update, builders and viewers can expect 95 - 99% faster time-to-ready for VOD assets, so that videos are playable as soon as file upload completes. This is particularly important for recordings of live events (where it's important to make the recording available as soon as possible) and for social applications (where fast uploads improve posting experience).
Details
Builders do not need to take any action to access these improvements. Under the hood, source video is made playable as soon as upload completes. In the background video processing (including transcoding) continues as usual, and transcoded renditions are made available when ready.
Usage Recommendations
For rapid processing of assets that will also be archived on IPFS or Arweave, we strongly encourage either (1) uploading to Livepeer with the IPFS storage option enabled, or (2) uploading the raw file to Livepeer via
useCreateAsset
or the API prior to archiving on dStorage, rather than passing the IPFS / Arweave gateway URL. The gateway URL will work, but may incur longer-than-usual processing time.
Load More
โ†’