gstreamer 파이프 라인을 파이썬 코드로 변환

디페시

gi 라이브러리를 사용하여 gstreamer 파이프 라인을 Python 코드로 변환하려고합니다.

다음은 터미널에서 성공적으로 실행중인 파이프 라인입니다.

gst-launch-1.0 rtspsrc location="rtsp://admin:[email protected]:554/H264?ch=1&subtype=0&proto=Onvif" latency=300 ! rtph264depay ! h264parse ! nvv4l2decoder drop-frame-interval=1 ! nvvideoconvert ! video/x-raw,width=1920,height=1080,formate=I420 ! queue !  nveglglessink window-x=0 window-y=0 window-width=1080 window-height=720

그러나 파이썬 코드를 사용하여 동일한 파이프 라인을 실행하는 동안 rtsp 스트림을 표시하는 출력 창이없고 터미널에 오류도 없습니다. 터미널은 ctrl + c를 누를 때까지 멈췄습니다.

다음은 gstreamer 명령을 실행하는 데 사용하는 코드입니다.

import gi

gi.require_version("Gst", "1.0")

from gi.repository import Gst, GObject


def main(device):
    GObject.threads_init()
    Gst.init(None)

    pipeline = Gst.Pipeline()

    source = Gst.ElementFactory.make("rtspsrc", "video-source")
    source.set_property("location", device)
    source.set_property("latency", 300)
    pipeline.add(source)

    depay = Gst.ElementFactory.make("rtph264depay", "depay")
    pipeline.add(depay)
    source.link(depay)

    parse = Gst.ElementFactory.make("h264parse", "parse")
    pipeline.add(parse)
    depay.link(parse)

    decoder = Gst.ElementFactory.make("nvv4l2decoder", "decoder")
    decoder.set_property("drop-frame-interval", 2)
    pipeline.add(decoder)
    parse.link(decoder)

    convert = Gst.ElementFactory.make("nvvideoconvert", "convert")
    pipeline.add(convert)
    decoder.link(convert)

    caps = Gst.Caps.from_string("video/x-raw,width=1920,height=1080,formate=I420")
    filter = Gst.ElementFactory.make("capsfilter", "filter")
    filter.set_property("caps", caps)
    pipeline.add(filter)
    convert.link(filter)

    queue = Gst.ElementFactory.make("queue", "queue")
    pipeline.add(queue)
    filter.link(queue)

    sink = Gst.ElementFactory.make("nveglglessink", "video-sink")
    sink.set_property("window-x", 0)
    sink.set_property("window-y", 0)
    sink.set_property("window-width", 1280)
    sink.set_property("window-height", 720)

    pipeline.add(sink)

    queue.link(sink)

    loop = GObject.MainLoop()

    pipeline.set_state(Gst.State.PLAYING)

    try:
        loop.run()
    except:
        pass

    pipeline.set_state(Gst.State.NULL)

if __name__ == "__main__":
    main("rtsp://admin:[email protected]:554/H264?ch=1&subtype=0&proto=Onvif")

실수가 무엇인지 아는 사람이 있습니까? 감사합니다!

Nielsdg

작동하지 않는 이유는 rtspsrc의 소스 패드가 소위 "가끔 패드" 이기 때문 입니다. 여기에있는 링크는이를 아주 잘 설명하지만 기본적으로 rtspsrcRTSP 서버에서 제공하는 SDP에 따라 달라지기 때문에 에서 사용할 수있는 패드 수를 미리 알 수 없습니다 .

따라서의 "pad-added"신호를 들어야 합니다 rtspsrc. 여기서 나머지 파이프 라인을 콜백에 방금 나타난 소스 패드에 연결할 수 있습니다.

요약하면 다음과 같습니다.

def main(device):
    GObject.threads_init()
    Gst.init(None)

    pipeline = Gst.Pipeline()
    source = Gst.ElementFactory.make("rtspsrc", "video-source")
    source.set_property("location", device)
    source.set_property("latency", 300)
    source.connect("pad-added", on_rtspsrc_pad_added)
    pipeline.add(source)

    # We will add/link the rest of the pipeline later
    loop = GObject.MainLoop()

    pipeline.set_state(Gst.State.PLAYING)

    try:
        loop.run()
    except:
        pass

    pipeline.set_state(Gst.State.NULL)

def on_rtspsrc_pad_added(rtspsrc, pad, *user_data):
    # Create the rest of your pipeline here and link it 
    depay = Gst.ElementFactory.make("rtph264depay", "depay")
    pipeline.add(depay)
    rtspsrc.link(depay)

    # and so on ....

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

gstreamer 파이프 라인에서 udpsrc를 동적으로 변경

분류에서Dev

