【问题标题】:How to read or write MP4 file from file stream in silverlight and vb.net application?如何在 silverlight 和 vb.net 应用程序中从文件流中读取或写入 MP4 文件?
【发布时间】:2015-05-12 18:41:44
【问题描述】:

在我的 Silverlight Web 应用程序中,我正在从客户端 bin 文件夹访问 mp4 音频文件。我正在使用保存文件对话框将此文件流保存到客户端计算机上的本地文件夹。 我可以在媒体元素中播放 mp4 文件并且可以毫无问题地听到音频,但是当我将文件保存到本地文件夹并尝试打开它时,它无法播放。 如果我用同样的方法下载 mp3 文件,下载后我可以毫无问题地播放 mp3 音频。
是否有任何不同的方式来读取和写入 mp4 文件的流而不是 mp3。 没有我在哪里找到解决方案的地方。 到目前为止,我从研究中了解到的是,mp4 具有 moov 和 mdat 框,其中 mdat 是第一位的。但是在读取或写入 MP4 文件时,我们需要将 moov 框移动到 mdat 框之前,并相应地重写文件偏移量。 但我需要一些示例,如何准确地读取和写入 mp4 文件。

这是我的代码

saveFileDialog1.Filter = "MP3 Files (*.mp3)|*.mp3|MP4 Files|*.mp4"
        saveFileDialog1.ShowDialog()
        Dim str As Stream = Nothing
        Using audiofs As System.IO.FileStream = saveFileDialog1.OpenFile()
            Dim bytes As Byte() = New Byte(1638) {}
            Dim bytesToRead As Integer = 0
            bytesToRead = streamAudio_download.Read(bytes, 0, bytes.Length)
            While (bytesToRead = streamAudio_download.Read(bytes, 0, bytes.Length)) <> 0
                audiofs.Write(bytes, 0, bytesToRead)
            End While
        End Using

【问题讨论】:

    标签: vb.net silverlight streaming video-streaming mp4


    【解决方案1】:

    我找到了解决方案,只是为了读取 mp4 文件,我们需要二进制阅读器 我就是这样做的-

     saveFileDialog1.Filter = "MP3 Files (*.mp3)|*.mp3|MP4 Files|*.mp4"
            saveFileDialog1.ShowDialog()
            Dim words As String() = soundFileSelected_Name.Split(".")
            Dim fileExtension As String = words(1)
            Using audiofs As System.IO.FileStream = saveFileDialog1.OpenFile()
                If fileExtension = "mp3" Then
                    Dim bytes As Byte() = New Byte(40) {}
                    Dim bytesToRead As Integer = 0
                    bytesToRead = streamAudio_download.Read(bytes, 0, bytes.Length)
    
                    While (bytesToRead = streamAudio_download.Read(bytes, 0, bytes.Length)) <> 0
                        audiofs.Write(bytes, 0, bytesToRead)
                    End While
                ElseIf fileExtension = "mp4" Then
                    Dim b As New BinaryWriter(audiofs)
                    b.Write(byteArray)
                    audiofs.Close()
                End If
            End Using
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-01
      • 1970-01-01
      • 2017-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多