从嵌入式资源播放视频文件时出错

时间:2016-01-08 15:06:49

标签: vb.net winforms

我正在开发用于播放视频文件的vb.net Windows应用程序。

我以这种方式在嵌入式资源中添加了一个视频文件:

  

项目 - >属性。然后选择“资源”选项卡。下一步选择“添加”   从现有文件中重新“ - >”。

我正在尝试播放该文件,但它在行上提供运行时错误

 Dim myByte As Byte = myStream.ReadByte

错误:对象引用未设置为对象的实例。

这是代码......

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

   Dim aPath As String = Path.GetDirectoryName(Assembly.GetExecutingAssembly.GetModules()(0).FullyQualifiedName)
    Dim myStream As Stream
    myStream = Assembly.GetExecutingAssembly.GetManifestResourceStream("111.mp4")
    Dim myFileStream As New FileStream("111.mp4", FileMode.Create)
    Dim myFileBinary As New BinaryWriter(myFileStream)
    Try
        Dim myByte As Byte = myStream.ReadByte
        While Not myByte = -1
            myFileBinary.Write(myByte)
            myByte = myStream.ReadByte
        End While
    Catch ex As Exception
    Finally
        myFileStream.Close()
    End Try

    AxWindowsMediaPlayer1.URL = Path.Combine(aPath, "111.mp4")
    AxWindowsMediaPlayer1.settings.autoStart = True


End Sub
我错过了任何一步吗?

1 个答案:

答案 0 :(得分:1)

实际上您正在使用My.Resources。所以你不需要从汇编中读取资源。

您可以通过以下方式阅读和使用它:

Dim FilePath = Path.Combine(Application.StartupPath, "video.wmv")
If (Not File.Exists(FilePath)) Then
    File.WriteAllBytes(FilePath, My.Resources.video)
End If

AxWindowsMediaPlayer1.URL = FilePath
AxWindowsMediaPlayer1.Ctlcontrols.play()

if部分是为了检查文件是否存在并在之前提取,因此我们不需要再次提取它。