MPEG-4 비디오를 MPEG-TS 형식으로 변환하는 Gstreamer 파이프 라인

분류에서Dev

파이썬 코드 변환

분류에서Dev

명령 줄을 파이썬 코드로 변환하는 방법

분류에서Dev

수학-파이썬 통계 방정식을 코드로 변환

분류에서Dev

파이썬에서 str을 유니 코드로 변환

분류에서Dev

sed 정규식을 파이썬 코드로 변환

분류에서Dev

파이썬은 인간을 타임 스탬프로 변환

분류에서Dev

파이썬 목록을 데이터 프레임으로 변환

분류에서Dev

변환 명령을 파이썬 코드로 변경하는 방법

분류에서Dev

dplyr 파이프 라인을 SQL 문자열로 변환

분류에서Dev

Powershell 저장소 파이프 라인 반환 값을 변수로

분류에서Dev

다음 스칼라 코드를 파이썬으로 변환하는 방법

분류에서Dev

내 gstreamer 파이프 라인에서 밸브로 녹음

분류에서Dev

Gstreamer 파이프 라인 다중 싱크를 하나의 src로

분류에서Dev

파이썬에서 json 파일을 데이터 프레임으로 변환

분류에서Dev

다음 Signnature 확인 파이썬 코드를 Android로 변환해야합니까?

분류에서Dev

파이썬은 목록 항목을 한 줄의 유니 코드로 변환

분류에서Dev

파이썬에서 문자열을 코드로 어떻게 변환합니까?

분류에서Dev

유니 코드의 파이썬 배열을 부동 변환으로

분류에서Dev

Opencv videoCapture ()의 Gstreamer 파이프 라인

분류에서Dev

MATLAB 코드를 파이썬 코드로 변환

분류에서Dev

파이썬 라인을 C # 코드로 포팅

분류에서Dev

이분 그래프를 인접 행렬 파이썬으로 변환

분류에서Dev

파이썬은 조건부 배열을 데이터 프레임으로 변환

분류에서Dev

파이썬에서 목록 이해력을 일반 for 루프로 변환

분류에서Dev

파이썬 데이터 프레임을 JSON으로 변환하는 방법

분류에서Dev

데이터 프레임을 사전 파이썬으로 변환하는 방법

분류에서Dev

pandas 데이터 프레임을 파이썬의 열로 변환하는 방법

Related 관련 기사

  1. 1

    gstreamer 파이프 라인에서 udpsrc를 동적으로 변경

  2. 2

    MPEG-4 비디오를 MPEG-TS 형식으로 변환하는 Gstreamer 파이프 라인

  3. 3

    파이썬 코드 변환

  4. 4

    명령 줄을 파이썬 코드로 변환하는 방법

  5. 5

    수학-파이썬 통계 방정식을 코드로 변환

  6. 6

    파이썬에서 str을 유니 코드로 변환

  7. 7

    sed 정규식을 파이썬 코드로 변환

  8. 8

    파이썬은 인간을 타임 스탬프로 변환

  9. 9

    파이썬 목록을 데이터 프레임으로 변환

  10. 10

    변환 명령을 파이썬 코드로 변경하는 방법

  11. 11

    dplyr 파이프 라인을 SQL 문자열로 변환

  12. 12

    Powershell 저장소 파이프 라인 반환 값을 변수로

  13. 13

    다음 스칼라 코드를 파이썬으로 변환하는 방법

  14. 14

    내 gstreamer 파이프 라인에서 밸브로 녹음

  15. 15

    Gstreamer 파이프 라인 다중 싱크를 하나의 src로

  16. 16

    파이썬에서 json 파일을 데이터 프레임으로 변환

  17. 17

    다음 Signnature 확인 파이썬 코드를 Android로 변환해야합니까?

  18. 18

    파이썬은 목록 항목을 한 줄의 유니 코드로 변환

  19. 19

    파이썬에서 문자열을 코드로 어떻게 변환합니까?

  20. 20

    유니 코드의 파이썬 배열을 부동 변환으로

  21. 21

    Opencv videoCapture ()의 Gstreamer 파이프 라인

  22. 22

    MATLAB 코드를 파이썬 코드로 변환

  23. 23

    파이썬 라인을 C # 코드로 포팅

  24. 24

    이분 그래프를 인접 행렬 파이썬으로 변환

  25. 25

    파이썬은 조건부 배열을 데이터 프레임으로 변환

  26. 26

    파이썬에서 목록 이해력을 일반 for 루프로 변환

  27. 27

    파이썬 데이터 프레임을 JSON으로 변환하는 방법

  28. 28

    데이터 프레임을 사전 파이썬으로 변환하는 방법

  29. 29

    pandas 데이터 프레임을 파이썬의 열로 변환하는 방법

뜨겁다태그

보관