2016-07-28 4 views
3

RTSP 스트림을 재생하는 데 사용할 사용자 지정 GStreamer 파이프 라인을 생성했습니다. 동시에이 파이프 라인을 사용하기 위해 새로운 GstPlayer을 만들고 싶습니다. 문제는 내가 GstPlayer의 파이프 라인을 설정할 수있는 방법이 없다는 것입니다 (유일한 관련 방법은 gst_player_get_pipeline()입니다 .GstPlayer에 대한 파이프 라인을 사용자 정의 할 방법이 없다는 것을 이해하지 못합니다. ? 당신이 사용자 지정 파이프 라인을 원하지 않는 이유 플레이어는 playbin을 사용하고 있습니다 ..GstPlayer 파이프 라인을 설정하는 방법은 무엇입니까?

GstElement *pipeline, *source, *filter, *sink; 

    // Create pipeline elements 
    pipeline = gst_pipeline_new ("vdi-pipeline"); 
    source = gst_element_factory_make ("rtspsrc", "vdi-source"); 
    filter = gst_element_factory_make ("decodebin", "vdi-filter"); 
    sink = gst_element_factory_make ("appsink", "vdi-sink"); 
    if (!source || !filter || !sink) 
    { 
    __android_log_print (ANDROID_LOG_ERROR, "Error", "A GstElement could not be created. Exiting."); 
    return; 
    } 

    // Add elements to pipeline 
    gst_bin_add_many (GST_BIN (pipeline), source, filter, sink, NULL); 

    // Link elements together 
    if (!gst_element_link_many (source, filter, sink, NULL)) { 
    __android_log_print (ANDROID_LOG_ERROR, "Warning", "Failed to link elements!"); 
    } 

답변

0

하지만 당신은 상자 밖으로 GstPlayer을 통해 RTSP 재생할 수 있습니다. 기본 기능은, 그래서

내 파이프 라인 뭔가 빠진해야합니다 모든 종류의 URL을 받아들이며 .. 재생되는 것에 따라 파이프 라인을 동적으로 생성합니다 ..

정말 플레이 빈을 사용할 수 없다면 플레이어 자체를 패치하는 것은 어떨까요? 나는 그것이 사용자 지정 파이프 라인 용이라고 생각하지 않는다. 그러나 당신은 그것을 해킹 할 수있다. here.

그러면 playbin 대신 rtspsrc에 newpads와 다른 콜백을 연결합니다. 그리고 다른 것들 - 당신이 이것을 원하지 않는다고 생각합니다.

다른 방법은합니다 - playbin 파이프 라인을 구성은 내부 rtspsrc 사용하는 경우 - 당신은 파이프 라인 개체에서이 요소를 얻을 몇 가지 매개 변수를 변경 ...하지만 매우 까다로운 재생시 매개 변수를 변경하는 등 자르 할 수 있습니다 ..

업데이트 :

흠 나는 어떻게 든 appsink를 간과한다고 생각합니다. 음, playink 속성 audio-sink 또는 appsink를 사용하기 위해 비디오 싱크를 설정할 수 있다고 생각합니다.

그래도 GstPlayer에서 playbin 요소를 가져 오거나 초기화 할 때 playbin 매개 변수를 설정해야합니다 (이 방법은 잘 모릅니다).이 경우 IRC (freenode, #gstreamer)에 대해 묻습니다. 올바른 방향.

더 좋은 방법은 decodebin을 사용하여 자신의 응용 프로그램을 만들거나 playbin을 전달하고 appsink 요소를 전달하는 것입니다. 왜 버퍼를 처리하지 않고 재생하는 경우 GstPlayer를 사용하고 싶습니까?

HTH

+0

질문에 사용자 지정 파이프 라인이 필요한 이유를 지정해야합니다. 다른 곳에서 처리하기 위해 라이브 스트림에서 프레임을 검색하려고합니다. 나는 파이프 라인에서 싱크대로'appsink' 요소를 사용할 필요가 있다고 믿는다. 비디오가'gst_app_sink_pull_sample (appsink)'를 호출하면서 현재 프레임을 얻고 싶다면 내가 원하는 방식으로 처리 할 수 ​​있다고 생각한다. (필자의 경우에는 비트 맵을 만들 수 있습니다. – MarkyDD

+0

@MarkyDD 확인 업데이트 – nayana

관련 문제