Asp.net Xamarin.forms新媒体元素不播放youtube视频
我正在实现xamarin表单媒体元素。我可以从xamarin媒体元素官方文档中提供的链接播放视频。但问题是我想播放youtube视频,但它没有播放。我已经在app.xaml.cs中设置了标志,但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"
<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;
}
}