我正处于向MP3播放器发送文件的情况下,此播放器需要知道文件长度才能正确显示进度条。问题是这个MP3来自一个文件,它是即时转换的结果,所以我不知道最终的文件大小。只是估计(比特率*持续时间)。因此,当为文件设置错误的内容长度时,无法提供文件,下载最后会出现网络错误。
有没有办法强制浏览器接受最终和原样的数据?对于玩家来说,这不是一个问题,因为它可能会在它到达尽头时停止。
[编辑]
现在,我会尝试添加“00”字节,直到达到合适的大小并看看它是如何播放的。
答案 0 :(得分:0)
由于我不需要任何ID3标签信息,因此针对此特定MP3问题的解决方案是:
使用ffprobe.exe等工具获取持续时间
在您发送内容长度标题中指定的字节数之前,请删除2秒以确保无法到达具有未知大小的真实MP3文件的末尾。
然后乘以比特率,这样你就得到了尺寸未知的MP3的估计大小,然后你删除了一些kbs。
Function getduration(ByVal url As String, ByVal curqual As Integer) As String
Dim path As String = "C:\cmd\"
Dim app As String = MapPath(".") & "\ffprobe.exe"
Dim myProcess As New System.Diagnostics.Process()
Dim AppPath As String = Request.PhysicalApplicationPath
myProcess.StartInfo.FileName = app
myProcess.StartInfo.Arguments = url
myProcess.StartInfo.UseShellExecute = False
myProcess.StartInfo.RedirectStandardOutput = True
myProcess.StartInfo.RedirectStandardError = True
myProcess.Start()
Dim mystreamreader As StreamReader = myProcess.StandardError
Dim str As String = mystreamreader.ReadToEnd
Dim loca As Integer = str.IndexOf("Duration:") + 10
Dim locb As Integer = str.IndexOf(",", loca)
Dim tm As String = str.Substring(loca, locb - loca)
Dim tim As Integer = TimeSpan.Parse(tm).TotalMilliseconds
Dim siz As Long = (((tim - 2000) * curqual) / 8)
Return siz
End Function