oak-general-business/es/utils/livestream.js

59 lines
2.3 KiB
JavaScript

import { assert } from 'oak-domain/lib/utils/assert';
import { getConfig } from './getContextConfig';
/**
* 创建直播流并生成推拉流地址
* @param streamTitle 直播流名称
* @param expireAt 推流过期时间
* @param context context
* @returns Livestream 对象
*/
export async function getLivestream(params, context) {
const { streamTitle, expireAt, origin } = params;
// 获取七牛直播云信息
const { instance, config, } = getConfig(context.getApplication().system.config, 'Live', origin);
assert(origin === 'qiniu');
const { hub, liveHost, publishDomain, playDomainType, playDomain, playKey, publishKey, publishSecurity } = config;
const r = await instance.createLiveStream(hub, streamTitle, liveHost, publishDomain, playDomainType, playDomain, expireAt, publishSecurity, publishKey, playKey);
return {
streamTitle,
hub,
rtmpPushUrl: r.rtmpPushUrl,
rtmpPlayUrl: r.playUrl,
pcPushUrl: r.pcPushUrl,
streamKey: r.streamKey,
expireAt,
};
}
// 获取推拉流地址
/**
* 直播流已存在的情况下,获取推拉流地址
* @param streamTitle 直播流名称
* @param expireAt 推流过期时间
* @param context context
* @returns livestream对象
*/
export async function getStreamObj(params, context) {
const { streamTitle, expireAt, origin } = params;
const { instance, config, } = getConfig(context.getApplication().system.config, 'Live', origin);
assert(origin === 'qiniu');
const { playDomainType, publishDomain, publishSecurity, publishKey, playDomain, playKey, hub } = config;
const r = instance.getStreamObj(hub, streamTitle, expireAt, publishDomain, playDomainType, playDomain, publishSecurity, publishKey, playKey);
return {
streamTitle,
hub,
rtmpPushUrl: r.rtmpPushUrl,
rtmpPlayUrl: r.playUrl,
pcPushUrl: r.pcPushUrl,
streamKey: r.streamKey,
expireAt,
};
}
// 生成直播回放
export async function getPlayBackUrl(params, context) {
const { streamTitle, start, end, origin } = params;
// 获取七牛直播云信息
const { config, instance } = getConfig(context.getApplication().system.config, 'Live', origin);
const { hub, playBackDomain, liveHost } = config;
return instance.getPlayBackUrl(hub, playBackDomain, streamTitle, start, end, 'POST', liveHost);
}