MS Visual Studio рдкрд░ GStreamer рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд▓рдЧрдЗрди рд▓рд┐рдЦрдирд╛

рдореБрдЭреЗ рд╣рдореЗрд╢рд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдХреЗ рд╡реАрдбрд┐рдпреЛ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рд░рд╣реА рд╣реИред Habr├й рдкрд░ рдореИрдВрдиреЗ рдорд▓реНрдЯреАрдореАрдбрд┐рдпрд╛ рдлреНрд░реЗрдорд╡рд░реНрдХ Greareamer рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд▓реЗрдЦреЛрдВ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдкрдврд╝реА:



рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд╕рд╛рде рдХреБрдЫ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред рд▓реЗрдХрд┐рди, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдорддреМрд░ рдкрд░ рд╣реЛрддрд╛ рд╣реИ, рд╡рд░реНрддрдорд╛рди рдХрд╛рд░реНрдпреЛрдВ рдиреЗ рдЦрд╛рд▓реА рд╕рдордп рд╕рдВрд╕рд╛рдзрди рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдорд╛рдкреНрдд рдХрд░ рджрд┐рдпрд╛ред



рдФрд░ рдПрдХ рдмрд╛рд░, рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ, рдореБрдЭреЗ рд╕реБрд╡рд┐рдзрд╛ рдкрд░ рдПрдХ рд╡реАрдбрд┐рдпреЛ рдирд┐рдЧрд░рд╛рдиреА рдкреНрд░рдгрд╛рд▓реА рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдФрд░ рдЗрд╕реЗ рд▓реЗрдЦрд╛ рдкреНрд░рдгрд╛рд▓реА рдореЗрдВ рдПрдХреАрдХреГрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереАред рдпрд╣ рдХрд╛рд░реНрдп рд╣рдорд╛рд░реА рдХрдВрдкрдиреА рдХреЗ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮреЛрдВ рджреНрд╡рд╛рд░рд╛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рд╣рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рдпрд╣ рдЖрдо рдЬрдирддрд╛ рдХреЗ рдзреНрдпрд╛рди рдХреЗ рдпреЛрдЧреНрдп рдирд╣реАрдВ рд╣реИред Microsoft .NET рдкрд░ рдЕрдХрд╛рдЙрдВрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдЪрд▓рддрд╛ рд╣реИ, рд╕рднреА рдХреИрдорд░реЗ H264 RTSP рд╕реНрдЯреНрд░реАрдо рдЬрд╛рд░реА рдХрд░рддреЗ рд╣реИрдВред рд╡реАрдбрд┐рдпреЛ рдкрд░ рдХрдмреНрдЬрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕реНрдЯреНрд░реАрдордХреЛрдбрд░реНрд╕ рд╕реЗ рд╡рд╛рдгрд┐рдЬреНрдпрд┐рдХ рдореАрдбрд┐рдпрд╛рд╕реБрдЗрдЯ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред



рдПрдХ рдмреЛрдирд╕ рдХреЗ рд░реВрдк рдореЗрдВ, рдореИрдВрдиреЗ рдЦреБрдж рдХреЛ рд╡реАрдбрд┐рдпреЛ рдХреЛ рдкрдХрдбрд╝рдиреЗ рдФрд░ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП GStreamer рдХреЗ рд╕рд╛рде рдкреНрд░рдпреЛрдЧреЛрдВ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдЖрдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреАред

рд╢реБрд░реБрдЖрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рд╡рд╛рд╣рдиреЛрдВ рдХреЛ рддреМрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рддрд░рд╛рдЬреВ рдХреЗ рдЙрджреНрджреЗрд╢реНрдп рд╕реЗ рдХреИрдорд░реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╕реЗ рд╕реНрдЯреНрд░реАрдо рдХреЛ рдкрдХрдбрд╝рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рдлреНрд░реЗрдо рдХреЛ рд▓рд╛рдЗрд╕реЗрдВрд╕ рдкреНрд▓реЗрдЯ рдорд╛рдиреНрдпрддрд╛ рдЙрдкрддрдВрддреНрд░ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдФрд░ рд╡реАрдбрд┐рдпреЛ рдХреЗ рд▓рд┐рдП рдорд╛рдиреНрдпрддрд╛ рдкрд░рд┐рдгрд╛рдо рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ред рдЙрдкрд░реЛрдХреНрдд рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдореИрдВ рдПрд▓рдкреАрдЖрд░ рдХреЛ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдирд╣реАрдВ рдХрд╣реВрдВрдЧрд╛, рдмрд╕ рдлреНрд░реЗрдо рдХреЛ рд░реЛрдХреЗрдВ рдФрд░ рдЙрд╕ рдкрд░ рдПрдХ рдЖрдпрдд рдЦреАрдВрдЪреЗрдВред



