Страница: 1 |
Страница: 1 |
Вопрос: PIPE
Добавлено: 10.05.15 20:44
Автор вопроса: AWP | Web-сайт:
Привет!
Пытаюсь отослать данные в программу(ffmpeg) - отвечает "Bad File descriptor" и данные не получает.
Optional ByVal sStartInFolder As String = vbNullString) As Long
Const BUFSIZE As Long = 1024 * 10
Dim hPipeRead As Long
Dim hPipeWrite As Long
Dim sa As SECURITY_ATTRIBUTES
Dim si As STARTUPINFO
Dim pi As PROCESS_INFORMATION
Dim baOutput(BUFSIZE) As Byte
Dim sOutput As String
Dim lBytesRead As Long
Dim n As Long
Dim k As Long
Dim houtPipeRead As Long
Dim houtPipeWrite As Long
Dim hPipe As Long
Dim lPeekData As Long
Dim pSD As Long, res As Long
Dim lngAvail As Long
CloseConsole = False
pSD = GlobalAlloc(GPTR, SECURITY_DESCRIPTOR_MIN_LENGTH)
res = InitializeSecurityDescriptor(pSD, SECURITY_DESCRIPTOR_REVISION)
res = SetSecurityDescriptorDacl(pSD, -1, 0, 0)
With sa
.nLength = Len(sa)
.bInheritHandle = True ' get inheritable pipe handles
.lpSecurityDescriptor = pSD ' FILE_ATTRIBUTE_NORMAL 'pSD
End With 'SA
If CreatePipe(hPipeRead, hPipeWrite, sa, 0) = 0 Then Exit Function
If CreatePipe(houtPipeRead, houtPipeWrite, sa, 0) = 0 Then Exit Function
With si
.cb = Len(si)
.dwFlags = STARTF_USESHOWWINDOW Or STARTF_USESTDHANDLES
.wShowWindow = SW_HIDE ' hide the window
.lpTitle = "ffmpeg.exe"
'.hStdInput = hPipeWrite
'.hStdOutput = hPipeRead
'.hStdInput = houtPipeRead
.hStdOutput = hPipeWrite
.hStdError = hPipeWrite
End With 'SI
If CreateProcess(vbNullString, sCommandLine, ByVal 0&, ByVal 0&, 1, 0&, ByVal 0&, sStartInFolder, si, pi) Then
'If CreateProcess(vbNullString, sCommandLine, ByVal 0&, ByVal 0&, 0&, 0&, ByVal 0&, sStartInFolder, si, pi) Then
Call CloseHandle(hPipeWrite)
'Call CloseHandle(hPipeRead)
Call CloseHandle(pi.hThread)
'hPipeWrite = 0
Do
'If CloseConsole = True Then
' Call TerminateProcess(pi.hProcess, CLng(0))
' Call CloseHandle(pi.hProcess)
' Call CloseHandle(hPipeRead)
' Call CloseHandle(hPipeWrite)
' Exit Function
'End If
DoEvents
If ReadFile(hPipeRead, baOutput(0), BUFSIZE, lBytesRead, ByVal 0&) = 0 Then
End If
sOutput = Left$(StrConv(baOutput(), vbUnicode), lBytesRead)
Form1.Text1.Text = Form1.Text1.Text & sOutput & vbCrLf
If InStr(1, sOutput, "Bad file descriptor") Then
MsgBox "Bad file descriptor"
GoTo 2
End If
For k = 0 To 320& * 240 * 3 - 1
videoRaw(k) = Int(Rnd * 256)
Next
'FlushFileBuffers hPipeWrite
Form1.Print WriteFile(hPipeWrite, videoRaw(0), 320& * 240 * 3, ByVal 0&, ByVal 0&)
'FlushFileBuffers hPipeWrite
n = n + 1
If n = 24 Then GoTo 2
Loop
Call CloseHandle(pi.hProcess)
End If
2
' To make sure...
Call CloseHandle(hPipeRead)
Call CloseHandle(hPipeWrite)
'Call CloseHandle(hPipe)
End Function
Пытаю сделать тоже, что и тут:
http://blog.mmacklin.com/2013/06/11/real-time-video-capture-with-ffmpeg/
Ответы
Всего ответов: 9
Номер ответа: 1
Автор ответа:
AWP
ICQ: 345685652
Вопросов: 96
Ответов: 1212
Web-сайт:
Профиль | | #1
Добавлено: 22.05.15 10:16
В общем запись-то я сделал. Но, при закрытие хэндлов всех "труб", ffmpeg не записывает заголовки и, походу, остается в ожидании новых кадров.
Сделал класс для записи. Временный костыль в виде второй прогонки через ffmpeg с прямым копированием данных.
https://yadi.sk/d/xwq4eZkJgoUgc
Если кто разберется в чем дело - приложил сам класс. Может что-то не так юзаю - не очень шарю в пайпах.
Номер ответа: 2
Автор ответа:
AWP
ICQ: 345685652
Вопросов: 96
Ответов: 1212
Web-сайт:
Профиль | | #2
Добавлено: 22.05.15 10:18
+хочу перекомпилить ffmpeg - убрать лишние форматы и кодеки, чтоб полегче весил.
Номер ответа: 3
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #3
Добавлено: 24.05.15 06:19
На правах флейма, просто интересно, какой логический процес стоит за принятием решения писать код на VB6 в 2015 году?
Номер ответа: 4
Автор ответа:
AWP
ICQ: 345685652
Вопросов: 96
Ответов: 1212
Web-сайт:
Профиль | | #4
Добавлено: 24.05.15 19:50
Удобное создание окошечек при отсутствии лишних фреймворков. Основной код для обработки написан не на Vb6. Мог бы и окошечки делать на fb, но нет ничего приятнее осознания того, что vb6 "еще может".
Номер ответа: 5
Автор ответа:
Smith
ICQ: adamis@list.ru
Вопросов: 153
Ответов: 3632
Профиль | | #5
Добавлено: 01.06.15 19:41
А какие предлагаются варианты?
Номер ответа: 6
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #6
Добавлено: 02.06.15 09:18
node-webkit
Номер ответа: 7
Автор ответа:
EROS
Вопросов: 58
Ответов: 4255
Профиль | | #7
Добавлено: 23.07.15 16:49
node-webkit как замена VB6 для десктопных приложений? однако...
Номер ответа: 8
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #8
Добавлено: 29.07.15 05:39
Работает под виндой, линуксом и макосью
Опенсорцный
Постоянно выкатываются обновления
На гитхабе лежит стопицот модулей, библиотек и фреймворков на все случаи жизни (включая полностью совместимые модули для nodejs и библиотеки на javascript/html/css)
Можно писать на любом из сотни языков, которые транслируются в Javascript, а если что-то не нравится, можно запилить свой.
ГРАФОН с аппаратным ускорением, включая поддержку 3D из коробки.
Номер ответа: 9
Автор ответа:
Smith
ICQ: adamis@list.ru
Вопросов: 153
Ответов: 3632
Профиль | | #9
Добавлено: 01.12.15 22:03
Если кто не врубился, это была рекламная пауза))
Артем спасибо, интересная штука, оч.жаль что опять фрэймворк.