我们使用构建应用程序在Xamarin。在应用程序中,我们需要播放视频,所以我们为此编写了一些代码。但是,该视频并未播放,Android上的应用程序崩溃,同时抛出一个通用错误。与Xamarin播放视频格式
这是代码:
VideoContainer.cs
using System;
using Xamarin.Forms;
using System.Collections.Generic;
namespace MyApp
{
public class VideoView : View
{
public Action StopAction;
public VideoView()
{
Console.WriteLine("VideoView loaded");
}
public static readonly BindableProperty FileSourceProperty =
BindableProperty.Create<VideoView,string>(
p => p.FileSource,string.Empty);
public string FileSource {
get { return (string)GetValue (FileSourceProperty); }
set { SetValue (FileSourceProperty, value); }
}
public void Stop(){
if(StopAction != null)
StopAction();
}
}
}
VideoViewRender.cs
using System.Text;
using Android.App;
using Android.Content;
using Android.OS;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using Xamarin.Forms;
using Xamarin.Forms.Platform.Android;
using Android.Media;
using Android.Content.Res;
using Java.Lang;
using MyApp.Droid;
[assembly: ExportRenderer(typeof(VideoView), typeof(VideoViewRenderer))]
//
namespace MyApp.Droid
{
public class VideoViewRenderer : ViewRenderer
{
VideoView videoview;
MediaPlayer player;
MediaController mediaController;
Handler handler = new Handler();
public VideoViewRenderer()
{
Console.WriteLine("VideoViewRenderer loaded");
}
public void SurfaceChanged(ISurfaceHolder holder, global::Android.Graphics.Format format, int width, int height)
{
}
public void SurfaceDestroyed(ISurfaceHolder holder)
{
}
void play(string fullPath)
{
AssetFileDescriptor afd = Forms.Context.Assets.OpenFd(fullPath);
if (afd != null)
{
player.SetDataSource(afd.FileDescriptor, afd.StartOffset, afd.Length);
player.Prepare();
player.Start();
Control.Layout(0, 200, 400, 600);
player.Pause();
}
}
public void SurfaceCreated(ISurfaceHolder holder)
{
player.SetDisplay(holder);
}
public override bool OnTouchEvent(MotionEvent e)
{
mediaController.Show();
return false;
}
//--MediaPlayerControl methods----------------------------------------------------
public void Start()
{
player.Start();
}
public void Pause()
{
player.Pause();
}
public int Duration
{
get
{
return player.Duration;
}
}
public int CurrentPosition
{
get
{
return player.CurrentPosition;
}
}
public void SeekTo(int i)
{
player.SeekTo(i);
}
public bool IsPlaying
{
get
{
return player.IsPlaying;
}
}
public int BufferPercentage
{
get
{
return 0;
}
}
public int AudioSessionId
{
get
{
return 0;
}
}
public bool CanPause()
{
return true;
}
public bool CanSeekBackward()
{
return true;
}
public bool CanSeekForward()
{
return true;
}
//--------------------------------------------------------------------------------
}
}
什么情况是,VideoView loaded
登录到控制台,但VideoViewRenderer loaded
不是。我们从the Xamarin forum获得了此代码,但无法成功实施。我们做错了什么?
请注意,张贴链接到您自己的GitHub的项目,但没有附带代码讲解如何使用它可以被看作是[自我推销(http://meta.stackexchange.com/q/57497/284827 )由一些。 –
对不起 - 我分叉它一会儿回来,不是想邀功。 –