Что я должен установить caps appsrc, чтобы исправить "внутреннюю ошибку потока данных"? - PullRequest
0 голосов
/ 17 октября 2019

Я пытаюсь открыть видео mp4, декодировать его и отправить в appsink. затем получите его из appsrc и сохраните в файле mp4.

Я уверен, что я неправильно установил заглавные буквы.

const gchar *video_caps =
"video/x-raw,width=1280,height=720,framerate=25/1";

первая половина конвейера:

  string = g_strdup_printf ("filesrc location=\"%s\" ! decodebin name=dec ! queue ! videoconvert ! appsink caps=\"%s\" name=testsink",
  in_filename, video_caps);

вторая половина:

string = g_strdup_printf ("appsrc name=testsource caps=\"%s\" !x264enc ! mp4mux! filesink location=\"%s\"",
       video_caps,out_filename);

что я должен установить мои заглавные буквы, чтобы это работало?

ошибка, которую я получил: Received error in sink(appsrc module) Error: Internal data stream error.

1 Ответ

0 голосов
/ 18 октября 2019

Для правильного согласования ограничений необходимо указать типы данных в caps, так как appsink и appsrc.caps должны быть установлены на основе результатов предыдущих элементов. в вопросе decodebin выходные данные имеют формат YUV I420.

, если данные модулируются или изменяются до достижения appsrc, вы должны установить правильные ограничения для appsrc.

const gchar * appsink_video_caps = "video/x-raw,format=I420,width=1280,height=720,framerate=25/1";

const gchar * appsrc_video_caps = "video/x-raw,format=I420,width=1280,height=720,framerate=25/1";
...