GStreamer: рд▓рд┐рдирдХреНрд╕-рдлреНрд▓реЗрд╡рд░реНрдб рдХреЛрдбреЗрдХреНрд╕

рдХреНрдпрд╛ рдЖрдкрдиреЗ рдХрднреА рд╕реЛрдЪрд╛ рд╣реИ рдХрд┐ рдЯреЛрдЯреЗрдо, рд░рд┐рджрдордмреЙрдХреНрд╕ рдпрд╛ рдмрдВрд╢реА рдЬреИрд╕реЗ рдорд╣рд╛рди рдЦрд┐рд▓рд╛рдбрд╝реА рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ? рд╕рдВрднрд╡рддрдГ рдЖрдк рдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдирд╡ рд╕реНрдерд╛рдкрд┐рдд рдЙрдмрдВрдЯреВ рдореЗрдВ, рдЬрдм рдЖрдк AVI-shku рдЦреЗрд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдореИрдВрдиреЗ рдЕрддрд┐рд░рд┐рдХреНрдд рдкреИрдХреЗрдЬ gst-ffmpeg рдпрд╛ gst-plugins-ugly рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рд╕рдВрджреЗрд╢ рджреЗрдЦрд╛ред рдХрдЯреМрддреА рдХреЗ рддрд╣рдд - рдпрд╣ рдорд▓реНрдЯреАрдореАрдбрд┐рдпрд╛ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рдХреНрдпрд╛ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИ, рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдкреНрд░рдХрд╛рд╢ рдХреЛ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХрд╛ рдореЗрд░рд╛ рдкреНрд░рдпрд╛рд╕ред

VLC рдпрд╛ FFmpeg рд╕реЗ рдореБрдЦреНрдп рдЕрдВрддрд░ рдпрд╣ рд╣реИ рдХрд┐ рдкрд░реНрдпрд╛рд╡рд░рдг рдХреЛ рдореВрд▓ рд░реВрдк рд╕реЗ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рдЙрди рд╕рднреА рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреЗ рд▓рд┐рдП рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдЬреЛ рдорд▓реНрдЯреАрдореАрдбрд┐рдпрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рдврд╛рдВрдЪреЗ рдХреЛ рдРрд╕реА рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдПрдХреАрдХреГрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ: рд╕реА, рд╕реА ++ / рдХреНрдпреВрдЯреА, рдкрд╛рдпрдерди, рд░реВрдмреА, рдкрд░реНрд▓ред

GStreamer рдЖрдкрдХреЛ рдРрд╕реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЬреЛ рд╕рдХреНрд╖рдо рд╣реИрдВ:


рдХрд┐рд╕реА рдлрд┐рд▓реНрдо рдХреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдЯреНрд░рд╛рдВрд╕рдХреЛрдб рдХрд░рдиреЗ рдЬреИрд╕реА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореЗрдиреНрдХреЛрдбрд░ рдпрд╛ рд╡реАрдПрд▓рд╕реА рдЬреИрд╕реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдмрд╣реБрдд рд▓реЛрдХрдкреНрд░рд┐рдп рд╣реИрдВред рд▓реЗрдХрд┐рди GStreamer рдХреЗ рд╕рд╛рде рднреА рдРрд╕рд╛ рдХрд░рдирд╛ рдЬреНрдпрд╛рджрд╛ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИред

рдиреАрдЪреЗ рд▓рд┐рдирдХреНрд╕ рдХреЗ рд▓рд┐рдП рдЙрджрд╛рд╣рд░рдг рд╣реИрдВ рдЬреЛ рд░реВрдкрд░реЗрдЦрд╛ рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдЗрди рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ, рд╣рдо рдореБрдЦреНрдп рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ gst-launch рдФрд░ gst-inspect рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ - рдХреБрдЫ рд╣рдж рддрдХ рдЧреНрд░рд╛рдлрдПрдб рд╡рд┐рдВрдбреЛрдЬ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреА рдпрд╛рдж рджрд┐рд▓рд╛рддрд╛ рд╣реИред рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬрд┐рдиреНрд╣реЗрдВ рдЧреНрд░рд╛рдлрд┐рдХрд▓ рд╢реЗрд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ - gst-editor рд╣реИ ред рд▓реЗрдХрд┐рди рдзреНрдпрд╛рди рд░рдЦреЗрдВ рдХрд┐ рдпреЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдмрдиреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЗрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛрдиреЗ рдХреА рдЙрдореНрдореАрдж рди рдХрд░реЗрдВред

