4

FFMPEG を asp.net Web サイトに統合しようとしています。私が完了しようとしているプロセスは、ビデオをアップロードし、それが .avi、.mov、または .wmv であるかどうかを確認し、このビデオを x264 を使用して mp4 に変換して、フラッシュ プレーヤーで再生できるようにすることです。

アップロードを処理するために http ハンドラー (ashx) ファイルを使用しています。これは、変換コードを配置する場所でもあります。これが配置するのに最適な場所かどうかはわかりませんが、少なくとも機能するかどうかを確認したかったのです。

さらに、cmd ラインを介して手動で変換を完了することができました。実行したプロセスから標準エラーを出力すると、エラー-2が発生します。

これは私が受け取るエラーです:

FFmpeg バージョン SVN-r23001、Copyright (c) 2000-2010 the FFmpeg developers

2010 年 5 月 1 日 06:06:15 に gcc 4.4.2 でビルド

構成: --enable-memalign-hack --cross-prefix=i686-mingw32- --cc=ccache-i686-mingw32-gcc --arch=i686 --target-os=mingw32 --enable-runtime-cpudetect - -enable-avisynth --enable-gpl --enable-version3 --enable-bzlib --enable-libgsm --enable-libfaad --enable-pthreads --enable-libvorbis --enable-libtheora --enable-libspeex - -enable-libmp3lame --enable-libopenjpeg --enable-libxvid --enable-libschroedinger --enable-libx264 --enable-libopencore_amrwb --enable-libopencore_amrnb

libavutil 50.15. 0 / 50.15。0 libavcodec 52.66. 0 / 52.66。0 libavformat 52.61. 0 / 52.61。0 libavdevice 52. 2. 0 / 52. 2. 0 libswscale 0.10. 0 / 0.10。0

532010_Robotica_720.wmv: エラー番号-2が発生しました

以下のコードは次のとおりです。

<%@ WebHandler Language="VB" Class="upload" %>

Imports System Imports System.Web Imports System.IO Imports System.Diagnostics Imports System.Threading

Public Class upload : IHttpHandler を実装します

Public currentTime As System.DateTime

Public Sub ProcessRequest(ByVal context As HttpContext) Implements IHttpHandler.ProcessRequest

    currentTime = System.DateTime.Now

    If (Not context.Request.Files("Filedata") Is Nothing) Then
        Dim file As HttpPostedFile : file = context.Request.Files("Filedata")

        Dim targetDirectory As String : targetDirectory = HttpContext.Current.Server.MapPath(context.Request("folder"))
        Dim targetFilePath As String : targetFilePath = Path.Combine(targetDirectory, currentTime.Month & currentTime.Day & currentTime.Year & "_" & file.FileName)

        Dim fileNameArray As String()
        fileNameArray = Split(file.FileName, ".")

        If (System.IO.File.Exists(targetFilePath)) Then
            System.IO.File.Delete(targetFilePath)
        End If

        file.SaveAs(targetFilePath)

        Select Case fileNameArray(UBound(fileNameArray))
                Case "avi", "mov", "wmv" 
                    Dim fileargs As String = 
                    fileargs = "-y -i " & currentTime.Month & currentTime.Day & 
                    currentTime.Year & "_" & file.FileName & " -ab 96k -vcodec libx264 
                    -vpre normal -level 41 "
                    fileargs += "-crf 25 -bufsize 20000k -maxrate 25000k -g 250 -r 20 
                    -s 900x506 -coder 1 -flags +loop "
                    fileargs += "-cmp +chroma -partitions +parti4x4+partp8x8+partb8x8 
                    -subq 7 -me_range 16 -keyint_min 25 "
                    fileargs += "-sc_threshold 40 -i_qfactor 0.71 
                    -rc_eq 'blurCplx^(1-qComp)' -bf 16 -b_strategy 1 -bidir_refine 1 "
                    fileargs += "-refs 6 -deblockalpha 0 -deblockbeta 0 -f mp4 " &   
                    currentTime.Month & currentTime.Day & currentTime.Year & "_" & 
                    file.FileName & ".mp4"

                    Dim proc As New Diagnostics.Process()
                    proc.StartInfo.FileName "ffmpeg.exe"
                    proc.StartInfo.Arguments = fileargs
                    proc.StartInfo.UseShellExecute = False
                    proc.StartInfo.CreateNoWindow = True
                    proc.StartInfo.RedirectStandardOutput = True
                    proc.StartInfo.RedirectStandardError = True

                    AddHandler proc.OutputDataReceived, AddressOf SaveTextToFile

                    proc.Start()
                    SaveTextToFile2(proc.StandardError.ReadToEnd())
                    proc.WaitForExit()
                    proc.Close()
            End Select

            context.Response.Write("1")

    End If

End Sub

Public ReadOnly Property IsReusable() As Boolean Implements IHttpHandler.IsReusable
    Get
        Return False
    End Get
End Property

Private Shared Sub SaveTextToFile(ByVal sendingProcess As Object, ByVal strData As DataReceivedEventArgs)

    Dim FullPath As String = "text.txt"
    Dim Contents As String = ""

    Dim objReader As StreamWriter
    objReader = New StreamWriter(FullPath)

    If Not String.IsNullOrEmpty(strData.Data) Then
        objReader.Write(Environment.NewLine + strData.Data)
    End If

    objReader.Close()

End Sub

Private Sub SaveTextToFile2(ByVal strData As String)

    Dim FullPath As String = "texterror.txt"
    Dim Contents As String = ""

    Dim objReader As StreamWriter
    objReader = New StreamWriter(FullPath)

    objReader.Write(Environment.NewLine + strData)

    objReader.Close()

End Sub

クラス終了

4

1 に答える 1

0

問題は、ffmpeg アプリケーション自体のアクセス許可に関するものでした。アクセス許可を更新すると、エラーは消えました。

于 2010-05-06T03:17:05.143 に答える