avdec_h264와 avenc_mpeg4의 두 요소를 연결하는 데 문제가 있습니다. 어떻게 든 이들 요소는 데이터의 기능을 협상 할 수 없다고 생각합니다.GStreamer : Caps 협상 실패
나는 GST-출시와 함께 내 파이프 라인을 테스트 한 : 그것은 좋은 일했다
gst-launch-1.0 rtspsrc location="rtsp://camera" ! rtph264depay ! h264parse ! avdec_h264 ! avenc_mpeg4 ! fakesink
. 성공적으로
pipeline_ = gst_pipeline_new("default");
if (!pipeline_)
{
return false;
}
receiver_ = gst_element_factory_make("rtspsrc", "receiver");
demuxer_ = gst_element_factory_make("rtph264depay", "demuxer");
parser_ = gst_element_factory_make("h264parse", "parser");
decoder_ = gst_element_factory_make("avdec_h264", "decoder");
encoder_ = gst_element_factory_make("avenc_mpeg4, "encoder");
output_ = gst_element_factory_make("fakesink", "output");
if (!receiver_ || !demuxer_ || !parser_ ||
!decoder_ || !encoder_ || !output_)
{
return false;
}
g_object_set(GST_OBJECT(receiver_), "location", "rtsp://camera", nullptr);
// On this signal source pad of the receiver is being connected to
// the sink pad of the demuxer.
g_signal_connect(receiver_, "pad-added", G_CALLBACK(on_pad_added), this);
gst_bin_add_many(GST_BIN(pipeline_), receiver_, demuxer_, parser_,
decoder_, encoder_, output, nullptr);
if (!gst_element_link_many(demuxer_, parser_, decoder_,
encoder_, output_, nullptr))
{
return false;
}
모든 링크 : I 파이프 라인이 구현 내 응용 프로그램을 사용
. 모든 요소는 상태를 PLAYING으로 변경하지만 아무 것도 얻을 수 없습니다. 파이프 라인의 버스에서 GST_MESSAGE_STREAM_START을 (를) 얻지 못합니다.
내가 잘 작동 의지, videoconvert의 인코더 아닌 요소, 모든 것에 avenc_mpeg4 변경하는 경우. 다른 인코더를 설치하면 여전히 문제가 발생합니다.
아마도 엔코더 작업 방법에 대한 특정 사항을 알지 못합니다. 하지만 해결책을 찾지 못했습니다.
감사합니다.
나는 요지를 만듭니다. https://gist.github.com/simonenkos/9e31fc66b38a09afea362f1180c8296d videoconvert 요소를 추가하려고했지만 아무 것도 변경되지 않았습니다. 또한 디코드 빈에 대해서도 이해하지 못합니다. 나는 그런 요소가 내 파이프 라인에 없다. 필자는 때로는 소스 패드가있는 rtspsrc 용 '패드가 추가 된'신호 처리기 만 있습니다. –
나는 demuxer를 읽음으로써 속임수를 썼지 만 그것은 단지 depayloader이므로 실제로 작동 할 것이다 (1 부)). – ensonic
죄송합니다, demux 그냥 depayloader입니다. 이 작업을하므로 점 1 무시하십시오. 협상을 위해 아마도 디버그 로그를 확인해야합니다. / – ensonic