GStreamer рдХреЗ рд╕рд╛рде рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдХреБрдЫ рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдХреЛ рд╕рдордЭрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

рдХреНрд▓рд╛рд╕рд┐рдХ рд░реВрдк рдореЗрдВ, рд╣рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдорд┐рд▓рддреА рд╣реИ: рд╕реНрд░реЛрдд -> рдкрд╛рд░реНрд╕рд░ -> рдбрд┐рдХреЛрдбрд░ -> рдлрд╝рд┐рд▓реНрдЯрд░ -> рд╕рд┐рдВрдХред

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

$ gst-launch playbin uri=file:///home/me/audo.mp3


рдкреНрд▓реЗрдмрд┐рди рддрддреНрд╡ рд╕реНрд╡рдпрдВ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рддрд╛ рд╣реИ, рд╡рд╛рдВрдЫрд┐рдд рдХреЛрдбреЗрдХ рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рддрддреНрд╡ рдкрд╛рддрд╛ рд╣реИред рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрде рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВред рдпрджрд┐, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЖрдк рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ рдХрд┐ рдХрд┐рд╕ рддрддреНрд╡ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИ, рддреЛ рдЖрдк gst-рдирд┐рд░реАрдХреНрд╖рдг рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╕рднреА рдЙрдкрд▓рдмреНрдз рддрддреНрд╡реЛрдВ рдХреЛ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ "gst-inspect рд▓рдВрдЧрдбрд╝рд╛" рдПрдордкреА 3 рдПрдирдХреЛрдбрд░ рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рджрд┐рдЦрд╛рдПрдЧрд╛ред рдпрд╣ рддрддреНрд╡ "рдбрд┐рдХреЛрдбрдмрд┐рди 2" рдХреА рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХреЛ рднреА рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ, рдЬреЛ рд╕реНрд╡рдпрдВ рд╡рд╛рдВрдЫрд┐рдд рдбрд┐рдХреЛрдбрд░ рдХреЛ рдвреВрдВрдврддрд╛ рд╣реИред

рд╕рдмрд╕реЗ рд╕рд░рд▓ рдСрдбрд┐рдпреЛ рдкреНрд▓реЗрдпрд░:

$ gst-launch filesrc location=audio.mp3 ! decodebin2 ! alsasink


рд╕рдмрд╕реЗ рд╕рд░рд▓ рдСрдбрд┐рдпреЛ рдкреНрд▓реЗрдпрд░ (рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдХреЛрдбреЗрдХ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ, рдФрд░ рдкреНрд░рд╛рд░реВрдкреЛрдВ рдкрд░ рд╕рд╣рдордд):

$ gst-launch filesrc location=audio.mp3 ! mad ! audioconvert ! audioresample ! alsasink


рдЦрд┐рд▓рд╛рдбрд╝реА рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реИ (рдзреНрд╡рдирд┐ рдФрд░ рд╡реАрдбрд┐рдпреЛ рдХреЗ рд╕рд╛рде):

$ gst-launch filesrc location=audovideofile.mpeg ! decodebin2 name=decoder \
decoder. ! ffmpegcolorspace ! xvimagesink \
decoder. ! audioconvert ! audioresample ! alsasink


рдпрджрд┐ рдЖрдкрдХреЛ AVI рдлрд╝рд╛рдЗрд▓ рдХреЛ MOV рдореЗрдВ рдЯреНрд░рд╛рдВрд╕рдХреЛрдб рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЖрдк рдирд┐рдореНрди рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

$ gst-launch-0.10 filesrc location=film.avi ! \
decodebin2 name=decoder { qtmux name=muxer ! filesink location=film.mov } \
{ decoder. ! ffmpegcolorspace ! jpegenc ! queue ! muxer. } \
{ decoder. ! queue ! audioconvert ! queue ! muxer. }


рдХреНрдпрд╛ рдЖрдк рдПрдХ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рдФрд░ рд╕реНрдХреНрд░реАрди рдкрд░ рдкреНрд░рд╕рд╛рд░рдг рд╡реАрдбрд┐рдпреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд╛рде рдкреНрд░рд╕рд╛рд░рдг рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ? рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ:

$ gst-launch v4l2src ! queue ! \
ffmpegcolorspace ! tee name=t1 ! \
queue ! xvimagesink sync=false t1. ! \
queue ! theoraenc quality=1 ! \
queue ! oggmux name=mux \
alsasrc ! audio/x-raw-int,rate=8000,channels=1,depth=8 ! \
queue ! audioconvert ! vorbisenc ! \
queue ! mux. mux. ! \
queue ! tee name= t ! \
queue ! filesink location=test.ogg t. ! \
queue ! shout2send ip=<-icecast-> port=8000 password=hackme


