Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: PIPE Добавлено: 10.05.15 20:44  

Автор вопроса:  AWP | Web-сайт: xawp.narod.ru | ICQ: 345685652 
Привет!
Пытаюсь отослать данные в программу(ffmpeg) - отвечает "Bad File descriptor" и данные не получает.

Public Function ExecAndCapture(ByVal sCommandLine As String, _
                          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-сайт: xawp.narod.ru
 Профиль | | #1
Добавлено: 22.05.15 10:16
В общем запись-то я сделал. Но, при закрытие хэндлов всех "труб", ffmpeg не записывает заголовки и, походу, остается в ожидании новых кадров.
Сделал класс для записи. Временный костыль в виде второй прогонки через ffmpeg с прямым копированием данных.
https://yadi.sk/d/xwq4eZkJgoUgc
Если кто разберется в чем дело - приложил сам класс. Может что-то не так юзаю - не очень шарю в пайпах.

Ответить

Номер ответа: 2
Автор ответа:
 AWP



ICQ: 345685652 

Вопросов: 96
Ответов: 1212
 Web-сайт: xawp.narod.ru
 Профиль | | #2
Добавлено: 22.05.15 10:18
+хочу перекомпилить ffmpeg - убрать лишние форматы и кодеки, чтоб полегче весил.

Ответить

Номер ответа: 3
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6596
 Профиль | | #3 Добавлено: 24.05.15 06:19
На правах флейма, просто интересно, какой логический процес стоит за принятием решения писать код на VB6 в 2015 году?

Ответить

Номер ответа: 4
Автор ответа:
 AWP



ICQ: 345685652 

Вопросов: 96
Ответов: 1212
 Web-сайт: xawp.narod.ru
 Профиль | | #4
Добавлено: 24.05.15 19:50
Удобное создание окошечек при отсутствии лишних фреймворков. Основной код для обработки написан не на Vb6. Мог бы и окошечки делать на fb, но нет ничего приятнее осознания того, что vb6 "еще может".

Ответить

Номер ответа: 5
Автор ответа:
 Smith



ICQ: adamis@front.ru 

Вопросов: 150
Ответов: 3610
 Профиль | | #5 Добавлено: 01.06.15 19:41
А какие предлагаются варианты?

Ответить

Номер ответа: 6
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6596
 Профиль | | #6 Добавлено: 02.06.15 09:18
node-webkit

Ответить

Номер ответа: 7
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4242
 Web-сайт: all-oracle.ru
 Профиль | | #7
Добавлено: 23.07.15 16:49
node-webkit как замена VB6 для десктопных приложений? однако...

Ответить

Номер ответа: 8
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6596
 Профиль | | #8 Добавлено: 29.07.15 05:39
Работает под виндой, линуксом и макосью
Опенсорцный
Постоянно выкатываются обновления
На гитхабе лежит стопицот модулей, библиотек и фреймворков на все случаи жизни (включая полностью совместимые модули для nodejs и библиотеки на javascript/html/css)
Можно писать на любом из сотни языков, которые транслируются в Javascript, а если что-то не нравится, можно запилить свой.
ГРАФОН с аппаратным ускорением, включая поддержку 3D из коробки.

Ответить

Номер ответа: 9
Автор ответа:
 Smith



ICQ: adamis@front.ru 

Вопросов: 150
Ответов: 3610
 Профиль | | #9 Добавлено: 01.12.15 22:03
Если кто не врубился, это была рекламная пауза))

Артем спасибо, интересная штука, оч.жаль что опять фрэймворк.

Ответить

Страница: 1 |

Поиск по форуму





© Copyright 2002-2011 VBNet.RU | Пишите нам