Documentation
¶
Index ¶
- Constants
- Variables
- func GeolocateAPIServer() (string, error)
- func MustGeolocateAPIServer() string
- func Timedout(err error) bool
- type Asset
- type AssetHash
- type AssetIPFS
- type AssetSpec
- type AssetStatus
- type AssetStorage
- type AssetTrack
- type AssetVideoSpec
- type Client
- func (lapi *Client) Broadcasters() ([]string, error)
- func (lapi *Client) CreateStream(csr CreateStreamReq) (*Stream, error)
- func (lapi *Client) CreateStreamEx(name string, record bool, presets []string, profiles ...Profile) (*Stream, error)
- func (lapi *Client) CreateStreamR(csr CreateStreamReq) (stream *Stream, err error)
- func (lapi *Client) DeactivateMany(ids []string) (int, error)
- func (lapi *Client) DefaultPresets() []string
- func (lapi *Client) DeleteAsset(id string) error
- func (lapi *Client) DeleteStream(id string) error
- func (lapi *Client) ExportAsset(assetId string) (*Task, error)
- func (lapi *Client) GetAsset(id string) (*Asset, error)
- func (lapi *Client) GetAssetByPlaybackID(pid string, includeDeleted bool) (*Asset, error)
- func (lapi *Client) GetMultistreamTarget(id string) (*MultistreamTarget, error)
- func (lapi *Client) GetMultistreamTargetR(id string) (*MultistreamTarget, error)
- func (lapi *Client) GetObjectStore(id string) (*ObjectStore, error)
- func (lapi *Client) GetServer() string
- func (lapi *Client) GetSessions(id string, forceUrl bool) ([]UserSession, error)
- func (lapi *Client) GetSessionsNew(id string, forceUrl bool) ([]UserSession, error)
- func (lapi *Client) GetSessionsNewR(id string, forceUrl bool) ([]UserSession, error)
- func (lapi *Client) GetSessionsR(id string, forceUrl bool) ([]UserSession, error)
- func (lapi *Client) GetStream(id string) (*Stream, error)
- func (lapi *Client) GetStreamByKey(key string) (*Stream, error)
- func (lapi *Client) GetStreamByPlaybackID(playbackID string) (*Stream, error)
- func (lapi *Client) GetTask(id string) (*Task, error)
- func (lapi *Client) ImportAsset(url string, name string) (*Asset, *Task, error)
- func (lapi *Client) Ingest(all bool) ([]Ingest, error)
- func (lapi *Client) ListAssets(opts ListOptions) ([]*Asset, string, error)
- func (lapi *Client) PushSegment(sid string, seqNo int, dur time.Duration, segData []byte, resolution string) ([][]byte, error)
- func (lapi *Client) PushSegmentR(sid string, seqNo int, dur time.Duration, segData []byte, resolution string) (transcoded [][]byte, err error)
- func (lapi *Client) SetActive(id string, active bool, startedAt time.Time) (bool, error)
- func (lapi *Client) SetActiveR(id string, active bool, startedAt time.Time) (bool, error)
- func (lapi *Client) TranscodeAsset(assetId string, name string, profile Profile) (*Asset, *Task, error)
- func (lapi *Client) UpdateTaskStatus(id string, phase string, progress float64) error
- type ClientOptions
- type CreateStreamReq
- type ExportAssetResp
- type ExportTaskParams
- type IPFS
- type IPFSFileInfo
- type Ingest
- type ListOptions
- type MultistreamTarget
- type MultistreamTargetRef
- type NFTMetadataTemplate
- type ObjectStore
- type Pinata
- type Profile
- type Stream
- type Task
- type TaskAndAsset
- type TaskStatus
- type TranscodeTaskParams
- type UploadTaskParams
- type UserSession
Constants ¶
const ( SHORT = 4 DEBUG = 5 VERBOSE = 6 VVERBOSE = 7 INSANE = 12 INSANE2 = 14 )
const ( ProdServer = "livepeer.com" RecordingStatusWaiting = "waiting" RecordingStatusReady = "ready" )
Variables ¶
var ErrNotExists = errors.New("not found")
ErrNotExists returned if receives a 404 error from the API
var StandardProfiles = []Profile{
{
Name: "240p0",
Fps: 0,
Bitrate: 250000,
Width: 426,
Height: 240,
Gop: "2.0",
},
{
Name: "360p0",
Fps: 0,
Bitrate: 800000,
Width: 640,
Height: 360,
Gop: "2.0",
},
{
Name: "480p0",
Fps: 0,
Bitrate: 1600000,
Width: 854,
Height: 480,
Gop: "2.0",
},
{
Name: "720p0",
Fps: 0,
Bitrate: 3000000,
Width: 1280,
Height: 720,
Gop: "2.0",
},
}
Functions ¶
func GeolocateAPIServer ¶
GeolocateAPIServer calls geolocation API endpoint to find the closest server.
func MustGeolocateAPIServer ¶
func MustGeolocateAPIServer() string
Types ¶
type Asset ¶
type Asset struct {
ID string `json:"id"`
Deleted bool `json:"deleted,omitempty"`
PlaybackID string `json:"playbackId"`
UserID string `json:"userId"`
CreatedAt int64 `json:"createdAt"`
SourceAssetID string `json:"sourceAssetId,omitempty"`
ObjectStoreID string `json:"objectStoreId"`
Status AssetStatus `json:"status"`
AssetSpec
}
type AssetIPFS ¶ added in v0.3.0
type AssetIPFS struct {
IPFSFileInfo
NFTMetadata *IPFSFileInfo `json:"nftMetadata,omitempty"`
Spec struct {
NFTMetadataTemplate `json:"nftMetadataTemplate,omitempty"`
NFTMetadata map[string]interface{} `json:"nftMetadata,omitempty"`
} `json:"spec"`
}
type AssetSpec ¶
type AssetSpec struct {
Name string `json:"name,omitempty"`
Type string `json:"type"`
Size uint64 `json:"size"`
Hash []AssetHash `json:"hash"`
VideoSpec *AssetVideoSpec `json:"videoSpec,omitempty"`
Storage AssetStorage `json:"storage"`
PlaybackRecordingID string `json:"playbackRecordingId,omitempty"`
}
type AssetStatus ¶ added in v0.2.3
type AssetStorage ¶ added in v0.3.0
type AssetTrack ¶
type AssetTrack struct {
Type string `json:"type"`
Codec string `json:"codec"`
StartTime float64 `json:"startTime,omitempty"`
DurationSec float64 `json:"duration,omitempty"`
Bitrate float64 `json:"bitrate,omitempty"`
// video track fields
Width int `json:"width,omitempty"`
Height int `json:"height,omitempty"`
PixelFormat string `json:"pixelFormat,omitempty"`
FPS float64 `json:"fps,omitempty"`
// auido track fields
Channels int `json:"channels,omitempty"`
SampleRate int `json:"sampleRate,omitempty"`
BitDepth int `json:"bitDepth,omitempty"`
}
type AssetVideoSpec ¶
type AssetVideoSpec struct {
Format string `json:"format"`
DurationSec float64 `json:"duration"`
Bitrate float64 `json:"bitrate,omitempty"`
Tracks []*AssetTrack `json:"tracks"`
}
type Client ¶
type Client struct {
// contains filtered or unexported fields
}
API object incapsulating Livepeer's hosted API
func NewAPIClient ¶
func NewAPIClient(opts ClientOptions) *Client
NewAPIClient creates new Livepeer API object with a full configuration.
func NewAPIClientGeolocated ¶
func NewAPIClientGeolocated(opts ClientOptions) (*Client, string)
NewAPIClientGeolocated creates a new Livepeer API object calling the geolocation endpoint if no server is provided (by default, server is production instead)
func (*Client) Broadcasters ¶
Broadcasters returns list of hostnames of broadcasters to use
func (*Client) CreateStream ¶
func (lapi *Client) CreateStream(csr CreateStreamReq) (*Stream, error)
CreateStream creates stream with specified name and profiles
func (*Client) CreateStreamEx ¶
func (lapi *Client) CreateStreamEx(name string, record bool, presets []string, profiles ...Profile) (*Stream, error)
CreateStreamEx creates stream with specified name and profiles
func (*Client) CreateStreamR ¶ added in v0.2.6
func (lapi *Client) CreateStreamR(csr CreateStreamReq) (stream *Stream, err error)
CreateStreamR creates a stream with retries
func (*Client) DeactivateMany ¶
DeactivateMany sets many streams isActive field to false
func (*Client) DefaultPresets ¶
DefaultPresets returns default presets
func (*Client) DeleteAsset ¶ added in v0.2.5
func (*Client) DeleteStream ¶
DeleteStream deletes stream
func (*Client) ExportAsset ¶ added in v0.2.3
func (*Client) GetAssetByPlaybackID ¶ added in v0.2.5
func (*Client) GetMultistreamTarget ¶
func (lapi *Client) GetMultistreamTarget(id string) (*MultistreamTarget, error)
func (*Client) GetMultistreamTargetR ¶
func (lapi *Client) GetMultistreamTargetR(id string) (*MultistreamTarget, error)
GetMultistreamTargetR gets multistream target with retries
func (*Client) GetObjectStore ¶
func (lapi *Client) GetObjectStore(id string) (*ObjectStore, error)
func (*Client) GetSessions ¶
func (lapi *Client) GetSessions(id string, forceUrl bool) ([]UserSession, error)
GetSessions gets user's sessions for the stream by id
func (*Client) GetSessionsNew ¶
func (lapi *Client) GetSessionsNew(id string, forceUrl bool) ([]UserSession, error)
func (*Client) GetSessionsNewR ¶
func (lapi *Client) GetSessionsNewR(id string, forceUrl bool) ([]UserSession, error)
GetSessionsNewR gets user's sessions for the stream by id
func (*Client) GetSessionsR ¶
func (lapi *Client) GetSessionsR(id string, forceUrl bool) ([]UserSession, error)
GetSessionsR gets user's sessions for the stream by id
func (*Client) GetStreamByKey ¶
GetStreamByKey gets stream by streamKey
func (*Client) GetStreamByPlaybackID ¶
GetStreamByPlaybackID gets stream by playbackID
func (*Client) ImportAsset ¶ added in v0.2.3
func (*Client) ListAssets ¶ added in v0.2.3
func (lapi *Client) ListAssets(opts ListOptions) ([]*Asset, string, error)
func (*Client) PushSegment ¶
func (*Client) PushSegmentR ¶ added in v0.2.0
func (lapi *Client) PushSegmentR(sid string, seqNo int, dur time.Duration, segData []byte, resolution string) (transcoded [][]byte, err error)
PushSegmentR pushes a segment with retries
func (*Client) SetActiveR ¶
SetActiveR sets stream active with retries
func (*Client) TranscodeAsset ¶ added in v0.2.3
type ClientOptions ¶
type ClientOptions struct {
Server string
AccessToken string
UserAgent string
Timeout time.Duration
Presets []string
Metrics metrics.APIRecorder
}
Object with all options given to Livepeer API
type CreateStreamReq ¶ added in v0.2.0
type CreateStreamReq struct {
Name string `json:"name,omitempty"`
ParentID string `json:"parentId,omitempty"`
Presets []string `json:"presets,omitempty"`
// one of
// - P720p60fps16x9
// - P720p30fps16x9
// - P720p30fps4x3
// - P576p30fps16x9
// - P360p30fps16x9
// - P360p30fps4x3
// - P240p30fps16x9
// - P240p30fps4x3
// - P144p30fps16x9
Profiles []Profile `json:"profiles,omitempty"`
Record bool `json:"record,omitempty"`
RecordObjectStoreId string `json:"recordObjectStoreId,omitempty"`
}
type ExportAssetResp ¶ added in v0.2.3
type ExportAssetResp struct {
Task Task `json:"task"`
}
type ExportTaskParams ¶
type ExportTaskParams struct {
Custom *struct {
URL string `json:"url"`
Method string `json:"method,omitempty"`
Headers map[string]string `json:"headers,omitempty"`
} `json:"custom,omitempty"`
IPFS *struct {
Pinata *struct {
JWT string `json:"jwt,omitempty"`
APIKey string `json:"apiKey,omitempty"`
APISecret string `json:"apiSecret,omitempty"`
} `json:"pinata,omitempty"`
NFTMetadataTemplate `json:"nftMetadataTemplate,omitempty"`
NFTMetadata map[string]interface{} `json:"nftMetadata,omitempty"`
} `json:"ipfs,omitempty"`
}
type IPFS ¶ added in v0.2.3
type IPFS struct {
Pinata *Pinata `json:"pinata,omitempty"`
NFTMetadata interface{} `json:"nftMetadata,omitempty"`
}
type IPFSFileInfo ¶ added in v0.3.0
type Ingest ¶
type Ingest struct {
Base string `json:"base,omitempty"`
Playback string `json:"playback,omitempty"`
Ingest string `json:"ingest,omitempty"`
}
Ingest object
type ListOptions ¶ added in v0.2.5
type MultistreamTarget ¶
type MultistreamTargetRef ¶
type NFTMetadataTemplate ¶ added in v0.1.5
type NFTMetadataTemplate string
const ( NFTMetadataTemplatePlayer NFTMetadataTemplate = "player" // default NFTMetadataTemplateFile NFTMetadataTemplate = "file" )
type ObjectStore ¶
type Profile ¶
type Profile struct {
Name string `json:"name,omitempty"`
Width int `json:"width,omitempty"`
Height int `json:"height,omitempty"`
Bitrate int `json:"bitrate,omitempty"`
Fps int `json:"fps"`
FpsDen int `json:"fpsDen,omitempty"`
Gop string `json:"gop,omitempty"`
Profile string `json:"profile,omitempty"` // enum: - H264Baseline - H264Main - H264High - H264ConstrainedHigh
Encoder string `json:"encoder,omitempty"` // enum: - h264, h265, vp8, vp9
}
Profile transcoding profile
type Stream ¶ added in v0.2.0
type Stream struct {
ID string `json:"id,omitempty"`
Name string `json:"name,omitempty"`
Presets []string `json:"presets,omitempty"`
Kind string `json:"kind,omitempty"`
UserID string `json:"userId,omitempty"`
StreamKey string `json:"streamKey,omitempty"`
PlaybackID string `json:"playbackId,omitempty"`
ParentID string `json:"parentId,omitempty"`
CreatedAt int64 `json:"createdAt,omitempty"`
LastSeen int64 `json:"lastSeen,omitempty"`
SourceSegments int64 `json:"sourceSegments,omitempty"`
TranscodedSegments int64 `json:"transcodedSegments,omitempty"`
SourceSegmentsDuration float64 `json:"sourceSegmentsDuration,omitempty"`
TranscodedSegmentsDuration float64 `json:"transcodedSegmentsDuration,omitempty"`
Deleted bool `json:"deleted,omitempty"`
Record bool `json:"record"`
Profiles []Profile `json:"profiles,omitempty"`
Multistream struct {
Targets []MultistreamTargetRef `json:"targets,omitempty"`
} `json:"multistream"`
}
Stream object as returned by the API
type Task ¶
type Task struct {
ID string `json:"id"`
UserID string `json:"userId"`
CreatedAt int64 `json:"createdAt"`
InputAssetID string `json:"inputAssetId,omitempty"`
OutputAssetID string `json:"outputAssetId,omitempty"`
Type string `json:"type"`
Params struct {
Upload *UploadTaskParams `json:"upload"`
Import *UploadTaskParams `json:"import"`
Export *ExportTaskParams `json:"export"`
Transcode *TranscodeTaskParams `json:"transcode"`
} `json:"params"`
Output *struct {
Export *struct {
IPFS *struct {
VideoFileCid string `json:"videoFileCid"`
NftMetadataCid string `json:"nftMetadataCid"`
VideoFileUrl string `json:"videoFileUrl"`
VideoFileGatewayUrl string `json:"videoFileGatewayUrl"`
NftMetadataUrl string `json:"nftMetadataUrl"`
NftMetadataGatewayUrl string `json:"nftMetadataGatewayUrl"`
} `json:"ipfs"`
} `json:"export"`
} `json:"output"`
Status TaskStatus `json:"status"`
}
type TaskAndAsset ¶ added in v0.2.3
type TaskStatus ¶
type TranscodeTaskParams ¶
type TranscodeTaskParams struct {
Profile Profile `json:"profile,omitempty"`
}