рддреЛ, рджрд┐рдпрд╛ рдЧрдпрд╛:



рдЖрдкрдХреЛ рдорд┐рд▓рдирд╛ рдЪрд╛рд╣рд┐рдП:



рд╕рдорд╛рдзрд╛рди рд╡рд┐рдзрд┐:



GStreamer рдбреЗрд╡рд▓рдкрд░ рдХреЛ рдЙрд╕рдХреА рд╢реНрд░реЗрдгреА рдкрджрд╛рдиреБрдХреНрд░рдо рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рд╣рдорд╛рд░реЗ рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП, рд╣рдо GstElement рд╡рд░реНрдЧ рд╕реЗ рдЕрдкрдирд╛ рдкреНрд▓рдЧрдЗрди рдЗрдирд╣реЗрд░рд┐рдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред GstElement рдПрдХ рддрддреНрд╡ рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдЖрдзрд╛рд░ рд╕рд╛рд░ рд╡рд░реНрдЧ рд╣реИ рдЬрд┐рд╕реЗ GStreamer рдереНрд░реЗрдб рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред



GStreamer рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ


GStreamer gstreamer-1.0-xxx-1.2.4.msi рдбрд╛рдЙрдирд▓реЛрдб рдФрд░ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░реЗрдВред рдЖрдк рдЗрд╕реЗ рдпрд╣рд╛рдБ рд▓реЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред

рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ gstreamer-1.0-devel-xxx.msi рд╡рд┐рддрд░рдг рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, gstreamer-1.0-devel-x86-1.2.4.msiред рд╕реНрдерд╛рдкрдирд╛ рдХреЗ рджреМрд░рд╛рди, рдЖрд╡рд╢реНрдпрдХ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ:







рдЖрдЧреЗ рджреЗрдЦрддреЗ рд╣реБрдП, рдореЗрд░рд╛ рдХрд╣рдирд╛ рд╣реИ рдХрд┐ рд╡рд┐рдВрдбреЛрдЬ рдбрд┐рд╡рд╛рдЗрд╕ рдбреНрд░рд╛рдЗрд╡рд░ рдХрд┐рдЯ 7.1.0 рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛ред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдпрд╣ C: \ WinDDK \ 7600.16385.1 рдкрд░ рд╕реЗрдЯ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдпрд╣реА рд╡рд╣ рдЬрдЧрд╣ рд╣реИ рдЬрд╣рд╛рдБ рд╡рд┐рдЬрд╝реБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рддреЗ рд╕рдордп рдЗрд╕рдХреЗ рд▓рд┐рдП рджрд┐рдЦреЗрдЧрд╛ред рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╕реЗ рдбреАрдбреАрдХреЗ рд╕реНрдерд╛рдкрд┐рдд рд╣реИ, рддреЛ рдЗрд╕реЗ рдмрд╛рдж рдореЗрдВ рд╕реАрдзреЗ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВ рддрдп рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред



GStreamer рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╡реЗрдмрд╕рд╛рдЗрдЯ, рдЕрдиреНрдп рдкреНрд░рд▓реЗрдЦрди рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдкреНрд▓рдЧрдЗрди рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рдЧрд╛рдЗрдб рд╣реИ ред рдЖрдк рд╕реНрд╡рдпрдВ рд╕рднреА рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдиреБрдЕрд▓ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЖрдк рд░рд┐рдкреЛрдЬрд┐рдЯрд░реА рд╕реЗ рдкреНрд▓рдЧ-рдЗрди рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЯреЗрдореНрдкрд▓реЗрдЯ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред



рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ C ++ рд╕реНрд░реЛрдд рдлрд╝рд╛рдЗрд▓реЗрдВ рдФрд░ рдкреНрд▓рдЧрдЗрди рдХреЛрдб рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдореИрдиреБрдЕрд▓ рдХрд╣рддрд╛ рд╣реИ, рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рд╕реЗ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЛ рддреИрдирд╛рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ gst-template / gst-plugin / src directory рдореЗрдВ рдЬрд╛рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ ../tools/make_element рдпреВрдЯрд┐рд▓рд┐рдЯреА рдХреЛ рдЪрд▓рд╛рдирд╛ рд╣реЛрдЧрд╛ред Make_element рдпреВрдЯрд┐рд▓рд┐рдЯреА рдХреЗ рджреЛ рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИрдВ: рдкреНрд▓рдЧрдЗрди рдХрд╛ рдирд╛рдо (рдбрдореА), рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рд╕реНрд░реЛрдд рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдирд╛рдо (рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ gstplugin)ред



рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╣рдореЗрдВ рджреЛ рдлрд╛рдЗрд▓реЗрдВ рдорд┐рд▓рддреА рд╣реИрдВ: gstdummy.c рдФрд░ gstdummy.hред рдЕрдВрджрд░ рдбрдореА рдкреНрд▓рдЧрдЗрди рдХрд╛ рдПрдХ рдХрдВрдХрд╛рд▓ рд╣реЛрдЧрд╛, рдЬреЛ рдЕрднреА рднреА рдмреЗрд╡рдХреВрдл рд╣реИ рдФрд░ рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкреНрд▓рдЧрдЗрди рд░реВрдкрд░реЗрдЦрд╛рдУрдВ рдХреЗ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред



рдПрдХ рдЫреЛрдЯреА рд╕реА рдЯрд┐рдкреНрдкрдгреА: рдЙрдкрд░реЛрдХреНрдд рд╕рднреА рд▓рд┐рдирдХреНрд╕, рдпреВрдирд┐рдХреНрд╕ рдорд╢реАрдиреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдЪ рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд┐рдВрдбреЛрдЬ рдХреЗ рд╢реЛрдХрд╛рдХреБрд▓ рдорд╛рд▓рд┐рдХреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛? Cmd.exe Make_element рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рдпрджрд┐ рдЖрдк рдореЗрдХ_рд▓реЗрдореЗрдВрдЯ рдХреЗ рдЕрдВрджрд░ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рд╡рд╣ рдХреБрдЫ рднреА рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ, рдФрд░ рд╕реНрдЯреНрд░реАрдо рдПрдбрд┐рдЯрд░ рдХреА рдорджрдж рд╕реЗ, sed рдЗрд╕реЗ рджрд┐рдП рдЧрдП рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд▓рдХреНрд╖реНрдп рд╕реНрд░реЛрдд рдмрдирд╛рддрд╛ рд╣реИред рдЖрдк рдЗрд╕реЗ рд╕реНрд╡рдпрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдмрд╕ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдореИрдВрдиреЗ рдПрдХ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдмрдирд╛рдИ, рдЬрд╣рд╛рдВ рдореИрдВ рдЕрдкрдиреЗ рдЯреЗрд╕реНрдЯ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рд╡рд┐рдХрд╛рд╕ рдХреЗ рдкрд╛рдареНрдпрдХреНрд░рдо рдореЗрдВ рд░рдЦреВрдВрдЧрд╛: github.com/nostrum-service/gst ред



рд╣рдордиреЗ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдПрдордПрд╕ рд╡рд┐рдЬрд╝реБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ 2010 рдореЗрдВ рд╕реАрдзреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдиреЗ рдХрд╛ рд╕рдордп рдЖ рдЧрдпрд╛ред рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, GStreamer рдбреЗрд╡рд▓рдкрд░реНрд╕ рдиреЗ рд╡рд┐рдЬрд╝реБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХрд╛ рдзреНрдпрд╛рди рд░рдЦрд╛ рдФрд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рд╡рд┐рддрд░рдг рдХрд┐рдЯ рдореЗрдВ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╕рднреА рдЪреАрдЬрд╝реЛрдВ рдХреЛ рд░рдЦрд╛ред рдЖрдкрдХреЛ рдХреЗрд╡рд▓ Visual Studio рдХреА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рдореЗрдВ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд░рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдЖрдкрдХреЛ рдЬреЛ рдХреБрдЫ рднреА рдЪрд╛рд╣рд┐рдП рд╡рд╣ gstreamer \ 1.0 \ x86 \ share \ vs \ 2010 рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рд╣реИред

рд╣рдо рдмрд╛рд╣рд░ рд▓реЗ:

xcopy c:\gstreamer\1.0\x86\share\vs\2010\gst-template\*.* "C:\Program Files\Microsoft Visual Studio 10.0\VC\VCWizards\gst-template\*.*" /s /e /c xcopy C:\gstreamer\1.0\x86\share\vs\2010\wizard\*.* "C:\Program Files\Microsoft Visual Studio 10.0\VC\vcprojects\"
      
      





рд╣рдо рд╡рд┐рдЬрд╝реБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ (рдпрд╛ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВ рддрд╛рдХрд┐ рдпрд╣ рдирдИ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рджреЗрдЦреЗрдВ), рдПрдХ рдирдпрд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдВ, рдФрд░ рд╕реНрдерд╛рдкрд┐рдд рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдореЗрдВ рд╕реЗ рд╡рд┐рдЬреБрдЕрд▓ C ++ \ gst-dk-рдЯреЗрдореНрдкрд▓реЗрдЯ рдЪреБрдиреЗрдВред







