2012-11-13 5 views
4

MKV 및 FLV 파일에 비디오 스트림 (내 웹캠에서 전송)을 저장하려고합니다. 즉, 비디오 및 오디오 파이프 라인을 h264 인코딩 후 분할해야하고 mux가 다른 다중 화기로 각 경로에 분할되어야한다는 의미입니다.GStreamer Tee (Multiple Multiplexer)

           |->queue->matroskamux->filesink 
v4l2src->videorate->videoscale->x264enc->tee-| 
              |->queue->flvmux->filesink 

이 가정 정확 :

이 내가 그것을 작동되어야 상상하는 방법이다? 모든 대기열이 올바른 위치에 있습니까? 이 모양의 GStreamer 명령은 어떻게 생겼습니까? 나는 특히 "티즈"의 개념에 문제가있다. 명령에서 시작하는 방법과 위치 및 다른 Tee-Path를 조작하는 방법. 나는 GStreamer 문서에서 "Tee"를 찾았지만 여전히 문제를 적용하고있다.

미리 감사드립니다.

편집 : 좋아, 덕분에 mreithub 나는 비디오 작업했습니다. 이 명령은 지금과 같은 모습입니다 :

gst-launch-0.10 -v -m v4l2src ! videorate ! videoscale ! ffmpegcolorspace ! x264enc ! tee name=muxtee ! queue2 ! matroskamux name=mkvmux ! filesink location=file1.mkv muxtee. ! queue ! flvmux name=flvmux ! filesink location=file1.flv 

여기에 오디오를 실행 얻을 내 시도하지 :

gst-launch-0.10 -v -m v4l2src ! videorate ! videoscale ! ffmpegcolorspace ! x264enc ! tee name=muxtee ! queue2 ! matroskamux name=mkvmux pulsesrc ! ffenc_aac ! filesink location=file1.mkv muxtee. ! queue ! flvmux name=flvmux pulsesrc ! ffenc_aac ! filesink location=file1.flv 

이 작동하지 않습니다 (명령이 실행이되지만 즉시 중지 - 오류 메시지). 하지만 오디오 인코딩을 넣을 위치를 결정하는 데 문제가 있습니다. 필자가 시도한 솔루션에서 각 Tee-Pipeline (오른쪽)에 오디오를 인코딩합니다. 하지만 오디오를 한 번만 인코딩 한 다음 그에 따라 파이프 라인 경로를 적절하게 mux하려고합니다. 여기

다른 시도의 : 오디오 인코딩 후 나는 티를 사용하고 mkvmuxer 및 flvmuxer에 할당 pipleine을 분할 :

:
gst-launch-0.10 -v -m v4l2src ! videorate ! videoscale ! ffmpegcolorspace ! x264enc ! tee name=muxtee ! queue2 ! matroskamux name=mkvmux ! filesink location=file1.mkv muxtee. ! queue ! flvmux name=flvmux ! filesink location=file1.flv pulsesrc ! ffenc_aac ! tee name=t2 ! queue ! mkvmux. t2. ! queue ! flvmux. 

하지만이 하나 나는 다음과 같은 오류 메시지가 받고 있어요

could not link queue1 to flvmux 

감사! 당신이 당신의 파이프 라인에서 오디오 및 비디오를 원하는대로

답변

16

, (나는 약간의 그림이 도움이 될 생각) 조금 복잡 할 것입니다 : GraphViz diagram showing the resulting pipeline

가능한 한 명확 GST 발사 명령을 유지하기 위해, 나는 한 명령 줄에 각 선형 파이프 라인 조각을 넣어 (위의 그림에서 검은 색되는 첫 번째 줄에 빨간색 연결 한 다음 파란색, 녹색, 노란색 사람과 마지막으로 대기 물건) :

gst-launch-0.10 v4l2src ! videorate ! videoscale ! x264enc ! tee name=videoTee \ 
    pulsesrc ! ffenc_aac ! tee name=audioTee \ 
    flvmux name=flvMux ! filesink location=/tmp/foo.flv \ 
    matroskamux name=mkvMux ! filesink location=/tmp/foo.mkv \ 
    audioTee. ! queue ! flvMux. \ 
    audioTee. ! queue ! mkvMux. \ 
    videoTee. ! queue ! flvMux. \ 
    videoTee. ! queue ! mkvMux. 

마지막으로 한 메모 :대신 lame을 사용해 보았습니다.나는 그것을 설치하지 않았지만 둘 다 작동해야합니다.

편집 : 오디오 지원을 포함한 답변을 완전히 다시 작성하고 파이프 라인 사진 (멋진 GraphViz 도구를 사용하여 만든 그림)을 추가했습니다.

+0

감사합니다. mreithub! 당신의 도움으로 나는 비디오를 작동시킬 수 있었지만 오디오를 오디오에 통합하려고했습니다. 편집 한 게시물에 설명 된대로 문제가 발생했습니다. 그걸 효율적으로 통합하는 방법에 대해 알고 있습니까? –

+0

@ user1595257 방금 오디오 지원을 포함하여 완전한 답변을 다시 작성했습니다 (사진이 마음에 들었 으면 좋겠다)) – mreithub

+0

와우, 믿을 수 없다! 정말 고마워! –