UNPKG

piliv2

Version:

Pili Streaming Cloud Server-Side Library For NodeJS

308 lines (247 loc) 7.79 kB
<!-- START doctoc generated TOC please keep comment here to allow auto update --> <!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE --> **Table of Contents** *generated with [DocToc](http://doctoc.herokuapp.com/)* - [Pili Streaming Cloud server-side library for NodeJS](#pili-streaming-cloud-server-side-library-for-nodejs) - [Features](#features) - [Installaion](#installaion) - [Usage](#usage) - [Configuration](#configuration) - [URL](#url) - [Generate RTMP publish URL](#generate-rtmp-publish-url) - [Generate RTMP play URL](#generate-rtmp-play-url) - [Generate HLS play URL](#generate-hls-play-url) - [Generate HDL play URL](#generate-hdl-play-url) - [Generate Snapshot play URL](#generate-snapshot-play-url) - [Hub](#hub) - [Instantiate a Pili Hub object](#instantiate-a-pili-hub-object) - [Create a new Stream](#create-a-new-stream) - [Get a Stream](#get-a-stream) - [LiveInfo](#liveinfo) - [List Stream](#list-stream) - [Get Streams live status](#get-streams-live-status) - [Stream](#stream) - [Disable a Stream](#disable-a-stream) - [Enable a Stream](#enable-a-stream) - [Get Stream live status](#get-stream-live-status) - [Get Stream history activity](#get-stream-history-activity) - [Save Stream live playback](#save-stream-live-playback) - [Save Stream snapshot](#save-stream-snapshot) - [Update Stream converts](#update-stream-converts) <!-- END doctoc generated TOC please keep comment here to allow auto update --> # Pili Streaming Cloud server-side library for NodeJS ## Features - URL - [x] RTMP推流地址: RTMPPublishURL(domain, hub, streamKey, mac, expireAfterSeconds) - [x] RTMP直播地址: RTMPPlayURL(domain, hub, streamKey) - [x] HLS直播地址: HLSPlayURL(domain, hub, streamKey) - [x] HDL直播地址: HDLPlayURL(domain, hub, streamKey) - [x] 截图直播地址: SnapshotPlayURL(domain, hub, streamKey) - Hub - [x] 创建流: hub.Create(streamKey) - [x] 获得流: hub.Stream(streamKey) - [x] 列出流: hub.List(prefix, limit, marker) - [x] 列出正在直播的流: hub.ListLive(prefix, limit, marker) - [x] 批量查询直播实时信息: hub.batchLiveStreamsInfo(items) - Stream - [x] 流信息: stream.Info() - [x] 禁用流: stream.Disable() - [x] 启用流: stream.Enable() - [x] 查询直播状态: stream.LiveStatus() - [x] 保存直播回放: stream.Save(start, end) - [x] 查询直播历史: stream.HistoryActivity(start, end) - [x] 保存直播截图: stream.saveSnapshot() - [x] 修改流转码配置: stream.updateConverts(profiles) ## Installaion ```shell // install latest version npm install piliv2 --save ``` ## Usage ### Configuration ```javascript var Pili = require('piliv2'); var ACCESS_KEY = 'QiniuAccessKey'; var SECRET_KEY = 'QiniuSecretKey'; var HUB = 'PiliHubName'; // The Hub must be exists before use var credentials = new Pili.Credentials(ACCESS_KEY, SECRET_KEY); ``` ### URL #### Generate RTMP publish URL ```javascript var url = Pili.publishURL(credentials,'publish-rtmp.test.com', 'PiliSDKTest', 'streamkey', 60); console.log(url); // rtmp://publish-rtmp.test.com/PiliSDKTest/streamkey?e=1466652726&token=9roGzeeJkZh4y5gHpzT7Uv1CIw0KiVV8K4dfXRY0:bYZGIdK-tjjAfyIwbShQ5Bb1kBY= ``` #### Generate RTMP play URL ```javascript var url = Pili.rtmpPlayURL('live-rtmp.test.com', 'PiliSDKTest', 'streamkey'); console.log(url); // rtmp://live-rtmp.test.com/PiliSDKTest/streamkey ``` #### Generate HLS play URL ```javascript var url = Pili.hlsPlayURL('live-rtmp.test.com', 'PiliSDKTest', 'streamkey'); console.log(url); // http://live-rtmp.test.com/PiliSDKTest/streamkey.m3u8 ``` #### Generate HDL play URL ```javascript var url = Pili.hdlPlayURL('live-rtmp.test.com', 'PiliSDKTest', 'streamkey'); console.log(url); // http://live-rtmp.test.com/PiliSDKTest/streamkey.flv ``` #### Generate Snapshot play URL ```javascript var url = Pili.snapshotPlayURL('live-rtmp.test.com', 'PiliSDKTest', 'streamkey'); console.log(url); // http://live-rtmp.test.com/PiliSDKTest/streamkey.jpg ``` ### Hub #### Instantiate a Pili Hub object ```javascript var hub = new Pili.Hub(credentials, HUB); ``` #### Create a new Stream ```javascript hub.createStream(streamKey, function(err, stream) { if (!err) { console.log(stream); } else { // Log error console.log(err, err.errorCode, err.httpCode); } }); ``` #### Get a Stream ```javascript var stream = hub.newStream(streamKey); stream.loadInfo(function(err) { if (!err) { console.log(stream); } else { console.log(err + 'error code: ' + err.errorCode + 'http code: ' + err.httpCode); } }) ``` #### LiveInfo ```javascript stream.liveInfo(function(err, status) { if (!err) { console.log(status); } else { console.log(err + 'error code: ' + err.errorCode + 'http code: ' + err.httpCode); } }); ``` #### List Stream ```javascript var listOptions = { 'liveonly': false, 'prefix': '', 'limit': 2, }; var listCallBack = function(err, marker, streams) { if (!err) { streams.forEach(function(stream) { console.log(stream); }); if (marker) { listOptions.marker = marker; hub.listStreams(listOptions, listCallBack); } } else { console.log(err + 'error code: ' + err.errorCode + 'http code: ' + err.httpCode); } } hub.listStreams(listOptions, listCallBack); ``` #### Get Streams live status ```javascript hub.batchLiveStreamsInfo([streamKey], function (err, items) { if (!err) { console.log('live streams: '); items.forEach(function(item) { console.log(item); }); } else { console.log(err + 'error code: ' + err.errorCode + 'http code: ' + err.httpCode); } }); ``` ### Stream #### Disable a Stream ```javascript stream.disable(-1, function(err) { console.log(stream.disabledTill); }); ``` #### Enable a Stream ```javascript stream.enable(function(err) { console.log(stream.disabledTill); }); ``` #### Get Stream live status ```javascript stream.liveInfo(function(err, status) { if (!err) { console.log(status); } else { console.log(err + 'error code: ' + err.errorCode + 'http code: ' + err.httpCode); } }); ``` #### Get Stream history activity ```javascript var publishHistoryOptions = { start : null, // optional, in second, unix timestamp end : null, // optional, in second, unix timestamp }; stream.publishHistory(publishHistoryOptions, function(err, history) { if (!err) { console.log(history); } else { console.log(err + 'error code: ' + err.errorCode + 'http code: ' + err.httpCode); } }) ``` #### Save Stream live playback ```javascript var savePlaybackOptions = { start : null, // optional, in second, unix timestamp end : null, // optional, in second, unix timestamp format: null, // optional, file format }; stream.savePlayback(savePlaybackOptions, function(err, m3u8Name) { if (!err) { console.log(m3u8Name); } else { console.log(err + 'error code: ' + err.errorCode + 'http code: ' + err.httpCode); } }); ``` #### Save Stream snapshot ```javascript var saveSnapshotOptions = { fname: streamKey // optional, file name }; stream.saveSnapshot(saveSnapshotOptions, function(err, snapshotName) { if (!err) { console.log(snapshotName); } else { console.log(err + 'error code: ' + err.errorCode + 'http code: ' + err.httpCode); } }); ``` #### Update Stream converts ```javascript stream.updateConverts(['480p', '720p'], function (err) { if (!err) { console.log('update converts success'); } else { console.log('update converts error: ' + err + 'error code: ' + err.errorCode + 'http code: ' + err.httpCode); } }) ```