рдпрджрд┐ рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реЛ рдЧрдпрд╛, рддреЛ рдЖрд╡рд╢реНрдпрдХ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЗ рд╕рд╛рде рдПрдХ рдЦрд╛рд▓реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдмрдирд╛рдИ рдЬрд╛рдПрдЧреАред рдЪреВрдВрдХрд┐ рд╣рдо рдПрдХ рдкреНрд▓рдЧрдЗрди рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдкрд░ рдЬрд╛рдПрдВ рдФрд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╡рд┐рд╡рд░рдг рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкреНрд░рдХрд╛рд░ рдореЗрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди (.exe) рд╕реЗ рдбрд╛рдпрдирд╛рдорд┐рдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА (.dll) рдореЗрдВ рдмрджрд▓реЗрдВред







рдкреНрд░реЙрдкрд░реНрдЯреА рдореИрдиреЗрдЬрд░ рд╡рд┐рдВрдбреЛ рдореЗрдВ, рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЪрд┐рддреНрд░ рдХрд╛ рдЕрд╡рд▓реЛрдХрди рдХрд░рддреЗ рд╣реИрдВ (рдЖрдк рдкреНрд░реЙрдкрд░реНрдЯреА рдореИрдиреЗрдЬрд░ рдХреЛ рд╕рдХреНрд╖рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рджреЗрдЦреЗрдВ-> рдЕрдиреНрдп рд╡рд┐рдВрдбреЛрдЬ-> рдкреНрд░реЙрдкрд░реНрдЯреА рдореИрдиреЗрдЬрд░)







рдЖрдкрдХреЛ рдЙрди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдЬреЛ рдкрд╣рд▓реЗ рдмрдирд╛рдП рдЧрдП рдЦрд╛рд▓реА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ make_element рдпреВрдЯрд┐рд▓рд┐рдЯреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдирд╛рдП рдЧрдП рдереЗред







рд╣рдо рд╕рдВрдХрд▓рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдпрджрд┐ рд╕рдм рдХреБрдЫ рд╕рд╣реА рд╣реИ, рддреЛ рд╣рдореЗрдВ рдПрдХ рддреИрдпрд╛рд░-рдирд┐рд░реНрдорд┐рдд DLL рдорд┐рд▓рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ GStreamer рдкреНрд▓рдЧрдЗрди рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдХреЙрдкреА рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП (рдореЗрд░реЗ рдкрд╛рд╕ C: \ gstreamer \ 1.0 \ x86 \ lib \ gstreamer-1.0 \) рд╣реИред

рдмрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЬрд╛рдБрдЪ рдХрд░реЗрдВ: gst-inspect-1.0 рдбрдореАред рдпрд╣рд╛рдВ рд╣рдо рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ GStreamer рдиреЗ рд╣рдорд╛рд░реЗ рдкреНрд▓рдЧрдЗрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рд╕реАрдЦрд╛ред







рдиреНрдпреВрдирддрдо рдкреНрд▓рдЧрдЗрди рд╕реБрд╡рд┐рдзрд╛рдПрдБ


рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рдкреНрд▓рдЧрдЗрди рдХреЛ рдПрдореНрдмреЗрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЬреАрд╡рди рдЪрдХреНрд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:



рдореЗрдЯрд╛рдбрд╛рдЯрд╛


рдкреНрд▓рдЧрдЗрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИ

рд╕реНрдерд┐рд░ рд╢реВрдиреНрдп gst_dummy_class_init (GstdummyClass * klass)



рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдбрдореА рддрддреНрд╡ рдореЗрдВ рдмреБрд▓рд┐рдпрди рдХрд╛ рдПрдХ рдореМрди рдЧреБрдг рд╣реИ, рдЬреЛ рдПрдХ рдзрд╛рд░рд╛ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддреЗ рд╕рдордп рдкрд╛рда рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИред



  gobject_class->set_property = gst_dummy_set_property; gobject_class->get_property = gst_dummy_get_property; g_object_class_install_property (gobject_class, PROP_SILENT, g_param_spec_boolean ("silent", "Silent", "Produce verbose output ?", FALSE, (GParamFlags)G_PARAM_READWRITE));
      
      





