0

私はファイルを MP3 プレーヤーに送信している状況にあり、このプレーヤーはプログレス バーを適切に表示するためにファイルの長さを知る必要があります。問題は、この MP3 がオンザフライ変換の結果であるファイルからのものであるため、最終的なファイル サイズがわからないことです。推定値 (ビットレート * 再生時間)。そのため、ファイルに誤った Content-Length を設定すると、ファイルを提供できず、ネットワーク エラーでダウンロードが最後にハングします。

ブラウザにデータを最終的かつ現状のまま受け入れるように強制する方法はありますか? プレイヤーにとっては、これは問題ではありません。なぜなら、必要以上に早く終了するとおそらく停止するからです。

[編集]

とりあえず、適切なサイズになるまで「00」バイトを追加して、再生方法を確認します。

4

1 に答える 1

0

ID3 タグ情報は必要なかったので、この特定の MP3 問題の解決策は次のとおりでした。

  1. ffprobe.exe などのツールを使用して期間を取得します

  2. content-length ヘッダーで指定されたバイト数を送信する前に、不明なサイズの実際の MP3 ファイルの最後に到達しないように、2 秒を削除してください。

  3. 次に、ビットレートを掛けて、不明なサイズの 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
    
于 2012-11-01T18:18:14.837 に答える