• 请不要在回答技术问题时复制粘贴 AI 生成的内容
therethere
V2EX  ›  程序员

懂 IOS 开发的尽量瞧瞧,现在有这么个问题

  •  
  •   therethere · Apr 18, 2017 · 6887 views
    This topic created in 3490 days ago, the information mentioned may be changed or developed.
    1.我们数据存储用的亚马逊 s3 , bucket 里面存储的都是视频,但是有的是有 mp4 后缀的,有的没有。这是问题 1
    2.我们用了亚马逊 cdn , http://xxx.cloudfront.net 用浏览器打开这种地址会跳转到一个 IP ,类似这样,比如文件是
    http://xxx.cloudfront.net/a_1.mp4 会跳转到 http://ip/xxx.cloudfront.net/a_1.mp4.

    然后结果就是 android 没有任何问题, IOS 那边就是播放不了,开发人员说的是 他只是把链接传给 ios 播放器,播放不了他也没办法。让服务器改成 mp4 后缀,而且不能给 cdn 地址给 ios 端,用原始地址。。。这个求个解释
    29 replies  •  2017-06-09 18:00:10 +08:00
    lion9527
    lion9527
    Apr 18, 2017
    1
    要 iOS 换个第三方播放器呗
    cevincheung
    cevincheung
    Apr 18, 2017
    2
    分明就是不相自己再多一个步骤。
    ios 下 ffmpeg 又不是不能用。源码开放的。
    byfar
    byfar
    Apr 18, 2017
    3
    不懂 ios 开发,不过不是要用 https?
    skylancer
    skylancer
    Apr 18, 2017
    4
    分明就是你那个 iOS 不想干活要偷懒
    luwu1991
    luwu1991
    Apr 18, 2017 via iPhone
    5
    不是不能播放吧,只是 iOS 现在不能用 IP 和服务器通信,必须是域名。这个是苹果的上架要求。
    DSKcpp
    DSKcpp
    Apr 18, 2017
    6
    我的记得 AVPlayer 播放视频要有后缀,不然放不了
    用第三方可破
    therethere
    therethere
    OP
    Apr 18, 2017
    7
    我是觉得,流媒体播放应该和后缀没关系,有点郁闷
    zyq2280539
    zyq2280539
    Apr 18, 2017
    8
    可能跟播放器有关系吧,多试试其他播放器的框架呢
    xi_lin
    xi_lin
    Apr 18, 2017
    9
    @therethere 你们这不是在线流媒体播放吧?不是固定的文件么?
    crashX
    crashX
    Apr 18, 2017❤️1
    10
    ffmpeg 的授权协议很严格,楼上站着说话不腰疼的有几个完全按照协议要求开源的?
    grayon
    grayon
    Apr 18, 2017
    11
    第三方播放器
    therethere
    therethere
    OP
    Apr 18, 2017
    12
    自带的播放器不行,是吧?
    therethere
    therethere
    OP
    Apr 18, 2017
    13
    都是同一个数据连接, android 就没问题, android 那边说也是用 google 自带的播放器
    beimenjun
    beimenjun
    Apr 18, 2017
    14
    这个如果能确定自己 bucket 里的文件都是 mp4 结尾的,就在传值进去之前做下验证吧。
    onevcat
    onevcat
    Apr 18, 2017
    15
    如果跳转之后的 http://ip/xxx.cloudfront.net/a_1.mp4 直接扔给 AVPlayer 能正确播放的话,就说明视频本身没问题,是跳转的问题咯。要是最终的视频地址也播放不了就再另说...
    onevcat
    onevcat
    Apr 18, 2017
    16
    如果确定是 CDN 给的 Content-Type 的 header 里没有给出正确的 MIME type 的话,要是能确定所有的 request 文件类型都一致的话,可以自己加一个 Content-Type 然后再喂给 AVPlayer 就好。
    robinshi2010
    robinshi2010
    Apr 18, 2017
    17
    虽然我不懂。但是我觉得喵神说的对。手动滑稽。
    linKnowEasy
    linKnowEasy
    Apr 18, 2017
    18
    喵神说的对 +1.
    问题 1. 没有后缀的问题. http://ip/xxx.cloudfront.net/a_1 直接丢给播放器. 理论上播放器应该也能播放的吧. 不能的话. 应该也只能确保 bucket 都是有 mp4 后缀。
    问题 2. 如果播放器能播放 http://ip/xxx.cloudfront.net/a_1.mp4 , 让 iOS 开发人员在播放器请求 http://xxx.cloudfront.net/a_1.mp4 , 拿到 跳转的地址. 再去丢给播放器。 这个理论上应该可行吧 , (需要拦截 http 请求?。 判断 url 是否含有 ip ?)。
    Jacky001
    Jacky001
    Apr 18, 2017
    19
    我来捣个乱, uiwebview+html5
    xdream86
    xdream86
    Apr 18, 2017
    20
    你倒是留一个真实的 MP4 资源测试地址啊,那些待业的 iOS 开发工程师没准还可以帮你测一测
    ZeoKarl
    ZeoKarl
    Apr 18, 2017
    21
    @onevcat #16 再次活捉喵神
    HelloiWorld
    HelloiWorld
    Apr 18, 2017
    22
    #20 +1. 还有这种上班没事刷帖的=_=
    therethere
    therethere
    OP
    Apr 18, 2017
    24
    @onevcat ios 人员说,播放的时候不能给 avplayer 传 content-type 。。。只能传 url 。
    Shvier
    Shvier
    Apr 18, 2017
    25
    @therethere - -感觉贵司的 iOS 人员不太了解 http 这些啊(虽然我也不是很了解), AVPlayer 确实只能传 URL ,但是在线播放一定会有 request ,喵神的意思是修改 request 里的请求内容,至于拿到 request 有很多方法,比如可以通过 AVAssetResourceLoaderDelegate 协议对 request 进行拦截巴拉巴拉。
    Shvier
    Shvier
    Apr 18, 2017
    26
    @therethere #25 另外楼上给的链接我试了试,确实无法直接播放,抓包观察 Content-Type 是空的,下载完成存到本地,没有扩展名导致不能播放,手动添加扩展名可以播放。
    yiios
    yiios
    Apr 18, 2017❤️1
    27
    如果只是格式问题的话 我宁愿写个方法 把这种格式过滤一下
    therethere
    therethere
    OP
    Apr 19, 2017
    28
    @Shvier 链接确实有的是空的,有的不是 video/mp4 。我现在就是在写个脚本,批量修改 s3 里面的 content-type
    mooczz
    mooczz
    Jun 9, 2017
    29
    所以,讨论的半天还是没结果,最合理的是用第三方播放器,嗯,我也遇到了这个问题
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1520 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 72ms · UTC 15:36 · PVG 23:36 · LAX 07:36 · JFK 10:36
    ♥ Do have faith in what you're doing.