如何在 silverlight 和 vb.net 应用程序中从文件流读取或写入 MP4 文件?

How to read or write MP4 file from file stream in silverlight and vb.net application?

在我的 Silverlight Web 应用程序中,我正在从客户端 bin 访问 mp4 音频文件 folder.I 我正在使用保存文件对话框将此文件流保存到客户端机器上的本地文件夹。 我可以在媒体元素中播放 mp4 文件并且可以毫无问题地听到音频,但是当我将文件保存到本地文件夹并尝试打开它时,它不播放。 如果我用同样的方式下载 mp3 文件,我可以在下载后毫无问题地播放 mp3 音频。
有什么不同的方式来读取和写入 mp4 文件流而不是 mp3。 没有我在哪里找到解决方案。 到目前为止,我从研究中了解到的是,mp4 有 moov 和 mdat 框,其中 mdat 出现 first.but 在读取或写入 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

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

 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