Мы создаем приложение в Xamarin с помощью Xamarin.forms
. В приложении нам нужно воспроизвести видео, поэтому мы написали для этого код. Тем не менее, видео не воспроизводится, и на 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) некоторыми. –
Извините - я немного откинулся назад и не пытаюсь претендовать на кредит. –