【发布时间】:2020-09-10 14:37:01
【问题描述】:
目前在为 Agora 流启动云录制时遇到问题。
我正在使用颤振并创建了一个云功能来开始录制。
颤动:
AgoraRtcEngine.onJoinChannelSuccess = (String channel, int uid, int elapsed) async {
AgoraCloudRecording().startAgoraCloudRecording(channel, uid);
};
云功能:
export async function retrieveAgoraToken(data: any){
//Variables
const channel = data.channel;
const uid = data.uid;
//AGORA KEYS
const agoraDoc = await agoraDocRef.get();
const appID = agoraDoc.data()!.appID;
const customerID = agoraDoc.data()!.customerID;
const secret = agoraDoc.data()!.secret;
const agoraCredentials = Base64.encode(customerID + ":" + secret);
//AWS
const awsDoc = await awsDocRef.get();
const awsAccessKey = awsDoc.data()!.accessKey;
const awsSecretKey = awsDoc.data()!.secretKey;
const reqHeaders = {"Authorization": "Basic" + agoraCredentials, "Content-type": "application/json"};
const acquireReqBody = {
"cname": channel,
"uid": "1",
"clientRequest": {
"resourceExpiredHour": 24
}
};
console.log(reqHeaders);
//GET RESOURCE ID
const acquireURL = 'https://api.agora.io/v1/apps/' + appID + '/cloud_recording/acquire';
const acquireResourceID = {
method: 'POST',
url: encodeURI(acquireURL),
headers: reqHeaders,
body: JSON.stringify(acquireReqBody)
}
const resourceIDRequest = new Promise<any>((resolve, reject) => {
request(acquireResourceID, function (error:any, res:any, body:any) {
console.error('error:', error); // Print the error if one occurred
console.log('statusCode:', res && res.statusCode); // Print the response status code if a response was received
resolve(JSON.parse(body));
reject('error');
});
});
const resourceIDResponse = await resourceIDRequest;
console.log(resourceIDResponse);
const resourceID = resourceIDResponse.resourceId;
console.log(resourceID);
//START RECORDING
const recordingReqBody = {
"cname": channel,
"uid": "1",
"clientRequest": {
"recordingConfig": {
"maxIdleTime": 30,
"streamTypes": 2,
"channelType": 1,
"videoStreamType": 0,
"transcodingConfig": {
"height": 640,
"width": 360,
"bitrate": 500,
"fps": 15,
"mixedVideoLayout": 1,
"backgroundColor": "#FF0000"
},
"subscribeVideoUids": [
uid
],
"subscribeAudioUids": [
uid
],
"subscribeUidGroup": 0
},
"recordingFileConfig": {
"avFileType": [
"hls"
]
},
"storageConfig": {
"accessKey": awsAccessKey,
"region": 1,
"bucket": "recorded-live-streams",
"secretKey": awsSecretKey,
"vendor": 1,
"fileNamePrefix": [
"directory1",
"directory2"
]
}
}
};
const startRecordingURL = encodeURI('https://api.agora.io/v1/apps/' + appID + '/cloud_recording/resourceid/' + resourceID + '/mode/mix/start');
console.log(startRecordingURL);
const startRecordingOptions = {
method: 'POST',
url: startRecordingURL,
headers: reqHeaders,
body: JSON.stringify(recordingReqBody)
}
const startVideoRecordingReq = new Promise<any>((resolve, reject) => {
request(startRecordingOptions, function (error:any, res:any, body:any) {
console.error('error:', error); // Print the error if one occurred
console.log('statusCode:', res && res.statusCode); // Print the response status code if a response was received
resolve(JSON.parse(body));
reject('error');
});
});
const startVidRecordingResponse = await startVideoRecordingReq;
console.log(startVidRecordingResponse);
}
我什至尝试开始录制添加令牌参数。 我会使用这个库通过 NodeJS 生成令牌:https://github.com/AgoraIO/Tools/tree/master/DynamicKey/AgoraDynamicKey/nodejs
我可以成功从 Agora 获取 resourceID。但是,如果我尝试开始录制,则会收到 404 错误:'no Route match with those values'
【问题讨论】:
-
为了澄清和隔离问题,您能否让相同的代码在 Cloud Functions 之外工作?
标签: flutter google-cloud-functions agora.io