微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

我正在使用 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

我是否缺少一些配置?

解决方法

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。