рдЗрд╕ рдХреЛрдб рдХреЗ рд╕рд╛рде, рд╣рдо GStreamer рдкрд░реНрдпрд╛рд╡рд░рдг рдХреЛ рд╕реВрдЪрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдкреНрд▓рдЧрдЗрди рдореЗрдВ рд╕рд╛рдЗрд▓реЗрдВрдЯ рдкреНрд░реЙрдкрд░реНрдЯреА рд╣реИ, рдпрд╣ рдмреБрд▓рд┐рдпрди рдХрд╛ рд╣реИ, рдкреНрд░рддрд┐рдирд┐рдзрд┐ gst_dummy_set_property рдЗрд╕рдХреА рд╕реНрдерд╛рдкрдирд╛ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИ, рд░реАрдбрд┐рдВрдЧ gst_dummy_get_property рд╣реИ, рдпрд╣ рдкрдврд╝рдиреЗ рдФрд░ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╕реБрд▓рдн рд╣реИ, рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди FALSE рд╣реИред рдЕрдЧрд▓рд╛, рд╣рдо рдХрдиреЗрдХреНрд╢рди рдмрд┐рдВрджреБрдУрдВ рдХреЛ рдкреНрд▓рдЧрдЗрди - рдкреИрдбреНрд╕ рдореЗрдВ рдкрдВрдЬреАрдХреГрдд рдХрд░рддреЗ рд╣реИрдВред



  gst_element_class_add_pad_template (gstelement_class, gst_static_pad_template_get (&src_factory)); gst_element_class_add_pad_template (gstelement_class, gst_static_pad_template_get (&sink_factory));
      
      





рд╣рдо рдЗрдирдкреБрдЯ рдкреИрдб рд╕рд┐рдВрдХ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рд╣рдореЗрд╢рд╛ рдЙрдкрд▓рдмреНрдз рд╣реЛрддрд╛ рд╣реИ - GST_PAD_ALWAYS рдФрд░ рдХрд┐рд╕реА рднреА рдкреНрд░рд╛рд░реВрдк GST_STATIC_CAPS ("рдХреЛрдИ рднреА") рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИред

 static GstStaticPadTemplate sink_factory = GST_STATIC_PAD_TEMPLATE ("sink", GST_PAD_SINK, GST_PAD_ALWAYS, GST_STATIC_CAPS ("ANY") );
      
      





рд╣рдо рдЖрдЙрдЯрдкреБрдЯ рдкреИрдб src рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рд╣рдореЗрд╢рд╛ рдЙрдкрд▓рдмреНрдз рд╣реЛрддрд╛ рд╣реИ - GST_PAD_ALWAYS рдФрд░ рдХрд┐рд╕реА рднреА рдкреНрд░рд╛рд░реВрдк GST_STATIC_CAPS ("рдХреЛрдИ рднреА") рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░рддрд╛ рд╣реИред

 static GstStaticPadTemplate src_factory = GST_STATIC_PAD_TEMPLATE ("src", GST_PAD_SRC, GST_PAD_ALWAYS, GST_STATIC_CAPS ("ANY") );
      
      





рдЙрджрд╛рд╣рд░рдг рдкреНрд░рд╛рд░рдВрднрд┐рдХ


рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдирд┐рд░реНрдорд╛рдг рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рджреМрд░рд╛рди, GStreamer рд╡рд╛рддрд╛рд╡рд░рдг рдкреНрд▓рдЧрдЗрди рдЙрджрд╛рд╣рд░рдг рдЖрд░рдВрднреАрдХрд░рдг рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ:

 static void gst_dummy_init (Gstdummy * filter)
      
      





рдЬрд┐рд╕ рдкреНрд░рд╡реЗрд╢ рджреНрд╡рд╛рд░ рдкрд░ рд╕рдВрд░рдЪрдирд╛ рднрд░реА рдЬрд╛рдиреА рд╣реИ, рдЙрд╕рдХреА рдЖрдкреВрд░реНрддрд┐ рдХреА рдЬрд╛рддреА рд╣реИ:

 struct _Gstdummy { GstElement element; GstPad *sinkpad, *srcpad; gboolean silent; };
      
      





рдкреНрд▓рдЧрдЗрди рдХреЗ рдЗрдирдкреБрдЯ рдкрд░ рд╣реЛрдиреЗ рд╡рд╛рд▓реА рдШрдЯрдирд╛рдУрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЙрдкрдпреБрдХреНрдд рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛:

 gst_pad_set_event_function (filter->sinkpad, GST_DEBUG_FUNCPTR(gst_dummy_sink_event));
      
      





рд╕реНрдЯреНрд░реАрдо рдХрдиреЗрдХреНрд╢рди


рдЬрдм рдШрдЯрдирд╛рдПрдБ рдЗрдирдкреБрдЯ рдЗрдирдкреБрдЯ рдкрд░ рд╣реЛрддреА рд╣реИрдВ, рддреЛ рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛:

 static gboolean gst_dummy_sink_event (GstPad * pad, GstObject * parent, GstEvent * event)
      
      





рдЬреЛ рдЕрднреА рддрдХ рдХреБрдЫ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред



рдЯреНрд░рд╛рдпрд▓ рд░рди


