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) GetAsset(id string, strongConsistency bool) (*Asset, error)
- func (lapi *Client) GetAssetByPlaybackID(pid string, includeDeleted bool) (*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) 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 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 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"`
}
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"`
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) GetAssetByPlaybackID ¶ added in v0.2.5
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"`
}
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"`
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"`
}
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"`
}