Я пытаюсь интегрировать FFMPEG в мой сайт asp.net. Процесс, который я пытаюсь завершить, состоит в том, чтобы загрузить видео, проверить, является ли оно .avi, .mov или .wmv, а затем преобразовать это видео в mp4 с использованием x264, чтобы мой флэш-плеер мог его воспроизвести.
Я использую файл обработчика http (ashx) для обработки загрузки. Здесь я также размещаю свой код конверсии. Я не уверен, что это лучшее место для этого, но я хотел посмотреть, смогу ли я хотя бы заставить его работать.
Кроме того, я смог завершить преобразование вручную через строку cmd. Ошибка -2 появляется, когда я выводю стандартную ошибку из процесса, который я выполнил.
Это ошибка, которую я получаю:
FFmpeg версия SVN-r23001, Copyright (c) 2000-2010, разработчики FFmpeg
построен 1 мая 2010 г. 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" %>
Система импорта
Импортирует System.Web
Импортирует System.IO
Система импорта. Диагностика
Система импорта. Порядок чтения
Загрузка открытого класса: Реализует 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
Конечный класс