视频和音乐用作资产时未出现在 WPF 中
Video and music not appearing in WPF when used as an asset
我现在正在进入WPF,我有一个问题,虽然看起来很简单,但我还在学习
我正在创建一个打开时会显示视频和歌曲的应用程序。
如果我像这样定义完整路径:
C:\myapp\media.mp4
在Source中使用这个路径可以正常工作
当我将视频和音乐添加为资源时出现问题,它停止工作
我正在使用以下代码:
<Grid>
<StackPanel Height="768" VerticalAlignment="Bottom" Width="1024" HorizontalAlignment="Left">
<MediaElement x:Name="Mymedia" VerticalAlignment="Top" Width="1024" Height="768">
<MediaElement.Triggers>
<EventTrigger RoutedEvent="FrameworkElement.Loaded">
<BeginStoryboard>
<Storyboard>
<MediaTimeline Source="Assets/media.mp4" Storyboard.TargetName="Mymedia"/>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</MediaElement.Triggers>
<MediaElement.Triggers>
<EventTrigger RoutedEvent="FrameworkElement.Loaded">
<BeginStoryboard>
<Storyboard>
<MediaTimeline Source="Assets/isurge.mp3" Storyboard.TargetName="Mymedia"/>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</MediaElement.Triggers>
</MediaElement>
</StackPanel>
视频没有使用资源运行有人能告诉我为什么吗?
看来您的路径可能不正确。尝试使用如下内容:
<MediaTimeline Source="pack://application:,,,/Assets/media.mp4" Storyboard.TargetName="Mymedia"/>
在构建 .NET Core WPF 应用程序时这对我有用,其他版本的 .NET 可能会有所不同。
使用 MediaElement
播放“资源”audio/video 文件时出现问题。媒体元素似乎不支持像 Source="pack://application:,,,/Assets/media.mp4"
.
这样的打包 URI
Microsoft 论坛上描述了类似的问题:
Using Relative File Path in MediaTimeline
How to play a "resource" audio file using MediaElement?
但可以从资源中获取 audio/video 并以编程方式设置 MediaTimeline
源。
这个想法是从资源中提取 audio/media 内容并将其写入临时文件。然后为 MediaTimeline
源设置 URI 以引用临时文件。
示例:
Set a file Build Action to Embedded Resource
.
In the code:
var resourceName = "YourAssemblyName.Assets.isurge.mp3";
using (var fstream = Assembly.GetExecutingAssembly().GetManifestResourceStream(resourceName))
{
var ext = resourceName.Substring(resourceName.LastIndexOf("."));
var pathfile = System.IO.Path.GetTempPath() + Guid.NewGuid().ToString() + ext;
using (FileStream outputFileStream = new FileStream(pathfile, FileMode.Create))
{
fstream.CopyTo(outputFileStream);
}
mt.Source = new Uri(pathfile, UriKind.RelativeOrAbsolute);
}
Set the MediaTimeline
name:
<MediaTimeline x:Name="mt" Storyboard.TargetName="audio" RepeatBehavior="Forever"/>
注意:临时创建的文件在不再需要时应删除。
我现在正在进入WPF,我有一个问题,虽然看起来很简单,但我还在学习
我正在创建一个打开时会显示视频和歌曲的应用程序。
如果我像这样定义完整路径:
C:\myapp\media.mp4
在Source中使用这个路径可以正常工作
当我将视频和音乐添加为资源时出现问题,它停止工作
我正在使用以下代码:
<Grid>
<StackPanel Height="768" VerticalAlignment="Bottom" Width="1024" HorizontalAlignment="Left">
<MediaElement x:Name="Mymedia" VerticalAlignment="Top" Width="1024" Height="768">
<MediaElement.Triggers>
<EventTrigger RoutedEvent="FrameworkElement.Loaded">
<BeginStoryboard>
<Storyboard>
<MediaTimeline Source="Assets/media.mp4" Storyboard.TargetName="Mymedia"/>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</MediaElement.Triggers>
<MediaElement.Triggers>
<EventTrigger RoutedEvent="FrameworkElement.Loaded">
<BeginStoryboard>
<Storyboard>
<MediaTimeline Source="Assets/isurge.mp3" Storyboard.TargetName="Mymedia"/>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</MediaElement.Triggers>
</MediaElement>
</StackPanel>
视频没有使用资源运行有人能告诉我为什么吗?
看来您的路径可能不正确。尝试使用如下内容:
<MediaTimeline Source="pack://application:,,,/Assets/media.mp4" Storyboard.TargetName="Mymedia"/>
在构建 .NET Core WPF 应用程序时这对我有用,其他版本的 .NET 可能会有所不同。
使用 MediaElement
播放“资源”audio/video 文件时出现问题。媒体元素似乎不支持像 Source="pack://application:,,,/Assets/media.mp4"
.
Microsoft 论坛上描述了类似的问题:
Using Relative File Path in MediaTimeline
How to play a "resource" audio file using MediaElement?
但可以从资源中获取 audio/video 并以编程方式设置 MediaTimeline
源。
这个想法是从资源中提取 audio/media 内容并将其写入临时文件。然后为 MediaTimeline
源设置 URI 以引用临时文件。
示例:
Set a file Build Action to
Embedded Resource
.
In the code:
var resourceName = "YourAssemblyName.Assets.isurge.mp3";
using (var fstream = Assembly.GetExecutingAssembly().GetManifestResourceStream(resourceName))
{
var ext = resourceName.Substring(resourceName.LastIndexOf("."));
var pathfile = System.IO.Path.GetTempPath() + Guid.NewGuid().ToString() + ext;
using (FileStream outputFileStream = new FileStream(pathfile, FileMode.Create))
{
fstream.CopyTo(outputFileStream);
}
mt.Source = new Uri(pathfile, UriKind.RelativeOrAbsolute);
}
Set the
MediaTimeline
name:
<MediaTimeline x:Name="mt" Storyboard.TargetName="audio" RepeatBehavior="Forever"/>
注意:临时创建的文件在不再需要时应删除。