Agora:为什么我的 m3u8 文件没有时间戳?

Agora: Why my m3u8 file does not contain timestamp?

我正在使用 agora 组合录音,并希望检索开始时间戳以构建同步播放。 文档说 You can find the start timestamp at the start of each M3U8 file,但是我的 M3U8 文件不包含任何时间戳。

我可以按预期通过 ffmpeg 将输出文件(ts 和 m3u8)转换为 mp4。

开始api的请求正文如下;

const url = `${agoraApi}/v1/apps/${appId}/cloud_recording/resourceid/${resourceId}/mode/mix/start`

const body = {
  cname,
  uid,
  clientRequest: {
    token,
    storageConfig: {
      vendor: 1, // Amazon S3,
      region: 10, // AP_NORTHEAST_1
      accessKey: process.env.AWS_ACCESS_KEY_ID,
      secretKey: process.env.AWS_SECRET_ACCESS_KEY,
      bucket: process.env.AWS_S3_BUCKET,
      fileNamePrefix: ["records"],
    },
    recordingConfig: {
      channelType: 1, // default. 0: Communication profile, 1: Live broadcast profile
      // maxIdleTime: 30, // seconds (default)
      transcodingConfig: {
        width: 640, // default
        height: 360, // default
        fps: 15, // default
        bitrate: 600,
        mixedVideoLayout: 0, // default
      },
    },
  },
};

输出M3U8文件

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-ALLOW-CACHE:YES
#EXT-X-TARGETDURATION:18
#EXTINF:16.038000
8893be119d40bbc66f7ef9a26a676a12_live-aea67a87-f821-4234-894b-1512fcdae181_20210603064340040.ts
#EXTINF:15.972000
8893be119d40bbc66f7ef9a26a676a12_live-aea67a87-f821-4234-894b-1512fcdae181_20210603064357105.ts
#EXTINF:16.038000
8893be119d40bbc66f7ef9a26a676a12_live-aea67a87-f821-4234-894b-1512fcdae181_20210603064413077.ts
#EXTINF:15.971000
8893be119d40bbc66f7ef9a26a676a12_live-aea67a87-f821-4234-894b-1512fcdae181_20210603064429115.ts
#EXTINF:16.039000
8893be119d40bbc66f7ef9a26a676a12_live-aea67a87-f821-4234-894b-1512fcdae181_20210603064445086.ts
#EXTINF:15.972000
8893be119d40bbc66f7ef9a26a676a12_live-aea67a87-f821-4234-894b-1512fcdae181_20210603064501125.ts
#EXTINF:15.972000
8893be119d40bbc66f7ef9a26a676a12_live-aea67a87-f821-4234-894b-1512fcdae181_20210603064517097.ts
#EXTINF:16.038000
8893be119d40bbc66f7ef9a26a676a12_live-aea67a87-f821-4234-894b-1512fcdae181_20210603064533069.ts
#EXTINF:15.972000
8893be119d40bbc66f7ef9a26a676a12_live-aea67a87-f821-4234-894b-1512fcdae181_20210603064549107.ts
#EXTINF:16.038000
8893be119d40bbc66f7ef9a26a676a12_live-aea67a87-f821-4234-894b-1512fcdae181_20210603064605079.ts
#EXTINF:15.972000
8893be119d40bbc66f7ef9a26a676a12_live-aea67a87-f821-4234-894b-1512fcdae181_20210603064621117.ts
#EXTINF:16.038000
8893be119d40bbc66f7ef9a26a676a12_live-aea67a87-f821-4234-894b-1512fcdae181_20210603064637088.ts
#EXTINF:11.679000
8893be119d40bbc66f7ef9a26a676a12_live-aea67a87-f821-4234-894b-1512fcdae181_20210603064653127.ts
#EXT-X-ENDLIST

我是不是缺少一些配置?

虽然您指出没有 Epoch/Unix 时间戳是正确的,但有一个“时间戳”,其中包含每个段的名称。如果您注意到段名称的末尾,是人类可读的日期和时间。

例如,第一个.ts文件被命名为:

8893be119d40bbc66f7ef9a26a676a12_live-aea67a87-f821-4234-894b-1512fcdae181_20210603064340040.ts

如果您使用 _ 作为分隔符拆分名称,则数组的最后一个元素是您的时间戳。例如,使用上面的名称,时间戳将是 20210603064340040.

更进一步,您可以将其分解为:

yyyy mm dd hh mm ss ms
------------------------
2021 06 03 06 43 40 040

使用列表中接下来的三个文件我们可以看到

8893be119d40bbc66f7ef9a26a676a12_live-aea67a87-f821-4234-894b-1512fcdae181_20210603064357105.ts
8893be119d40bbc66f7ef9a26a676a12_live-aea67a87-f821-4234-894b-1512fcdae181_20210603064413077.ts
8893be119d40bbc66f7ef9a26a676a12_live-aea67a87-f821-4234-894b-1512fcdae181_20210603064429115.ts
yyyy mm dd hh mm ss ms
------------------------
2021 06 03 06 43 57 105
2021 06 03 06 44 13 077
2021 06 03 06 44 29 115