首页 / C# / C#DirectX视频无法播放
C#DirectX视频无法播放
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了C#DirectX视频无法播放,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3129字,纯文字阅读大概需要5分钟。
内容图文
![C#DirectX视频无法播放](/upload/InfoBanner/zyjiaocheng/684/2fe217c75a84418e8feb93fe848093a6.jpg)
我想制作一个C#Windows Forms应用程序,该应用程序显示一支笔,当您单击它时它会变成一个菠萝,当您单击该菠萝时会变成一个苹果,然后变成笔,单击时会启动一个音乐视频.
对我来说不起作用的是视频,我不想因为不喜欢而明确地在Windows Media Player中显示该视频.这是代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Microsoft.DirectX.DirectSound;
using Microsoft.DirectX.AudioVideoPlayback;
using Microsoft.DirectX;
namespace Picture_Button
{
public partial class Form1 : Form
{
Video video = new Video("C:\\Users\\Pushkin\\Desktop\\PPAP.mp4");
private int clicks = 0;
public Form1()
{
InitializeComponent();
video.Owner = this;
pictureBox1.SizeMode = PictureBoxSizeMode.Zoom;
}
private void pictureBox1_Click(object sender, EventArgs e)
{
clicks++;
}
private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
{
switch (clicks)
{
case 0: pictureBox1.Image = Properties.Resources.Pineapple; break;
case 1: pictureBox1.Image = Properties.Resources.Apple; break;
case 2: pictureBox1.Image = Properties.Resources.Pen; break;
case 3: video.Play(); break;
case 4: video.Dispose(); break;
}
}
}
}
实际上什么也没发生,程序只是冻结,就好像进入了无限循环一样:
Video video = new Video("C:\\Users\\Pushkin\\Desktop\\PPAP.mp4");
什么都没有出现.任何想法是什么问题?
编辑:我正在尝试处理Ending事件,以便我可以在视频结束时退出应用程序,并设法以某种方式设法获得此异常:
System.NullReferenceException occurred
HResult=-2147467261
Message=Object reference not set to an instance of an object.
Source=Microsoft.DirectX.AudioVideoPlayback
StackTrace:
at VideoWndProc(HWND__* hWnd, UInt32 uMsg, UInt32 wParam, Int32 lParam)
InnerException:
通过添加以下代码:
video.Ending += new System.EventHandler(this.Video_Ending);
//some code
private void Video_Ending(object sender, EventArgs e)
{
//throw new NotImplementedException();
video.Dispose();
Application.Exit();
}
解决方法:
这里有两个单独的问题:
对旧版.net的支持
第一个问题:“ DirectX for Managed Code”非常老,并且基于.net 1.1版.为了在.net 4或更高版本中使用此程序集,您需要启用加载这些旧格式.您可以通过在项目中更改文件“ app.config”并将启动节点上的useLegacyV2RuntimeActivationPolicy设置为true来执行此操作,因此它类似于以下内容:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup useLegacyV2RuntimeActivationPolicy="true" >
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.2" />
</startup>
</configuration>
请注意,在调试过程中,您会收到异常“ Managed Debugging Assistant’LoaderLock’已检测到问题”.您可以忽略此异常.告诉Visual Studio在调试过程中不应在此异常处停止.
编解码器支持
第二个问题是您需要安装允许DirectX播放mp4文件的编解码器.
这些编解码器默认情况下不包含在大多数Windows版本中(Windows 10中也不包含).即使您的Windows Media Player可以播放mp4文件,也并不意味着可以从DirectX使用正确的编解码器.
我发现安装LAV filters是使大多数视频格式可用于Windows上的DirectX的一种简单且非侵入性的方式.
调试模式下的视频播放
您会发现,通常当您从Visual Studio启动应用程序时,视频播放会断断续续并且质量低下.在不调试的情况下启动应用程序时,质量将非常完美.
内容总结
以上是互联网集市为您收集整理的C#DirectX视频无法播放全部内容,希望文章能够帮你解决C#DirectX视频无法播放所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。