android - Xamarin Android Player - 无法播放此视频

标签 android xamarin android-emulator android-mediaplayer android-videoview

我正在使用 Android 的 VideoView 在我的应用中播放嵌入式视频。它在我的设备上运行良好,但我在 Xamarin Android Player 中不断收到“无法播放此视频”消息和黑屏。

error message

相应的错误日志如下所示:

Unable to play video
[MediaPlayer] Error (1,-38)
[VideoView] Error: 1,-38

我找到了一些关于这个错误的帖子,但没有一个能帮助我解决这个问题,而且我找不到这个状态代码的正确描述。

我的 C# 代码如下所示:

videoView = new VideoView (Context);
base.SetNativeControl (videoView);
videoView.SetOnErrorListener (new ErrorListener ());

string fileName = e.NewElement.FileSource;
fileName = fileName.ToLower ().Substring (0, fileName.LastIndexOf ("."));
int resourceID = Context.Resources.GetIdentifier (fileName, "raw", Context.PackageName);
var fullPath = String.Format ("android.resource://{0}/{1}", Context.PackageName, resourceID);

videoView.SetVideoPath (fullPath);
videoView.RequestFocus ();
videoView.Start ();

最佳答案

似乎是模拟器支持的编码类型的问题,如果你安装 ffmpeg,如果你在 mac 上运行这些命令:

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

brew install ffmpeg 

然后处理您的视频文件:

ffmpeg -i big_buck_bunny_720p_1mb.mp4 -c:v libx264 -profile:v baseline -c:a aac -strict -2 -b:a 128k output.mp4 

并尝试播放它不会显示该错误的输出,但它将是一个空白视频(只是一个黑屏)。所以我认为问题只是获得正确的编码,尝试了一些不同的编码但似乎都显示黑屏。

将进行更多挖掘,但目前似乎只是模拟器不支持您的编码。

编辑

好的,我开始播放视频了,我用以下方法处理了视频:

ffmpeg -i SampleVideo_1080x720_1mb.mp4 -codec:v libx264 -profile:v baseline -preset slow -b:v 250k -maxrate 250k -bufsize 500k -vf scale=-1:360 -threads 0 -codec:a aac -strict -2 -b:a 96k output.mp4

检查这个site对于 ffmpeg 参数。 我像这样设置我的 VideoView:

public class Activity1 : Activity
    {
        VideoView videoView;
        protected override void OnCreate (Bundle bundle)
        {
            base.OnCreate (bundle);

            // Set our view from the "main" layout resource
            SetContentView (Resource.Layout.Main);
            videoView = FindViewById<VideoView> (Resource.Id.SampleVideoView);
            videoView.SetMediaController(new MediaController(this));
            videoView.SetVideoPath ($"android.resource://{PackageName}/{Resource.Raw.output}");
            videoView.RequestFocus ();
            videoView.Start ();
        }
    }

这似乎适用于 Xamarin Android Player,但仅适用于 API 版本 16(JellyBean) 和 19(Kitkat)。 21( Lollipop )只是没有加载视频。

然后我下载了 GenyMotion模拟器(需要创建一个帐户,但个人使用是免费的)来检查它是否是 Xamarin 播放器。它适用于除 21( Lollipop )以外的所有 (16,17,18,19,20 + 22)。看起来 21 的模拟器有问题,我在 nexus 4 模拟器上做了所有测试。因此,如果您想测试视频播放,我会尽量避免使用 API 21 的模拟器。

关于android - Xamarin Android Player - 无法播放此视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31515590/

相关文章:

java - 如何以编程方式绘制 ImageButtons 的 5x5 矩阵?

ios - 文本字段键盘设置为数字键盘,但在选择时显示常规键盘

c# - 使用CarouselPage Xamarin.Forms防止用户刷卡超出预期

java - 根据 Android API 级别包含外部库

android - android :attr/textAppearanceMedium and ? android :textAppearanceMedium? 有什么区别?

javascript - WebView 完成上一次 JavaScript 注入(inject)的加载后,在 Android 中注入(inject) JavaScript

java - Wifi和3G同时

c# - 是否可以从 Sqlite 查询返回动态对象或数据集?

Android 开发要为 Windows Defender 排除哪些文件夹?

android - 使用 Android 模拟器 "-scale"选项的有损图片