Android 播放器无法使用 akamai token 身份验证

标签 android hlsl akamai http-token-authentication

我正在开发一个 Android 应用程序,其中包含播放来自 akamai CDN 的 hls 流的视频 View 。问题是流媒体 URL 具有使用 Akamai API 生成的 token 身份验证。问题是我的视频无法播放此流。

以下格式正常播放
http://xxxxxxx-i.akamaihd.net/hls/live/#####/event1/Playlistaaa_1200.m3u8

以下格式不适用于 Android(但适用于其他开发环境,例如三星智能电视):
http://xxxxxxx-i.akamaihd.net/hls/live/#####/event1/Playlistaaa_1200.m3u8??hdnea=st=1364547301~exp=1364547901~acl=/ *~hmac=4baa8ad07af9f31c2d898bd205986e4c470a99b7573cc93918ce9caa234a8d03

有谁知道如何为 Android 启用此功能,或者是否有任何解决方法?

问候

最佳答案

与 Akamai 核实后,问题已解决,问题出在查询字符串中的“/”字符中。 “/”应替换为“%2F”
工作网址:
http://xxxxx-i.akamaihd.net/hls/live/XXXX/event1/Playlist.m3u8?hdnea=st=1382080396~exp=1382685196~acl=%2F*~hmac=71794db8368c2498fea5fb62c381ce6e51a7ff4628c1225ddfe41411596b5d6e

无效网址:
http://xxxxx-i.akamaihd.net/hls/live/XXXX/event1/Playlist.m3u8?hdnea=st=1382080396~exp=1382685196~acl=/*~hmac=71794db8368c2498fea5fb62c381ce6e51a7ff4628c1225ddfe41411596b5d6e

根据 akamai 的说法,以下是一些评论:

  1. Android 2.x/3.x 设备将不支持 akamai token 身份验证服务
  2. Android的方式存在很多错误 4.x 处理播放列表/fragment 的 url。如果使用“/”字符作为请求 master.m3u8 的查询字符串的一部分 文件 (例如,因为我们正在使用 token 身份验证)和比特率 播放列表和 fragment url 是使用相对 url 定义的, Android 4.x 生成错误的绝对 URL。这是因为安卓 4.x,为了获取基本 url,从第一个字符到最后一个“/”字符获取 master.m3u8 url,即使该字符 是 查询字符串的一部分
  3. Android 4.x HLS 实现非常敏感,存在错误 时间戳。适用于 iPhone 的流,不适用于 Android 4.x 由于时间戳不一致(H.264/AAC 数据包的 PTS/DTS)

请注意,此解决方案也适用于:

  • 三星智能电视播放器
  • LG 智能电视播放器
  • 西部数据播放器

关于Android 播放器无法使用 akamai token 身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15701621/

相关文章:

android - 如何指定不允许使用android :dataExtractionRules and进行任何数据备份

java - 自动解析 Android Studio 中 XML 布局文件中的所有红色下划线?

c# - 用颜色填充裁剪区域

c++ - 将着色器与 directx 11 相结合

javascript - 为什么我的服务器发送事件成批到达?

RecyclerView 和 CardView 的 java.lang.NullPointerException

java - 从 Android 中的 "values"文件夹获取字符串资源

c++ - 错误 X8000 : D3D11 Internal Compiler error : Invalid Bytecode: Invalid operand type for operand #1 of opcode #86 (counts are 1-based)

asp.net - ASP.NET Response.Cache.SetNoStore()与Response.Cache.SetNoServerCaching()