在我的Silverlight Web应用程序中,我从客户端bin文件夹访问mp4音频文件。我使用保存文件对话框将此文件流保存到客户端计算机上的本地文件夹中。 我可以在媒体元素中播放mp4文件并且可以毫无问题地听到音频,但是当我将文件保存到本地文件夹并尝试打开它时,它不会播放。 如果我以相同的方式下载mp3文件,我可以在下载后播放mp3音频,没有任何问题 是否有任何不同的方式来读取和写入mp4文件流而不是mp3。 不,我找到了解决方案。 无论我从研究到现在理解的是,mp4都有moov和mdat盒子,其中mdat首先出现。但是在读取或写入MP4文件时,我们需要在mdat盒子前面移动moov盒子,并相应地重写文件偏移量。 但我需要一些例子来准确读取和写入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
答案 0 :(得分:0)
我找到了解决方案,只是为了读取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