我正在开发一个 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
根据 akamai 的说法,以下是一些评论:
- Android 2.x/3.x 设备将不支持 akamai token 身份验证服务
- Android的方式存在很多错误 4.x 处理播放列表/fragment 的 url。如果使用“/”字符作为请求 master.m3u8 的查询字符串的一部分 文件 (例如,因为我们正在使用 token 身份验证)和比特率 播放列表和 fragment url 是使用相对 url 定义的, Android 4.x 生成错误的绝对 URL。这是因为安卓 4.x,为了获取基本 url,从第一个字符到最后一个“/”字符获取 master.m3u8 url,即使该字符 是 查询字符串的一部分
- Android 4.x HLS 实现非常敏感,存在错误 时间戳。适用于 iPhone 的流,不适用于 Android 4.x 由于时间戳不一致(H.264/AAC 数据包的 PTS/DTS)
请注意,此解决方案也适用于:
- 三星智能电视播放器
- LG 智能电视播放器
- 西部数据播放器
关于Android 播放器无法使用 akamai token 身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15701621/