Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无法使用monodroid启动mediaplayer流_C#_Xamarin.android - Fatal编程技术网

C# 无法使用monodroid启动mediaplayer流

C# 无法使用monodroid启动mediaplayer流,c#,xamarin.android,C#,Xamarin.android,我的代码中有一个mediaplayer无法显示任何视频。调用prepareasync()方法时,它会抛出一个关于IllegalStateException的JavaLangException 我已经仔细研究过为什么会出现这种情况,但在C#(只有Java)中找不到任何东西 任何帮助都将不胜感激 using System; using System.Security.Cryptography; using System.Text; using Android.App; using Android.

我的代码中有一个mediaplayer无法显示任何视频。调用prepareasync()方法时,它会抛出一个关于IllegalStateException的JavaLangException

我已经仔细研究过为什么会出现这种情况,但在C#(只有Java)中找不到任何东西

任何帮助都将不胜感激

using System;
using System.Security.Cryptography;
using System.Text;

using Android.App;
using Android.Media;
using Android.OS;
using Android.Views;
using Android.Widget;

namespace androidvid
{
    [Activity(Theme = "@android:style/Theme.NoTitleBar")]
    public class videoplayer : Activity, ISurfaceHolderCallback
    {
        private MediaPlayer mp;
        private string url;

        protected override void OnCreate(Bundle bundle)
        {
            base.OnCreate(bundle);
            SetContentView(Resource.Layout.video);
            url = base.Intent.GetStringExtra("url");
            string urlHost = "http://replays.robstream.co.uk/racereplays/replaysmobile.php?";

            string pk = "oq54rfju6vnjkm123grt";

            DateTime d1 = new DateTime(1970, 1, 1);
            DateTime d2 = DateTime.UtcNow;
            TimeSpan ts = new TimeSpan(d2.Ticks - d1.Ticks);

            double sd = ts.TotalMilliseconds;

            string UTC = sd.ToString().Substring(0, 10);
            string MD5String = UTC + pk + url;
            MD5String = GetMD5Hash(MD5String);

            urlHost += "fish=" + url;
            urlHost += "&cust=xyzab";
            urlHost += "&t=" + UTC;
            urlHost += "&h=" + MD5String;

            url = urlHost;

            mp = new Android.Media.MediaPlayer();
            var surface = FindViewById<SurfaceView>(Resource.Id.surfaceView);
            var holder = surface.Holder;
            holder.AddCallback(this);
            holder.SetType(Android.Views.SurfaceType.PushBuffers);
            holder.SetFixedSize(400, 300);
            try
            {
               mp.PrepareAsync();
            }
            catch (Java.Lang.IllegalStateException e)
            {
                Toast.MakeText(this, e.ToString(), ToastLength.Short).Show();
            }
            mp.Prepared += (object s, EventArgs e) => { mp.Start(); };

            Button btnClose = FindViewById<Button>(Resource.Id.btnClose);
            btnClose.Click += (object s, EventArgs e) => { this.Finish(); };
            mp.Prepared += (object s, EventArgs e) => { mp.Start(); };
        }

    public void SurfaceDestroyed(ISurfaceHolder holder)
    {
        mp.Release();
    }

    public void SurfaceChanged(ISurfaceHolder holder, int a, int b, int c)
    { }

    public void SurfaceCreated(ISurfaceHolder holder)
    {
        try
        {
            mp.SetDisplay(holder);
            mp.SetDataSource(url);
            mp.PrepareAsync();
            mp.Start();
        }
        catch (Java.Lang.IllegalStateException e)
        {
            Toast.MakeText(this, e.ToString(), ToastLength.Short).Show();
        }
    }

    public static string GetMD5Hash(string input)
    {
        System.Security.Cryptography.MD5CryptoServiceProvider x = new System.Security.Cryptography.MD5CryptoServiceProvider();
        byte[] bs = System.Text.Encoding.UTF8.GetBytes(input);
        bs = x.ComputeHash(bs);
        System.Text.StringBuilder s = new System.Text.StringBuilder();
        foreach (byte b in bs)
        {
            s.Append(b.ToString("x2").ToLower());
        }
        return s.ToString();
    }

