Documentation ¶
Index ¶
- Constants
- Variables
- func GeolocateAPIServer() (string, error)
- func MustGeolocateAPIServer() string
- type Asset
- type AssetFile
- type AssetFileSpec
- type AssetHash
- type AssetIPFS
- type AssetSource
- 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) 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) FlagAssetAsDeleted(assetID string) error
- func (lapi *Client) GetAsset(id string, strongConsistency bool) (*Asset, error)
- func (lapi *Client) GetAssetByPlaybackID(pid string, includeDeleted bool) (*Asset, error)
- func (lapi *Client) GetDeletingAssets() ([]*Asset, error)
- func (lapi *Client) GetMultistreamTarget(id string) (*MultistreamTarget, error)
- func (lapi *Client) GetObjectStore(id string) (*ObjectStore, error)
- func (lapi *Client) GetPlaybackInfo(pid string) (*PlaybackInfo, 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) GetStream(id string, forceRecordingUrl bool) (*Stream, error)
- func (lapi *Client) GetStreamByKey(key string) (*Stream, error)
- func (lapi *Client) GetStreamByPlaybackID(playbackID string) (*Stream, error)
- func (lapi *Client) GetTask(id string, strongConsistency bool) (*Task, error)
- func (lapi *Client) Heartbeat(id string) error
- func (lapi *Client) Ingest(all bool) ([]Ingest, error)
- func (lapi *Client) ListAssets(opts ListOptions) ([]*Asset, string, error)
- func (lapi *Client) LockPull(id string, leaseTimeout time.Duration, host string) error
- func (lapi *Client) PushSegment(sid string, seqNo int, dur time.Duration, segData []byte, resolution string) ([][]byte, error)
- func (lapi *Client) RequestUpload(name, catalystStrategy string) (*UploadUrls, error)
- func (lapi *Client) ResumableUpload(url string, file *os.File) error
- func (lapi *Client) SetActive(id string, active bool, startedAt time.Time) (ok bool, err error)
- func (lapi *Client) TranscodeAsset(assetId string, name string, profile Profile) (*Asset, *Task, error)
- func (lapi *Client) TranscodeFile(tfr TranscodeFileReq) (*Task, error)
- func (lapi *Client) UpdateTaskStatus(id string, phase TaskPhase, progress float64, step string) error
- func (lapi *Client) UploadAsset(ctx context.Context, url string, file io.ReadSeeker) error
- func (lapi *Client) UploadViaURL(url, name, catalystStrategy string) (*Asset, *Task, error)
- type ClientOptions
- type ClipTaskParams
- type CreateStreamReq
- type CreatorID
- type ExportAssetResp
- type ExportCustomParams
- type ExportDataTaskParams
- type ExportIPFSParams
- type ExportTaskParams
- type HRN
- type HTTPStatusError
- type IPFS
- type IPFSFileInfo
- type Ingest
- type ListOptions
- type MultistreamTarget
- type MultistreamTargetRef
- type NFTMetadataTemplate
- type ObjectStore
- type Pinata
- type PlaybackInfo
- type PlaybackInfoSource
- type PlaybackInfoSourceType
- type PlaybackInfoType
- type PlaybackPolicy
- type Profile
- type Stream
- type StreamPull
- type Task
- type TaskAndAsset
- type TaskOnlyId
- type TaskPhase
- type TaskStatus
- type TranscodeFileReq
- type TranscodeFileReqCredentials
- type TranscodeFileReqInput
- type TranscodeFileReqOutput
- type TranscodeFileReqOutputs
- type TranscodeFileReqStorage
- type TranscodeFileTaskOutputPath
- type TranscodeFileTaskParams
- type TranscodeTaskParams
- type UploadTaskParams
- type UploadUrls
- 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 returned if receives a 404 error from the API ErrNotExists error = &HTTPStatusError{404, "not exists"} // ErrRateLimited returned if receives a 429 error from the API ErrRateLimited error = &HTTPStatusError{429, "rate limited"} )
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"` DownloadURL string `json:"downloadUrl"` PlaybackURL string `json:"playbackUrl"` StaticMp4 bool `json:"staticMp4,omitempty"` Source AssetSource `json:"source"` Status AssetStatus `json:"status"` AssetSpec SourcePlaybackReady bool `json:"sourcePlaybackReady"` CreatorID *CreatorID `json:"creatorId,omitempty"` ProjectID string `json:"projectId,omitempty"` }
type AssetFile ¶ added in v0.4.0
type AssetFile struct { Type string `json:"type"` Path string `json:"path"` Spec AssetFileSpec `json:"spec,omitempty"` }
type AssetFileSpec ¶ added in v0.4.3
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 AssetSource ¶ added in v0.4.7
type AssetSource struct {
Type string `json:"type,omitempty"`
}
type AssetSpec ¶
type AssetSpec struct { Name string `json:"name,omitempty"` Type string `json:"type"` Size uint64 `json:"size"` Hash []AssetHash `json:"hash"` Files []AssetFile `json:"files"` VideoSpec *AssetVideoSpec `json:"videoSpec,omitempty"` Storage *AssetStorage `json:"storage,omitempty"` 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) 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) FlagAssetAsDeleted ¶ added in v0.4.23
func (*Client) GetAssetByPlaybackID ¶ added in v0.2.5
func (*Client) GetDeletingAssets ¶ added in v0.4.23
func (*Client) GetMultistreamTarget ¶
func (lapi *Client) GetMultistreamTarget(id string) (*MultistreamTarget, error)
func (*Client) GetObjectStore ¶
func (lapi *Client) GetObjectStore(id string) (*ObjectStore, error)
func (*Client) GetPlaybackInfo ¶ added in v0.4.3
func (lapi *Client) GetPlaybackInfo(pid string) (*PlaybackInfo, 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) GetStreamByKey ¶
GetStreamByKey gets stream by streamKey
func (*Client) GetStreamByPlaybackID ¶
GetStreamByPlaybackID gets stream by playbackID
func (*Client) ListAssets ¶ added in v0.2.3
func (lapi *Client) ListAssets(opts ListOptions) ([]*Asset, string, error)
func (*Client) PushSegment ¶
func (lapi *Client) PushSegment(sid string, seqNo int, dur time.Duration, segData []byte, resolution string) ([][]byte, error)
PushSegment pushes a segment with retries
func (*Client) RequestUpload ¶ added in v0.3.0
func (lapi *Client) RequestUpload(name, catalystStrategy string) (*UploadUrls, error)
func (*Client) ResumableUpload ¶ added in v0.3.0
Temporary function while waiting for go-api-client to get fixed
func (*Client) TranscodeAsset ¶ added in v0.2.3
func (*Client) TranscodeFile ¶ added in v0.4.2
func (lapi *Client) TranscodeFile(tfr TranscodeFileReq) (*Task, error)
TranscodeFile transcodes a file
func (*Client) UpdateTaskStatus ¶
func (*Client) UploadAsset ¶ added in v0.3.0
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 ClipTaskParams ¶ added in v0.4.10
type ClipTaskParams struct { URL string `json:"url"` CatalystPipelineStrategy string `json:"catalystPipelineStrategy,omitempty"` ClipStrategy struct { StartTime int64 `json:"startTime"` EndTime int64 `json:"endTime"` PlaybackId string `json:"playbackId"` } InputSessionID string `json:"sessionId"` InputID string `json:"inputId"` SourceObjectStoreID string `json:"sourceObjectStoreId"` }
type CreateStreamReq ¶ added in v0.2.0
type CreateStreamReq struct { Name string `json:"name"` ParentID string `json:"parentId,omitempty"` CreatorID string `json:"creatorId,omitempty"` // one of: P720p60fps16x9, P720p30fps16x9, P720p30fps4x3, P576p30fps16x9, P360p30fps16x9, P360p30fps4x3, P240p30fps16x9, P240p30fps4x3, P144p30fps16x9 // this is deprecated and Profiles should be used instead. Presets []string `json:"presets,omitempty"` Profiles []Profile `json:"profiles,omitempty"` Record bool `json:"record,omitempty"` PlaybackPolicy *PlaybackPolicy `json:"playbackPolicy,omitempty"` RecordObjectStoreId string `json:"recordObjectStoreId,omitempty"` ObjectStoreId string `json:"objectStoreId,omitempty"` }
type ExportAssetResp ¶ added in v0.2.3
type ExportAssetResp struct {
Task Task `json:"task"`
}
type ExportCustomParams ¶ added in v0.4.8
type ExportDataTaskParams ¶ added in v0.4.8
type ExportDataTaskParams struct { Content json.RawMessage `json:"content"` Type string `json:"type"` ID string `json:"id"` Custom *ExportCustomParams `json:"custom,omitempty"` IPFS *ExportIPFSParams `json:"ipfs,omitempty"` }
type ExportIPFSParams ¶ added in v0.4.8
type ExportIPFSParams 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"` }
type ExportTaskParams ¶
type ExportTaskParams struct { Custom *ExportCustomParams `json:"custom,omitempty"` IPFS *ExportIPFSParams `json:"ipfs,omitempty"` }
type HTTPStatusError ¶ added in v0.4.2
func (*HTTPStatusError) Error ¶ added in v0.4.2
func (e *HTTPStatusError) Error() string
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 PlaybackInfo ¶ added in v0.4.3
type PlaybackInfo struct { Type PlaybackInfoType `json:"type"` Meta struct { Live *int `json:"live,omitempty"` Source []PlaybackInfoSource `json:"source"` } `json:"meta"` }
type PlaybackInfoSource ¶ added in v0.4.3
type PlaybackInfoSource struct { Hrn HRN `json:"hrn"` Type PlaybackInfoSourceType `json:"type"` Url string `json:"url"` }
type PlaybackInfoSourceType ¶ added in v0.4.3
type PlaybackInfoSourceType string
const (
PlaybackInfoSourceTypeHLS PlaybackInfoSourceType = "html5/application/vnd.apple.mpegurl"
)
type PlaybackInfoType ¶ added in v0.4.3
type PlaybackInfoType string
const ( PlaybackInfoTypeLive PlaybackInfoType = "live" PlaybackInfoTypeVod PlaybackInfoType = "vod" PlaybackInfoTypeRecording PlaybackInfoType = "recording" )
type PlaybackPolicy ¶ added in v0.4.14
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"` Quality int `json:"quality,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"` IsActive bool `json:"isActive,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"` Suspended bool `json:"suspended,omitempty"` Record bool `json:"record"` Profiles []Profile `json:"profiles,omitempty"` Multistream struct { Targets []MultistreamTargetRef `json:"targets,omitempty"` } `json:"multistream"` // These can be present on parent stream objects if they are used to stream // directly to broadcasters (i.e. not using the streamKey through RTMP) RecordingStatus string `json:"recordingStatus,omitempty"` // ready, waiting RecordingURL string `json:"recordingUrl,omitempty"` Mp4Url string `json:"mp4Url,omitempty"` Pull *StreamPull `json:"pull,omitempty"` PullRegion string `json:"pullRegion,omitempty"` CreatorID *CreatorID `json:"creatorID,omitempty"` ProjectID string `json:"projectId,omitempty"` }
Stream object as returned by the API
type StreamPull ¶ added in v0.4.15
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"` ExportData *ExportDataTaskParams `json:"exportData"` Transcode *TranscodeTaskParams `json:"transcode"` TranscodeFile *TranscodeFileTaskParams `json:"transcode-file"` Clip *ClipTaskParams `json:"clip"` } `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"` TranscodeFile *struct { BaseUrl string `json:"baseUrl"` Hls TranscodeFileTaskOutputPath `json:"hls"` Mp4 []TranscodeFileTaskOutputPath `json:"mp4"` } `json:"transcodeFile"` } `json:"output"` Status TaskStatus `json:"status"` }
type TaskAndAsset ¶ added in v0.2.3
type TaskOnlyId ¶ added in v0.3.0
type TaskOnlyId struct {
ID string `json:"id"`
}
type TaskStatus ¶
type TranscodeFileReq ¶ added in v0.4.2
type TranscodeFileReq struct { Input TranscodeFileReqInput `json:"input,omitempty"` Storage TranscodeFileReqStorage `json:"storage,omitempty"` Outputs TranscodeFileReqOutputs `json:"outputs,omitempty"` }
type TranscodeFileReqCredentials ¶ added in v0.4.2
type TranscodeFileReqInput ¶ added in v0.4.2
type TranscodeFileReqOutput ¶ added in v0.4.6
type TranscodeFileReqOutput struct {
Path string `json:"path,omitempty"`
}
type TranscodeFileReqOutputs ¶ added in v0.4.2
type TranscodeFileReqOutputs struct { Hls TranscodeFileReqOutput `json:"hls,omitempty"` Mp4 TranscodeFileReqOutput `json:"mp4,omitempty"` FMp4 TranscodeFileReqOutput `json:"fmp4,omitempty"` }
type TranscodeFileReqStorage ¶ added in v0.4.2
type TranscodeFileReqStorage struct { Type string `json:"type,omitempty"` Endpoint string `json:"endpoint,omitempty"` Credentials *TranscodeFileReqCredentials `json:"credentials,omitempty"` Bucket string `json:"bucket,omitempty"` }
type TranscodeFileTaskOutputPath ¶ added in v0.4.3
type TranscodeFileTaskOutputPath struct {
Path string `json:"path,omitempty"`
}
type TranscodeFileTaskParams ¶ added in v0.4.2
type TranscodeFileTaskParams struct { Input struct { URL string `json:"url"` } `json:"input"` Storage struct { URL string `json:"url"` } `json:"storage"` Outputs struct { HLS struct { Path string `json:"path"` } `json:"hls"` MP4 struct { Path string `json:"path"` } `json:"mp4"` FMP4 struct { Path string `json:"path"` } `json:"fmp4"` } `json:"outputs"` Profiles []Profile `json:"profiles,omitempty"` CatalystPipelineStrategy string `json:"catalystPipelineStrategy,omitempty"` TargetSegmentSizeSecs int64 `json:"targetSegmentSizeSecs,omitempty"` C2PA bool `json:"c2pa,omitempty"` }
type TranscodeTaskParams ¶
type TranscodeTaskParams struct {
Profile Profile `json:"profile,omitempty"`
}
type UploadTaskParams ¶ added in v0.3.0
type UploadTaskParams struct { URL string `json:"url,omitempty"` Encryption struct { EncryptedKey string `json:"encryptedKey,omitempty"` Key string `json:"key,omitempty"` Algorithm string `json:"algorithm,omitempty"` } `json:"encryption,omitempty"` RecordedSessionID string `json:"recordedSessionId,omitempty"` UploadedObjectKey string `json:"uploadedObjectKey,omitempty"` CatalystPipelineStrategy string `json:"catalystPipelineStrategy,omitempty"` Thumbnails bool `json:"thumbnails"` C2PA bool `json:"c2pa,omitempty"` Profiles []Profile `json:"profiles,omitempty"` TargetSegmentSizeSecs int64 `json:"targetSegmentSizeSecs,omitempty"` }
type UploadUrls ¶ added in v0.3.0
type UploadUrls struct { Url string `json:"url"` TusEndpoint string `json:"tusEndpoint"` Asset Asset `json:"asset"` Task TaskOnlyId `json:"task"` }