рдЕрдм рдЖрдк рдЪрд▓рд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - gst-launch-1.0 videotestsrc! рдбрдореА! autovideosink тАУvред рдпрд╣ рдХрдорд╛рдВрдб рд╡реАрдбрд┐рдпреЛ рдкреНрд▓рдЧрдЗрди рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди рдЯреЗрд╕реНрдЯ рд╡реАрдбрд┐рдпреЛ рд╕реНрдЯреНрд░реАрдо рдХреЛ рд╣рдорд╛рд░реЗ рдкреНрд▓рдЧрдЗрди рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдЗрд╕реЗ рдСрдЯреЛрд╡рд╛рдЗрдбреЛрд╕рд┐рдВрдХ рд╡реАрдбрд┐рдпреЛ рдкреНрд▓реЗрдпрд░ рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХреЗ рдмрд┐рдирд╛ рдЖрдЧреЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред рдХреБрдВрдЬреА v рдЖрдкрдХреЛ рдпрд╣ рджреЗрдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдХрд┐ рдкреВрд░реА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреИрд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рд╣реЛрддреА рд╣реИред







рдпрджрд┐ рд╣рдордиреЗ рдПрдХ рдкрд░реАрдХреНрд╖рдг рдЪрд┐рддреНрд░ рджреЗрдЦрд╛, рддреЛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рдкреНрд▓рдЧрдЗрди рдиреЗ рдЗрд╕рдХреЗ рдЗрдирдкреБрдЯ рд╕реЗ рдЖрдЙрдЯрдкреБрдЯ рдореЗрдВ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдбреЗрдЯрд╛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рджрд┐рдпрд╛ рд╣реИред

рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП, рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдЙрддреНрдкрд╛рджрди рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╢рд╛рдорд┐рд▓ рд╣реЛрдВрдЧреЗ:

 /GstPipeline:pipeline0/GstVideoTestSrc:videotestsrc0.GstPad:src: caps = video/x-raw, format=(string)I420, width=(int)320, height=(int)240, framerate=(fraction)30/1, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive
      
      





рдпрд╣ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ рдХрд┐ рд╡реАрдбрд┐рдпреЛрд╕реНрдЯреЗрд╕реНрдЯрд╕рдХреЗ0 рдирд╛рдордХ GstVideoTestSrc рд╡рд░реНрдЧ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкреИрдб src рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдЬреЛ I420 рдкреНрд░рд╛рд░реВрдк рдореЗрдВ 320 рдХреЗ 240 рдХреЗ рдлреНрд░реЗрдо рдЖрдХрд╛рд░ рдХреЗ рд╕рд╛рде рдПрдХ рд╡реАрдбрд┐рдпреЛ / рдПрдХреНрд╕-рд░реЙ рд╕реНрдЯреНрд░реАрдо рдЬрд╛рд░реА рдХрд░рддрд╛ рд╣реИ, рдЖрджрд┐ред

рдЪреВрдВрдХрд┐ рд╣рдорд╛рд░рд╛ рдкреНрд▓рдЧрдЗрди рдХрд┐рд╕реА рднреА рдкреНрд░рд╛рд░реВрдк рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рдХрд╛ рдЗрдирдкреБрдЯ рд╡реАрдбрд┐рдпреЛрдЯреИрд╕реНрдЯреЗрд╕реНрдХ0 рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рд╕реЗ рдЬреБрдбрд╝рд╛ рдерд╛:

 /GstPipeline:pipeline0/Gstdummy:dummy0.GstPad:sink: caps = video/x-raw, format=(string)I420, width=(int)320, height=(int)240, framerate=(fraction)30/1, pixel-aspect-ratio=(fraction)1/1, interlace-mode=(string)progressive
      
      





рдЖрдЧреЗ рдЧреЛрддрд╛


рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рдмрд╛рдж рдХрд┐ рдпрд╛рдВрддреНрд░рд┐рдХреА рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд╣рдо рдЕрдкрдиреЗ рд▓рдХреНрд╖реНрдп рдХреЗ рд▓рд┐рдП рдХрдИ рдХрджрдо рдЙрдард╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВрдЧреЗред рд╕рдорд╛рдзрд╛рди рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЛ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдПрдХ рдФрд░ рдЪрд┐рддреНрд░рдХрд╛рд░ рдкреНрд▓рдЧрдЗрди рдЬреЛрдбрд╝рд╛, рдЬреЛ рдЫрд╡рд┐ рдкрд░ рдПрдХ рдЖрдпрдд рдЦреАрдВрдЪреЗрдЧрд╛ред

рдЖрдк рдХрд┐рд╕реА рднреА рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд┐рдП рдмрд┐рдирд╛ рдПрдХ рдЖрдпрдд рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рдУрдкрдирд╕реАрд╡реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред



