某些设备无法播放视频的原因可能是什么?

What can be the reason a video can not be played on certain devices?

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

在将视频添加到混音之前一切正常。

正在发送文件并将其存储在 blob 数据库中。它在我们的大多数设备上运行良好,例如:

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

在第一台设备上,我可以 make/select 视频并将它们发送到服务器,它们将可以 Android VideoView 在所有其他设备(甚至是 SGS7 和SGS4). 这些视频是用外接相机应用制作的。

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

我调试了一整天,没有发现异常。发送文件时我没有收到任何错误。

知道哪里可能出错以及为什么大多数设备工作正常吗?

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

ExoPlayer supports features like Dynamic adaptive streaming over HTTP (DASH), SmoothStreaming and Common Encryption, which are not supported by MediaPlayer. It's designed to be easy to customize and extend.

来源:ExoPlayer

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

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

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

  1. media-content 类型已在媒体上正确设置。 mp4 视频的 mime-type 应该是 "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 header 应该大于 2012-02-12