1

TLDR:

  • 通过 aws-sdk (js) -> AWS Elastic Transcoder 以 HLSv4 格式将视频上传到 S3
  • 使用 4 个预设上传我的视频:video_only_low、video_only_mid、video_only_high、audio_only(Elastic Transcoder 中的 HLSv4 不支持包含视频和音频的预设)
  • 自动生成的 .m3u8 文件在我的 3 个视频流旁边有一个纯音频流,因此互联网速度较慢的用户只能在视频播放器中听到没有视频(黑屏)的音频
  • 我可以手动从 .m3u8 文件中删除仅音频流线,但我希望在没有此仅音频流的情况下自动生成 .m3u8 文件

-> 见最后的问题。

全文:

我使用 HLSv4 流式传输视频 + 音频,并使用 AWS Elastic Transcoder 和 S3 的 aws-sdk (js) (2.604.0) 将原始文件(例如 .mp4)转换为 HLSv4。我指定了 4 个 Elastic Transcoder 预设:video_low、video_mid、video_high 和一个用于每个视频使用的音频。对于 HLSv4,我无法为视频和音频生成一个预设,必须有一个或多个视频预设和一个音频预设。转码后,以下生成的 .m3u8 文件在 S3 输出存储中(在不同质量的视频/音频文件旁边):

(用随机引导替换引导)

    #EXTM3U
    #EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio-0",NAME="Default",AUTOSELECT=YES,DEFAULT=YES,URI="11111111-2222-3333-4444-555555555555_audio_v4.m3u8"
    #EXT-X-I-FRAME-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=14024000,CODECS="avc1.4d001f",URI="11111111-2222-3333-4444-555555555555_video_low_iframe.m3u8"
    #EXT-X-I-FRAME-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=22071000,CODECS="avc1.4d001f",URI="11111111-2222-3333-4444-555555555555_video_mid_iframe.m3u8"
    #EXT-X-I-FRAME-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=38803000,CODECS="avc1.4d0029",URI="11111111-2222-3333-4444-555555555555_video_high_iframe.m3u8"
    #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1387000,RESOLUTION=960x540,CODECS="avc1.4d001f,mp4a.40.2",AUDIO="audio-0" 11111111-2222-3333-4444-555555555555_video_low_v4.m3u8
    #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=2001000,RESOLUTION=1280x720,CODECS="avc1.4d001f,mp4a.40.2",AUDIO="audio-0" 11111111-2222-3333-4444-555555555555_video_mid_v4.m3u8
    #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=4061000,RESOLUTION=1920x1080,CODECS="avc1.4d0029,mp4a.40.2",AUDIO="audio-0" 11111111-2222-3333-4444-555555555555_video_high_v4.m3u8
    #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=182000,CODECS="mp4a.40.2",AUDIO="audio-0" 11111111-2222-3333-4444-555555555555_audio_v4.m3u8

我们的代码 + Elastic Transcoder 在过去几年中运行良好。自 2020 年初以来,我们的用户已经打开了很多票,他们有时只听到音频流而没有视频。因此,我们使用不同的互联网带宽测试了视频,当带宽不足以容纳低质量的视频时,我们可以重现该错误。

.m3u8 文件在上面文件的第二行中定义,这是每个视频都使用的 ID 为“audio-0”的音频。没关系,因此对于所有不同的视频质量,音频只存储一次。

.m3u8 文件在最后一行定义,仅音频是低带宽设备的流。所以我明白,互联网速度较慢的设备只能获得纯音频流。但我不希望我们的用户只流式传输没有视频的音频,他们应该看到一个加载图标,直到视频播放器缓冲到足够低的视频质量。所以为了测试,我删除了最后一行,所以视频播放器只有 video_low、-_mid 和 -_high 流可用,所以当我在慢速互联网上时,视频播放器会缓冲,直到它下载了第一段( 7 秒)的视频。

所以我可以从我们视频的所有 .m3u8 文件中删除纯音频流线来解决这个错误。但我不想每天更新所有新的 .m3u8 文件并删除生成文件的最后一行。

弹性转码作业的创建是通过 aws-sdk for javascript 实现的,并使用 CreateJobOutputs 对象以及有关新视频必须转码的预设的所有信息。

2个问题:

  • 我该怎么办,生成的 .m3u8 文件不包含纯音频流的最后一行?

  • 为什么我们的代码和视频流在过去几年运行良好,而自 2020 年初以来,我们的用户遇到了这个问题?我们每月更新 aws-sdk,但很长一段时间我都找不到任何更改和 Elastic Transcoder 的 aws-sdk 发行说明

4

0 回答 0