рдирдпрд╛ рдкреНрд▓рдЧрдЗрди рдЬреЛрдбрд╝рддреЗ рд╕рдордп, рдЗрд╕рдХреЗ рдкрдВрдЬреАрдХрд░рдг рдХреА рд╕рдорд╕реНрдпрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд░рдЬрд┐рд╕реНрдЯреНрд░рд╛рд░ рдХреЛ рдкреНрд░рддрд┐ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдПрдХ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕ рд╕рдВрдмрдВрдз рдореЗрдВ, GstTestLib.cpp рдлрд╝рд╛рдЗрд▓ рдкреЗрд╢ рдХреА рдЧрдИ, рдЬрд┐рд╕рдореЗрдВ рджреЛрдиреЛрдВ рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХрд╛ рдкрдВрдЬреАрдХрд░рдг рдХреЛрдб рд╣реИред

 struct _elements_entry { const gchar *name; GType (*type) (void); }; static const struct _elements_entry _elements[] = { {"dummy", gst_dummy_get_type}, {"painter", gst_painter_get_type}, {NULL, 0}, }; static gboolean plugin_init (GstPlugin * plugin) { gint i = 0; while (_elements[i].name) { if (!gst_element_register (plugin, _elements[i].name, GST_RANK_NONE, (_elements[i].type) ())) return FALSE; i++; } return TRUE; }
      
      





рдЪрд┐рддреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдЗрдирдкреБрдЯ рд╕реНрдЯреНрд░реАрдо рдкреНрд░рд╛рд░реВрдк рдкрд░ рдЕрдзрд┐рдХ рдХрдареЛрд░ рдкреНрд░рддрд┐рдмрдВрдз рдмрдирд╛рдПред рдЕрдм рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

 static GstStaticPadTemplate sink_factory = GST_STATIC_PAD_TEMPLATE ("sink", GST_PAD_SINK, GST_PAD_ALWAYS, GST_STATIC_CAPS ( GST_VIDEO_CAPS_MAKE ("{ BGRx }") ) );
      
      





рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдХрд┐рд╕реА рднреА рд░рд┐рдЬрд╝реЙрд▓реНрдпреВрд╢рди рдФрд░ рдлреНрд░реЗрдо рджрд░ рдХреЗ рд╕рд╛рде рдмреАрдЬреАрдЖрд░рдПрдХреНрд╕ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ рд╡реАрдбрд┐рдпреЛ рдЗрдирдкреБрдЯ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред OpenCV рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ BGR рд╕реНрдХреАрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдЖрдк рдпрд╣рд╛рдВ рд░рдВрдЧ рдпреЛрдЬрдирд╛рдУрдВ рдФрд░ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред

рдЪреВрдВрдХрд┐ рдХреИрдорд░рд╛ рдЬреЛ рдореБрдЭреЗ рджрд┐рд▓рдЪрд╕реНрдкреА рджреЗрддрд╛ рд╣реИ рд╡рд╣ рдЖрд░рдЯреАрдПрд╕рдкреА рдПрдЪ 264 рд╕реНрдЯреНрд░реАрдо рджреЗрддрд╛ рд╣реИ, рд╣рдореЗрдВ рдЗрд╕реЗ рдбрд┐рдХреЛрдб рдХрд░рдиреЗ рдФрд░ рд╡реАрдбрд┐рдпреЛрдХреЙрдирд╡рд░реНрдЯ рдХрдирд╡рд░реНрдЯрд░ рдХреЗ рдЗрдирдкреБрдЯ рдХреЛ рдЦрд┐рд▓рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╣рдорд╛рд░рд╛ рдкрд░реАрдХреНрд╖рдг рдорд╛рдорд▓рд╛ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:

 gst-launch-1.0 -v rtspsrc location=rtsp://10.10.0.15 ! rtph264depay ! avdec_h264 ! videoconvert ! painter ! videoconvert ! autovideosink
      
      





(10.10.0.15 - рдореЗрд░рд╛ рдЖрдВрддрд░рд┐рдХ рдкрддрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ)ред

рдЕрдм рдЗрдирдкреБрдЯ рдмрдлрд░ BGRx рдлреЙрд░реНрдореЗрдЯ рдореЗрдВ рд╣реЛрдЧрд╛ред рдпрджрд┐ рдЖрдкрдХреЛ рдкрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЖрдк рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рдбрд┐рдХреЛрдбрдмрд┐рди рдХрдВрдЯреЗрдирд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╡рд╣ рдЙрдЪрд┐рдд рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХреЛ рдЪреБрдирдиреЗ рдФрд░ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдЧрд╛:

 gst-launch-1.0 -v rtspsrc location=rtsp://10.10.0.15 ! decodebin ! autovideosink
      
      





рдиреИрджрд╛рдирд┐рдХ тАЛтАЛрдЙрддреНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП тАУv рд╕реНрд╡рд┐рдЪ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдФрд░ рд╡рд╣рд╛рдВ рдЖрдк рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХреИрд╕реЗ рдмрдирд╛рдИ рдЬрд╛рддреА рд╣реИред



рд╡рд╛рдкрд╕ рд╣рдорд╛рд░реЗ рдкреНрд▓рдЧрдЗрди рдкрд░ред рд╣рдорд╛рд░реЗ рд╕рднреА рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдЗрдирдкреБрдЯ рдЫрд╡рд┐ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рдирдИ рдЫрд╡рд┐ рдмрдирд╛рдиреЗ рдФрд░ рдЙрд╕ рдкрд░ рдПрдХ рдЖрдпрдд рдмрдирд╛рдиреЗ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдВрдЧреЗред рдХрд╛рд░реНрдп рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рд░реВрдк рд╣реИ:

 static GstBuffer * gst_painter_process_data (Gstpainter * filter, GstBuffer * buf) { //          GstMapInfo srcmapinfo; gst_buffer_map (buf, &srcmapinfo, GST_MAP_READ); //    GstBuffer * outbuf = gst_buffer_new (); //      IplImage * dst = cvCreateImageHeader (cvSize (filter->width, filter->height), IPL_DEPTH_8U, 4); //      GstMemory * memory = gst_allocator_alloc (NULL, dst->imageSize, NULL); GstMapInfo dstmapinfo; if (gst_memory_map(memory, &dstmapinfo, GST_MAP_WRITE)) { //        memcpy (dstmapinfo.data, srcmapinfo.data, srcmapinfo.size); dst->imageData = (char*)dstmapinfo.data; //   cvRectangle (dst, cvPoint(10,10), cvPoint(100, 100), CV_RGB(0, 255, 0), 1, 0); //         gst_buffer_insert_memory (outbuf, -1, memory); gst_memory_unmap(memory, &dstmapinfo); } cvReleaseImageHeader(&dst); gst_buffer_unmap(buf, &srcmapinfo); return outbuf; }
      
      







рд╕рд┐рдВрдХ рдкреИрдб рдЗрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рдореЗрдВ рд╣рдо рдЗрдирдкреБрдЯ рд╕реНрдЯреНрд░реАрдо рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ

 static gboolean gst_painter_sink_event (GstPad * pad, GstObject * parent, GstEvent * event) { gboolean ret; Gstpainter *filter; filter = GST_PAINTER (parent); switch (GST_EVENT_TYPE (event)) { case GST_EVENT_CAPS: { GstCaps * caps; gst_event_parse_caps (event, &caps); //  GstStructure *structure = gst_caps_get_structure (caps, 0); //  gst_structure_get_int (structure, "width", &filter->width); gst_structure_get_int (structure, "height", &filter->height); filter->format = gst_structure_get_string (structure, "format"); ret = gst_pad_event_default (pad, parent, event); break; } default: ret = gst_pad_event_default (pad, parent, event); break; } return ret; }
      
      





рдорд╛рдереЗ рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рд╣реЛ рдЧрдИ рд╣реИред рдкреНрд░рдпреЛрдЧ рд╕рдлрд▓ рд░рд╣рд╛ред рдЬреИрд╕рд╛ рдХрд┐ GStreamer рд╡рд┐рдХрд╕рд┐рдд рд╣реЛрддрд╛ рд╣реИ, рдирдП рдЕрд╡рд╕рд░ рдЦреБрд▓рддреЗ рд╣реИрдВ, рдЬреЛ рдХрд┐, рдЬреИрд╕реЗ-рдЬреИрд╕реЗ рдореИрдВ рдЖрдЧреЗ рдмрдврд╝рддрд╛ рд╣реВрдВ рдФрд░ рд╡рд┐рд╖рдп рдореЗрдВ рд░реБрдЪрд┐ рд╣реЛрддреА рд╣реИ, рдореИрдВ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдмрд╛рдд рдХрд░реВрдВрдЧрд╛ред



рд╕реВрддреНрд░реЛрдВ рдХрд╛ рдХрд╣рдирд╛ рд╣реИ


GStreamer

GStreamer рд╡рд╕реНрддреБ рдкрджрд╛рдиреБрдХреНрд░рдо

GStreamer рдкреНрд▓рдЧрдЗрди рд╡рд┐рдХрд╛рд╕ рдЧрд╛рдЗрдб

OpenCV

рдкреНрд▓рдЧрдЗрди рдЯреЗрдореНрдкрд▓реЗрдЯ рднрдВрдбрд╛рд░

рдореЗрд░рд╛ рд╕реНрд░реЛрдд



All Articles