【问题标题】:What can be the reason a video can not be played on certain devices?无法在某些设备上播放视频的原因是什么?
【发布时间】:2018-03-25 14:28:01
【问题描述】:

我正在开发一个 Xamarin 应用程序,该应用程序允许用户创建具有 4 种不同内容类型 [文本、图像、声音、视频] 的消息。

在添加视频之前一切正常。

文件正在发送并存储在 blob 数据库中。它适用于我们的大多数设备,例如:

  • LG Nexus 5 (???)
  • LG Nexus 5X (8.0)
  • 三星 Galaxy S3 Neo (4.4.2)

但不知何故,它不适用于我们的三星 Galaxy S7 (7.0) 和三星 Galaxy S4 (???)。

在第一批设备上,我可以制作/选择视频并将它们发送到服务器,它们将可以在所有其他设备(甚至 SGS7 和 SGS4)上的 Android VideoView 中播放。 视频是使用外部相机应用制作的。

当我使用 SGS7/SGS4 制作/选择视频时,视频可以在预览中播放。 但是在它们被发送到服务器并且您尝试阅读消息之后,视频将不会在任何设备上播放(甚至不是制作它们的设备)。但是视频确实存在,因为它的 URL 可以在浏览器中播放。

我一整天都在调试,看起来没什么特别的。发送文件时我没有收到任何错误。

您知道这可能出问题的地方以及为什么大多数设备都可以正常工作吗?

【问题讨论】:

  • 这里有很多东西在起作用。可以播放本地存储的视频吗?您如何将视频发送给客户?
  • 如果我从网上下载视频并通过usb放在设备上,我可以播放视频。所以格式应该很好,文件没有损坏。感觉 Android VideoView 对流文件有一些限制。
  • 嗯,还有更多。 mediaType 必须出现在标头中,并且一些客户端希望内容以一种特殊的方式流式传输,例如在视频流完全下载之前向前擦洗。那么你是如何流式传输的呢?
  • @bryanbcook 我很抱歉,我对整个视频播放流媒体真的很陌生。我只知道媒体文件存储在 azure blobstorage 中,Android VideoView 获取该项目的 url。对于 iOS 和 Web 以及 Android 上的较小视频来说,它似乎还不错。但是当视频变大时,Android VideoView 会抛出 Can't play Video 消息。
  • 好的,这很有帮助。我之前已经成功地从 azure blob 存储中流式传输视频。您是否能够在 iOS 上下载的内容之外继续前进?

标签: android xamarin xamarin.android video-streaming samsung-galaxy


【解决方案1】:

使用默认的 MediaPlayer 有一些限制:

ExoPlayer 支持基于 HTTP 的动态自适应流 (DASH)、SmoothStreaming 和通用加密等功能,这些功能不受 MediaPlayer 支持。它旨在易于定制和扩展。

来源:ExoPlayer

使用 ExoPlayer,我可以播放以前可以播放的视频。

【讨论】:

    【解决方案2】:

    ExoPlayer 可能是您最好的选择。 Xamarin.Forms MediaPlayer 插件也使用它。

    关于来自 Azure 存储的流式传输,this blog post 为我提供了一些非常有用的信息,因为如果我们尝试清理视频,我的 Android 应用程序将会崩溃:

    1. 媒体内容类型已在媒体上正确设置。 mp4 视频的 mime 类型应为“video/mp4”
    2. 媒体文件本身可能是个问题。 H.264 encoded files can sometimes have the index at the end of the file,表示播放前必须下载整个文件。
    3. 如果您使用的是旧系统,您的 Azure 存储版本 view here 可能需要更新。 x-ms-version 标头应大于 2012-02-12

    【讨论】:

    • 我会将您的答案标记为解决方案,因为您提供了更多详细信息,再次感谢!
    猜你喜欢
    • 2012-09-26
    • 2023-01-03
    • 2022-01-06
    • 1970-01-01
    • 1970-01-01
    • 2020-03-04
    • 1970-01-01
    • 1970-01-01
    • 2016-09-03
    相关资源
    最近更新 更多