【问题标题】:Agora Cloud Recording: Error 404 (Flutter + Google Cloud Function)Agora 云端录制:错误 404(Flutter + Google Cloud Function)
【发布时间】: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


【解决方案1】:

我在这里找到了document,它为您报告的错误提供了一些背景信息。

“没有与这些值匹配的路由”:此消息的一个可能原因是您在请求中输入了错误的 HTTP 方法,例如在应该是 POST 时使用了 GET。另一个可能的原因是您将请求发送到了错误的 URL。

【讨论】:

  • 我正在使用 POST 方法,并且我拥有的 URL 似乎是正确的... 'api.agora.io/v1​/apps​/' + appID + '​/cloud_recording​/resourceid​/' + resourceID + '​/mode​/mix/start'
  • 我在Query api 中遇到了这个错误,我将Post 更改为Get 然后它给出了响应。但我收到了404: Resource not found 的回复。如果您对此有任何想法,请提供帮助。
【解决方案2】:

请确保通过 Agora 控制台为您的项目启用云录制。

要在您的项目上启用云录制,请访问 https://console.agora.io/cloud-recording 并从左上角的下拉列表中选择 项目 名称,点击 持续时间 云录制下方的链接,然后单击按钮以启用该项目的服务。

点击开启云录制后,会提示确认并发通道设置,默认为50,点击确定。启用后,您应该会看到启用的使用图。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-05
    • 1970-01-01
    • 1970-01-01
    • 2021-09-02
    相关资源
    最近更新 更多