Я столкнулся с проблемой при воспроизведении локального видеофайла (TestMediaPlayer.Video.Demo_Video.mp4) на платформе Xamarin.
Я создал приложение Cross Platform Test на платформе Xamarin. Я хочу воспроизвести локальный файл mp4 с устройства Windows или Android. Когда я воспроизводю образец видео с веб-адреса, он работает нормально. Но когда я играю в локальной файловой системе, происходит сбой или не воспроизводится этот файл. Я уже установил свойство BuildAction = Embedded Resources для этого видеофайла.
Как воспроизвести файл локального видео (mp4) на платформе Xamarin
Мой пример кода, как показано ниже:
MainPage.xml
<?xml version = "1.0" encoding = "utf-8" ?>
<ContentPage xmlns = "http://xamarin.com/schemas/2014/forms"
xmlns:x = "http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local = "clr-namespace:TestMediaPlayer"
xmlns:forms = "clr-namespace:Plugin.MediaManager.Forms;assembly=Plugin.MediaManager.Forms"
x:Class = "TestMediaPlayer.MainPage">
<StackLayout>
<forms:VideoView x:Name = "VideoPlayer" HeightRequest = "404" WidthRequest = "404" />
</StackLayout>
</ContentPage>
Код за файлом MainPage.cs:
using Plugin.MediaManager;
using Plugin.MediaManager.Abstractions;
using Plugin.MediaManager.Abstractions.Enums;
using Plugin.MediaManager.Abstractions.Implementations;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Xamarin.Forms;
namespace TestMediaPlayer
{
public partial class MainPage : ContentPage
{
public MainPage()
{
InitializeComponent();
testVideo();
// CrossMediaManager.Current.Play("https://archive.org/download/BigBuckBunny_328/BigBuckBunny_512kb.mp4", MediaFileType.Video); // Online resources
}
private async void testVideo()
{
string fileFullName = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalizedResources), "TestMediaPlayer/Video/Demo_Video.mp4");
await CrossMediaManager.Current.Play(new MediaFile("file://" + fileFullName, MediaFileType.Video, ResourceAvailability.Local));
}
}
}





MediaManager обеспечивает собственное воспроизведение файлов мультимедиа, поэтому встроенные ресурсы на основе сборки напрямую не поддерживаются.
Поэтому при использовании URL-адреса на основе file:// вам нужно будет предоставить URL-адрес локальной файловой системы ОС.
Итак, если вам нужно использовать встроенный ресурс (который я лично рекомендовал бы нет), вам нужно будет скопировать его из вашей сборки в физический файл. Есть множество вопросов / ответов SO, которые показывают, как это было сделано, вот только один:
В противном случае вам нужно будет рассмотреть использование ресурсов на основе пакетов iOS или ресурсов на основе Android Asset / Raw.
@skt Ресурсы на основе пакетов iOS, ресурсы на основе ресурсов Android / Raw, файл ресурсов пакета UWP (?) ...
изначально targate для пакета UWP, затем ресурсы на основе Android Asset / Raw
Привет, спасибо за ответ. Моя главная забота - воспроизвести локальный файл. Встроенный ресурс не является обязательным. Есть ли прямой способ разыграть местные ресурсы?