Audio 使用AWS Lambda将Ogg作品作为MKV和CAF进行流媒体传输?

Audio 使用AWS Lambda将Ogg作品作为MKV和CAF进行流媒体传输?,audio,aws-lambda,core-audio,Audio,Aws Lambda,Core Audio,我们希望支持在尽可能多的手机上提供Ogg Opus服务 根据我们的研究和实验,我们发现: Android 5.0+支持Matroska(.mkv、.mka)或WebM(.WebM)容器格式的Ogg Opus Android 7.0+支持Ogg(.Ogg)容器格式的Ogg Opus(别名为.Opus) Android 10+支持Ogg(.Opus)容器格式的Ogg Opus iOS 11+支持核心音频格式(.caf)容器格式的Ogg Opus 声明5.0+支持.ogg和.mkv,但实验证明并非

我们希望支持在尽可能多的手机上提供Ogg Opus服务

根据我们的研究和实验,我们发现:

  • Android 5.0+支持Matroska(.mkv、.mka)或WebM(.WebM)容器格式的Ogg Opus
  • Android 7.0+支持Ogg(.Ogg)容器格式的Ogg Opus(别名为.Opus)
  • Android 10+支持Ogg(.Opus)容器格式的Ogg Opus
  • iOS 11+支持核心音频格式(.caf)容器格式的Ogg Opus
声明5.0+支持.ogg和.mkv,但实验证明并非如此

我们希望使用AWS S3以一些基本格式(如.mkv)存储音频,这将为Android提供诞生服务。对于来自iOS的请求,我们希望将这些请求重定向到AWS Lambda函数,该函数将采用基本格式并将音频流重新打包为.caf容器格式。它不需要任何转码,因为这两种情况下的编解码器(Ogg Opus)是相同的

关于如何实施AWS Lambda有什么建议吗?我们更愿意使用Python,但也愿意使用其他受支持的语言

更新:

  • 我是在查找本文的基础上查看的,但是直接使用ffmpeg可能会更好
  • 转换非常简单,可以使用
    ffmpeg
    opusenc
    (来自opus工具),因此.webm文件将存储在S3中
  • 从.webm到.caf的转换也可以通过ffmpeg轻松完成
  • 我为AWS Lambda找到了一个
所以问题是:如何设置一个Lambda,它要么返回存储在S3中的.webm文件,要么通过Lambda层进行转换?返回的格式应该基于http头(即ACCEPT)还是基于文件扩展名?

我最终使用了容器,并将其从webm转换为caf

    // If an WebM, use FFmpeg to convert container to CAF
    let error = MobileFFmpeg.execute("-i \"\(fileURL.path)\" -acodec copy \"\(cafFileURL.path)\"")

我不清楚你想做什么。用Lambda转换文件?用Lambda提供文件?你能补充一些你想做的细节吗?@Jens谢谢。我补充了更多细节。这样更好吗?问题似乎是“从S3下载文件,将ogg文件重命名为caf文件并返回给用户”:这不会很快。因此,如果你想在音乐播放器应用程序中这样做,用户体验将会很差。我不是100%确定你需要什么,但我有一种非常强烈的感觉,那就是Lambda不是正确的方式。在发出请求之前,您是否知道正在运行的设备?如果是这样:为什么不将caf文件与mkv/ogg/opus文件一起存储在S3中并直接请求它?@Jens这是一个非常大的音频存储库。存储了数千种语言的内容,每种语言的MP3 64Kbps音频收集量约为500-800MB。我们想提供一个较低的比特率版本,并发现Ogg Opus 16Kbps比MP3 16Kbps更好。但是,我们不希望为每个新文件保留重复的(.webm和.caf)。正如你所说,按需提供会太慢,所以我们计划将音频存储为Ogg Opus。我现在很困惑。我还是没有得到你想要的?您想使用Lambda为存储在S3中的每个新文件创建一个caf文件(但仅一次),还是想在每次iOS设备请求opus文件时创建一个新的caf文件?
ffmpeg -i foo.webm -acodec copy -f caf foo.caf
    // If an WebM, use FFmpeg to convert container to CAF
    let error = MobileFFmpeg.execute("-i \"\(fileURL.path)\" -acodec copy \"\(cafFileURL.path)\"")