    static public string GetMd5Sum(string str)
    {
        Encoder enc = System.Text.Encoding.Unicode.GetEncoder();
        byte[] unicodeText = new byte[str.Length * 2];
        enc.GetBytes(str.ToCharArray(), 0, str.Length, unicodeText, 0, true);
        MD5 md5 = new MD5CryptoServiceProvider();
        byte[] result = md5.ComputeHash(unicodeText);
        StringBuilder sb = new StringBuilder();

        for (int i = 0; i < result.Length; i++)
        {
            sb.Append(result[i].ToString("x2"));
        }
        return sb.ToString();
    }
}
}
使用系统;
使用System.Security.Cryptography;
使用系统文本;
使用Android.App;
使用Android.Media;
使用Android.OS;
使用Android.Views;
使用Android.Widget;
名称空间androidvid
{
[活动(主题=“@android:style/Theme.NoTitleBar”)]
公共类视频播放器:活动,ISurfaceHolderCallback
{
私人媒体播放器;
私有字符串url;
创建时受保护的覆盖无效(捆绑包)
{
base.OnCreate(bundle);
SetContentView(Resource.Layout.video);
url=base.Intent.GetStringExtra(“url”);
字符串urlHost=”http://replays.robstream.co.uk/racereplays/replaysmobile.php?";
字符串pk=“oq54rfju6vnjkm123grt”;
DateTime d1=新的日期时间(1970,1,1);
DateTime d2=DateTime.UtcNow;
TimeSpan ts=新的TimeSpan(d2.Ticks-d1.Ticks);
双sd=总毫秒;
字符串UTC=sd.ToString().Substring(0,10);
字符串MD5String=UTC+pk+url;
MD5String=GetMD5Hash(MD5String);
urlHost+=“fish=”+url;
URLSHOST+=“&cust=xyzab”;
URLSHOST+=“&t=“+UTC;
URLSHOST+=“&h=“+MD5String;
url=urlHost;
mp=新的Android.Media.MediaPlayer();
var surface=findviewbyd(Resource.Id.surfaceView);
var holder=表面。holder;
holder.AddCallback(本);
SetType(Android.Views.SurfaceType.PushBuffers);
支架。设置固定尺寸(400300);
尝试
{
mp.PrepareAsync();
}
catch(Java.Lang.IllegalStateException)
{
Toast.MakeText(例如ToString(),ToastLength.Short).Show();
}
mp.Prepared+=(对象s,事件参数e)=>{mp.Start();};
按钮btnClose=findviewbyd(Resource.Id.btnClose);
btnClose.Click+=(对象s,事件参数e)=>{this.Finish();};
mp.Prepared+=(对象s,事件参数e)=>{mp.Start();};
}
公共空隙表面置换(ISurfaceHolder)
{
mp.Release();
}
公共空隙表面更改(ISurfaceHolder支架,内部a、内部b、内部c)
{ }
已处理的公共空隙表面(ISurfaceHolder)
{
尝试
{
mp.设置显示器(支架);
mp.SetDataSource(url);
mp.PrepareAsync();
mp.Start();
}
catch(Java.Lang.IllegalStateException)
{
Toast.MakeText(例如ToString(),ToastLength.Short).Show();
}
}
公共静态字符串GetMD5Hash(字符串输入)
{
System.Security.Cryptography.MD5CryptoServiceProvider x=新的System.Security.Cryptography.MD5CryptoServiceProvider();
byte[]bs=System.Text.Encoding.UTF8.GetBytes(输入);
bs=x.ComputeHash(bs);
System.Text.StringBuilder s=新的System.Text.StringBuilder();
foreach(bs中的字节b)
{
s、 附加(b.ToString(“x2”).ToLower());
}
返回s.ToString();
}
静态公共字符串GetMd5Sum(字符串str)
{
编码器enc=System.Text.Encoding.Unicode.GetEncoder();
字节[]Unicodext=新字节[str.Length*2];
enc.GetBytes(str.ToCharArray(),0,str.Length,unicodext,0,true);
MD5 MD5=新的MD5CryptoServiceProvider();
字节[]结果=md5.ComputeHash(unicodeText);
StringBuilder sb=新的StringBuilder();
for(int i=0;i
谢谢


Paul

查看MediaPlayer的Android文档,它们列出了调用PrepareAsync时可能导致非法状态异常的内容: