如何在网络中的共享文件夹中播放媒体元素中的视频

Posted

技术标签:

【中文标题】如何在网络中的共享文件夹中播放媒体元素中的视频【英文标题】:how play video in media element from shared folder in networking 【发布时间】:2016-12-09 03:21:33 【问题描述】:

我想从网络中的剪切文件中播放媒体元素中的视频。怎么办?

例如,我的本地 IP 是 192.168.1.51 ,共享文件夹名称是 'SharedFileVideo' 。我可以使用 \192.168.1.51\SharedFileVideo\video.mp4 从 Windows 资源管理器访问此文件,但是当我在 Uri 中使用 \192.168.1.51\SharedFileVideo 或 file://192.168.1.51/SharedFileVideo/video.mp4 作为元素媒体源时不播放我的视频。

如何为 uwp 中的中间元素绑定网络共享文件中的视频。

非常感谢

【问题讨论】:

【参考方案1】:

要播放网络共享文件夹中的视频文件,我们可以先获取StorageFile,然后使用SetSource方法设置文件的来源。要访问共享文件夹中的文件,我们需要在应用清单中声明一些功能。 通用命名约定 (UNC) 是 Microsoft Windows 中常用的用于访问共享网络文件夹的命名系统。欲了解更多信息,请参阅File access permissions。

所以我们可以像下面这样设置Package.appxmanifest

<Applications>
  <Application Id="App" Executable="$targetnametoken$.exe" EntryPoint="UWPApp.App">
    <uap:VisualElements DisplayName="UWPApp" Square150x150Logo="Assets\Square150x150Logo.png" Square44x44Logo="Assets\Square44x44Logo.png" Description="UWPApp" BackgroundColor="transparent">
      <uap:DefaultTile Wide310x150Logo="Assets\Wide310x150Logo.png">
      </uap:DefaultTile>
      <uap:SplashScreen Image="Assets\SplashScreen.png" />
    </uap:VisualElements>
    <Extensions>
      <uap:Extension Category="windows.fileTypeAssociation">
        <uap:FileTypeAssociation Name="myvideotest">
          <uap:DisplayName>MyVideoTest</uap:DisplayName>
          <uap:SupportedFileTypes>
            <uap:FileType>.mp4</uap:FileType>
          </uap:SupportedFileTypes>
        </uap:FileTypeAssociation>
      </uap:Extension>
    </Extensions>
  </Application>
</Applications>
<Capabilities>
  <Capability Name="internetClient" />
  <Capability Name="privateNetworkClientServer" />
  <Capability Name="internetClientServer" />
  <uap:Capability Name="enterpriseAuthentication" />
</Capabilities>

然后在代码隐藏中,首先检索共享文件夹。

StorageFolder folder = await StorageFolder.GetFolderFromPathAsync(@"\\192.168.1.51\SharedFileVideo");

在此之后,我们可以检索视频文件并将其设置为MediaElement的来源,如:

StorageFile file = await folder.GetFileAsync("video.mp4");
var stream = await file.OpenAsync(Windows.Storage.FileAccessMode.Read);
MediaElement.SetSource(stream, file.ContentType);

【讨论】:

您好,非常感谢一件事。我测试并知道应该在共享文件夹之后插入 \ 才能正常工作。【参考方案2】:

您是否尝试将源设置为:

\\192.168.1.51\SharedFileVideo\video.mp4

反斜杠 (\) 而不是正斜杠 (/) 并确保以双反斜杠开头

我用我的树莓派做这个,结果很好

\\RASPBERRYPI\Films\OS1\Films\video.mp4

不要忘记在 xaml 中执行此操作,您将需要这个:

<MediaElement Source="\\192.168.1.51\SharedFileVideo\video.mp4"/>

或用于绑定:

<MediaElement Source="Binding Path=URI"/>

在代码中:

URI = @"\\192.168.1.51\SharedFileVideo\video.mp4";

正如我所说,这对我来说很好,我不需要同步编程,而且我的机器和路由器看起来足够好,不会导致延迟或缓冲问题

如果将源绑定到字符串,则需要记住的另一件事是有时需要告诉媒体元素播放。如果是这样,请不要忘记告诉它您使用加载的行为标签手动加载视频。

所以 xaml:

<MediaElement Name="VideoPlayer" Source="Binding Path=URI" LoadedBehaviour="Manual"/>

并在代码中添加:

URI = @"\\192.168.1.51\SharedFileVideo\video.mp4";
VideoPlayer.Play();

【讨论】:

如果您使用的是 MVVM,请告诉我,我将向您展示如何在不将媒体元素发送到您的视图模型的情况下实现这一目标,如果不是,请忽略此评论 我尝试了您的解决方案,但没有成功。我正在我的桌面上进行测试,共享文件位于同一网络中的另一个桌面上。你在台式机上测试过吗?你知道为什么这在桌面上不起作用吗? @Jay 的回答有效。但这似乎太复杂了。 我在家里用 Windows 8 笔记本电脑和树莓派试过这个,在 2 个 Windows 7 电脑之间工作。一切正常。只有我不使用 ip 我使用机器名称,例如 \\RaspberryPI\Films\MeBeforeYou.av 或 \\FEDEMOWS2\Downloads\Sample.mp4 您是否在 Windows 资源管理器的网络部分看到有问题的机器?这可能是您遇到的问题?

以上是关于如何在网络中的共享文件夹中播放媒体元素中的视频的主要内容,如果未能解决你的问题,请参考以下文章

如何实现与视频的共享元素过渡

使用nginx 共享服务器中的视频

如何在 CarPlay 上播放视频?

Xamarin的播放音频和视频的媒体管理插件

如何用vlc播放器的网络串流

如何使用视频元素在 html5 中播放直播视频?