рдЬреЛ рд▓реЛрдЧ рдлреНрд▓реИрд╢ рдореЗрдВ рд▓рдЯрдХрдирд╛ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВ, рд╡реЗ рднреА рдПрдХ рддрд░рдл рдирд╣реАрдВ рдЦрдбрд╝реЗ рд╣реЛрддреЗ рд╣реИрдВ, рд▓рд╛рдЗрдмреНрд░реЗрдЯрдореНрдк (рдЖрдкрдХреЛ рдЬреАрдПрд╕рдЯреА-рдкреНрд▓рдЧрдЗрдиреНрд╕-рдЦрд░рд╛рдм рдкреИрдХреЗрдЬ рдХреЗ рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ) рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж:

$ gst-launch v4l2src ! \
queue ! ffmpegcolorspace ! ffenc_flv ! \
queue ! flvmux name=muux is-live=true ! \
rtmpsink location='rtmp://localhost/path/to/stream live=1' \
alsasrc ! audio/x-raw-int,rate=22050,channels=1,depth=16 ! \
queue ! audioconvert ! lame bitrate=48 ! \
queue ! muux.


рдЗрд╕рд▓рд┐рдП рдбреЗрд╡рд▓рдкрд░реНрд╕ рдиреЗ "рджреЗрд╢реА" рдорд▓реНрдЯреАрдореАрдбрд┐рдпрд╛ рдлреНрд░реЗрдорд╡рд░реНрдХ (рдХреНрд╡рд┐рдХрдЯрд╛рдЗрдо / рдбрд╛рдпрд░реЗрдХреНрдЯрд╢реЛ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдкрд░ рдзреНрдпрд╛рди рджрд┐рдпрд╛, рдпрджрд┐ рдЖрдк "рдкреБрд▓реЛрдВ" рдХреЗ рд▓рд┐рдП рдореИрдХрдУрдПрд╕ рдпрд╛ рд╡рд┐рдВрдбреЛрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред

рдЦреИрд░, рдирд┐рд╖реНрдХрд░реНрд╖ рдореЗрдВ, рдореИрдВ рдХрд╣рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдХрдИ рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдЕрднреА рднреА рд╣рд▓ рдХрд░рдирд╛ рд╣реИ (desync, рдореЗрдореЛрд░реА рд▓реАрдХ рдФрд░ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛рдПрдВ)ред рдЙрдирдореЗрдВ рд╕реЗ рдЬреНрдпрд╛рджрд╛рддрд░ рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рд╕реЗ рдЬреБрдбрд╝реЗ рд╣реИрдВ, рдЬреЛ рд╣рдореЗрд╢рд╛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд▓рд┐рдЦреЗ рдирд╣реАрдВ рдЬрд╛рддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП рдбреЗрд╡рд▓рдкрд░реНрд╕ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рдЪрд╛рд▓ рдХреЗ рд╕рд╛рде рдЖрдП - рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХреЛ 5 рд╢реНрд░реЗрдгрд┐рдпреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:


рдкрд░рд┐рдЪрд╛рд░рд┐рдХрд╛ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ (рд╕реНрд░реЛрдд):

  1. Gstreamer рд╕реБрд╡рд┐рдзрд╛рдПрдБ
  2. Gstreamer рдХреЗ рд╕рд╛рде рд▓рд╛рдЗрд╡ рд╕реНрдЯреНрд░реАрдо рдЬреАрдПрд╕рдЯреА-рд▓реЙрдиреНрдЪ рдХреЗ рд▓рд┐рдП рдЙрджрд╛рд╣рд░рдг
  3. howto
  4. GStreamer, RTP рдФрд░ рд▓рд╛рдЗрд╡ рд╕реНрдЯреНрд░реАрдорд┐рдВрдЧ , рдЕрдЬрдЧрд░ рдХреЗ рд▓рд┐рдП рдЙрджрд╛рд╣рд░рдг
  5. рдкреЗрдб рдХреЛрдбреЗрдХреНрд╕ рдХрд╛ рд╕рдВрдЧреНрд░рд╣
  6. рдирдорд╕реНрддреЗ рд╡рд┐рд╢реНрд╡ GStreamer рдореЗрдВ рд╕реА

Source: https://habr.com/ru/post/In127023/


All Articles