【问题标题】:Agora: Why my m3u8 file does not contain timestamp?Agora:为什么我的 m3u8 文件不包含时间戳?
【发布时间】:2021-06-12 09:28:01
【问题描述】:

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

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

start 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

我缺少一些配置吗?

【问题讨论】:

    标签: agora.io


    【解决方案1】:

    虽然您指出没有 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
    

    【讨论】:

    • 谢谢爱马仕。我联系了 agora 支持,答案是对于复合录制,M3U8 文件不包含时间戳,只有 .ts 文件。相反,我们可以获得从 stop api 返回的 sliceStartTime 或 ts 文件名,如上所述。
    猜你喜欢
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-05
    • 1970-01-01
    • 2016-12-21
    • 2019-03-27
    • 2015-11-16
    相关资源
    最近更新 更多