Xamarin Android Player - 无法播放此视频

时间:2015-07-20 11:41:48

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

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

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 ();

2 个答案:

答案 0 :(得分:11)

模拟器支持的编码类型似乎是一个问题,如果你安装了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(棒棒糖)只是不加载视频。

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

答案 1 :(得分:2)

不同的Android操作系统版本支持视频容器中不同的音频和视频编码组合。所以它取决于您的Android播放器模拟的版本。有关表格,请参阅{{3}}