Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/32.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
Asp.net Xamarin.forms新媒体元素不播放youtube视频_Asp.net_Xamarin_Xamarin.forms_Xamarin.android_Xamarin.ios - Fatal编程技术网

Asp.net Xamarin.forms新媒体元素不播放youtube视频

Asp.net Xamarin.forms新媒体元素不播放youtube视频,asp.net,xamarin,xamarin.forms,xamarin.android,xamarin.ios,Asp.net,Xamarin,Xamarin.forms,Xamarin.android,Xamarin.ios,我正在实现xamarin表单媒体元素。我可以从xamarin媒体元素官方文档中提供的链接播放视频。但问题是我想播放youtube视频,但它没有播放。我已经在app.xaml.cs中设置了标志,但youtube视频仍然没有发生任何事情。它只在模拟器和物理设备中显示空白屏幕 <MediaElement Source="https://youtu.be/E7Voso411Vs" x:Name="mediaSource"

我正在实现xamarin表单媒体元素。我可以从xamarin媒体元素官方文档中提供的链接播放视频。但问题是我想播放youtube视频,但它没有播放。我已经在app.xaml.cs中设置了标志,但youtube视频仍然没有发生任何事情。它只在模拟器和物理设备中显示空白屏幕

<MediaElement Source="https://youtu.be/E7Voso411Vs" x:Name="mediaSource"
                          AutoPlay="True" ShowsPlaybackControls="True" 
                          VerticalOptions="FillAndExpand" />

希望得到解决方案。

谢谢。

您应该使用
https://www.youtube.com/get_video_info?video_id={VideoId}
首先,尝试以下操作:

<MediaElement  x:Name="mediaSource"
             AutoPlay="True" ShowsPlaybackControls="True" 
             VerticalOptions="FillAndExpand" />

是的,你不能直接演奏。首先,您必须将youtube视频url转换为流,您可以使用

var videoId=(字符串)参数[“videoId”];
var videoURL=$”https://www.youtube.com/watch?v={videoId}”;
var youtube=new YoutubeClient();
var streamManifest=wait youtube.Videos.Streams.GetManifestAsync(videoId);
var streamInfo=streamManifest.getmux(),具有最高的视频质量();
如果(streamInfo!=null)
{
//获取实际的流
var stream=wait youtube.Videos.Streams.GetAsync(streamInfo);
var source=streamInfo.Url;
//然后将其与MediaElement一起使用
mediaSource.Source=Source;
}

YT-link是基于网络的视频播放器,而不是直接视频链接。使用
WebView
insteads在“使用”块中包装HttpClient不被视为反模式吗?对于本例,这很好。如果您试图获取50个youtube视频的URL,那么是的,您可能不希望每次都创建一个新的HttpClient。如果您要传递URL,则不需要
流。但是值得注意的是,YoutubeExplode返回的stream对象非常复杂,因此如果可能的话,您希望在URL上使用它,因为它处理很多事情。
public MediaElem()
    {
        InitializeComponent();

        mediaSource.Source = GetYouTubeUrl("E7Voso411Vs");

    }



public string GetYouTubeUrl(string videoId)
    {
        var videoInfoUrl = $"https://www.youtube.com/get_video_info?video_id={videoId}";
        using (var client = new HttpClient())
        {
            var videoPageContent = client.GetStringAsync(videoInfoUrl).Result;
            var videoParameters = HttpUtility.ParseQueryString(videoPageContent);
            var encodedStreamsDelimited1 = WebUtility.HtmlDecode(videoParameters["player_response"]);
            JObject jObject = JObject.Parse(encodedStreamsDelimited1);
            string url = (string)jObject["streamingData"]["formats"][0]["url"];
            return url;           
        }
    }