Android Xamarin安卓播放器-Can';我不能播放这个视频

Android Xamarin安卓播放器-Can';我不能播放这个视频,android,xamarin,android-emulator,android-mediaplayer,android-videoview,Android,Xamarin,Android Emulator,Android Mediaplayer,Android Videoview,我正在使用Android的VideoView在我的应用程序中播放嵌入式视频。它在我的设备上运行良好,但我一直收到一条“无法播放此视频”的消息,Xamarin Android播放器上显示一个黑屏 相应的错误日志如下所示: Unable to play video [MediaPlayer] Error (1,-38) [VideoView] Error: 1,-38 我找到了一些关于这个错误的帖子,但是没有一篇帮助我解决这个问题,我也找不到这个状态代码的正确描述 我的C#代码如下所示: Una

我正在使用Android的VideoView在我的应用程序中播放嵌入式视频。它在我的设备上运行良好,但我一直收到一条“无法播放此视频”的消息,Xamarin Android播放器上显示一个黑屏

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

Unable to play video
[MediaPlayer] Error (1,-38)
[VideoView] Error: 1,-38
我找到了一些关于这个错误的帖子,但是没有一篇帮助我解决这个问题,我也找不到这个状态代码的正确描述

我的C#代码如下所示:

Unable to play video
[MediaPlayer] Error (1,-38)
[VideoView] Error: 1,-38
videoView=新的videoView(上下文);
base.SetNativeControl(视频视图);
videoView.setOneErrorListener(新的ErrorListener());
字符串文件名=e.NewElement.FileSource;
fileName=fileName.ToLower().Substring(0,fileName.LastIndexOf(“.”);
int resourceID=Context.Resources.GetIdentifier(文件名,“raw”,Context.PackageName);
var fullPath=String.Format(“android.resource://{0}/{1}”,Context.PackageName,resourceID);
videoView.SetVideoPath(完整路径);
videoView.RequestFocus();
videoView.Start();

如果您安装了ffmpeg,如果您的计算机在mac上运行以下命令,则emulator支持的编码类型似乎有问题:

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
检查ffmpeg参数。 我的
视频视图设置如下:

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 ();
        }
    }
公共类活动1:活动
{
视频视图;
创建时受保护的覆盖无效(捆绑包)
{
base.OnCreate(bundle);
//从“主”布局资源设置视图
SetContentView(Resource.Layout.Main);
videoView=findviewbyd(Resource.Id.SampleVideoView);
videoView.SetMediaController(新MediaController(this));
videoView.SetVideoPath($“android.resource://{PackageName}/{resource.Raw.output}”);
videoView.RequestFocus();
videoView.Start();
}
}
这似乎适用于XamarinAndroid播放器,但仅适用于API版本16(JellyBean)和19(Kitkat)。21(棒棒糖)只是不加载视频


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

不同的Android操作系统版本支持视频容器中不同的音频和视频编码组合。因此,这取决于您的Android播放器正在模拟的版本。有关表格,请参见

您的视频是什么格式?mp4?是的,它的格式是mp4,在我的mac电脑上处理视频后可以正常播放,但在模拟器上,它只会产生一个如您所述的黑屏。至少错误消息消失了。知道Xamarin Android播放器支持哪种编码吗?干杯是的,在我的机器上也是一样,不太确定支持什么,这个问题似乎认为是H.263。我将尝试用它来编码,看看它是否播放。我以前看过那篇文章,并没有任何运气就尝试了H.263编码。不过也可以试一下。试过H.263,但还是得到了一个黑屏。注意到一些人说他们可以播放视频,但速度很慢。此外,浏览器似乎能够在模拟器上播放视频,但我假设它没有使用VideoView。我使用您在编辑中发布的命令处理视频。事实上,我只需要使用基线配置文件来处理它:
ffmpeg-I intro.mp4-profile:v baseline output.mp4
。我现在可以在API 16上播放视频,但仍然会在API 21上看到黑屏和错误消息。您认为这会导致物理设备出现问题吗?如果没有,我会继续,忽略它在模拟器上不起作用。干杯我以前见过这个表,根据描述的媒体格式,它应该在我的模拟器上工作(运行棒棒糖API 22)。我正在播放的视频使用H.264 AVC编码和mp4容器格式。好奇xamarin android播放器本身是否存在某种限制。