UDP рд╕реЗ JAVA рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкрд░ Android рдбрд┐рд╡рд╛рдЗрд╕ рд╕реЗ рд╕реНрдЯреНрд░реАрдо рд╡реАрдбрд┐рдпреЛ

рддреЛ, рдлрд┐рдирд┐рд╢ рд▓рд╛рдЗрди рдкрд░ рдЬрд╛рдПрдВред рд╣рдо рдкрд╣рд▓реЗ рд╣реА рдЬрд╛рди рдЪреБрдХреЗ рд╣реИрдВ рдХрд┐ Android рд╕реЗ VLC рдкреНрд▓реЗрдпрд░ рдореЗрдВ рд╡реАрдбрд┐рдпреЛ рд╕реНрдЯреНрд░реАрдо рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЕрдм рдпрд╣ рдХреЗрд╡рд▓ JAVA рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рд╡реАрдбрд┐рдпреЛ рдХреЗ рд╕рд╛рде рд╡рд┐рдВрдбреЛ рдХреЛ рдПрдХреАрдХреГрдд рдХрд░рдиреЗ рдФрд░ рд░реЛрдмреЛрдЯ рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред



рдУрдкрди рд╕реЛрд░реНрд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯ VLCJ CAPRICA рдЗрд╕рд╕реЗ рд╣рдореЗрдВ рдмрд╣реБрдд рдорджрдж рдорд┐рд▓реЗрдЧреАред
Vlcj рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдПрдХ рдЬрд╛рд╡рд╛ рдлреНрд░реЗрдорд╡рд░реНрдХ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдПрдХ рдореВрд▓ VLC рдореАрдбрд┐рдпрд╛ рдкреНрд▓реЗрдпрд░ рдХреЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЛ рдЬрд╛рд╡рд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдПрдореНрдмреЗрдб рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рд▓реЛрдЧреЛрдВ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рд╕рд░рд▓ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рд░рд▓ (рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд╛рд▓реА рдорд┐рд░реНрдЪ) рд╣реИред FFmpeg рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдФрд░ рдЕрдзрд┐рдХ рдХреЗ рд╕рд╛рде рдкреАрдбрд╝рд╛ рдХреЗ рдмрдЬрд╛рдп, рдЖрдкрдХреЛ рддреБрд░рдВрдд рдПрдХ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮ рдХреЛ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп, рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдФрд░ рдкреЗрд╢реЗрд╡рд░ рд╡реАрдПрд▓рд╕реА рдореАрдбрд┐рдпрд╛ рдкреНрд▓реЗрдпрд░ рдХреЗ рдореВрд▓ рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдФрд░ рдЗрд╕реЗ рд╕реАрдзреЗ JAVA рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реЗ рдХреЙрд▓ рдХрд░реЗрдВред

рдХреМрди рдкрд░рд╡рд╛рд╣ рдХрд░рддрд╛ рд╣реИ, рд╣рдо рдПрдХ рдмрд┐рд▓реНрд▓реА рдХреЗ рд▓рд┐рдП рдкреВрдЫрддреЗ рд╣реИрдВред

рдЪреВрдВрдХрд┐, рдЗрд╕ рдпрд╛рддреНрд░рд╛ рдореЗрдВ, рдкрд░реНрдпрд╛рдкреНрдд рдиреБрдХрд╕рд╛рди рд╣реЛрддреЗ рд╣реИрдВ, рд╣рдо рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣ рд╢реБрд░реВ рдХрд░реЗрдВрдЧреЗ, рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рдХреЗ рд╕рд╛рде рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рд╣реА рддреБрдЪреНрдЫ рдпрд╛рддреНрд░рд╛ рдХрд░реЗрдВрдЧреЗред

VLCJ рдкреИрдХреЗрдЬ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ


рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, VLC рдореАрдбрд┐рдпрд╛ рдкреНрд▓реЗрдпрд░ рдХреЗ рдЕрдкрдиреЗ рд╕рдВрд╕реНрдХрд░рдг рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВред рд╣рдореЗрдВ рдПрдХ рдирдП рд╕рдВрд╕реНрдХрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдпрд╣ рдХрдЯреМрддреА рдХрд░рддрд╛ рд╣реИ рдЬреЛ udp рд╕реНрдЯреНрд░реАрдо рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдкрд┐рдЫрд▓реЗ рдкреЛрд╕реНрдЯ рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЗрд╕рд▓рд┐рдП, рд╣рдо рдЫрд╛рддрд╛ рдХреЗ рд╕рдВрд╕реНрдХрд░рдг 2.2.6 рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЙрд╕реА рд╕рдордп рд╣рдорд╛рд░реЗ рдЬреЗрдПрд╡реАрдП рдкреИрдХреЗрдЬ рдХреЛ рдзреНрдпрд╛рди рд╕реЗ рджреЗрдЦрддреЗ рд╣реИрдВред рдЙрдиреНрд╣реЗрдВ рдереЛрдбрд╝реА рдЧрд╣рд░рд╛рдИ рдореЗрдВ рдореЗрд▓ рдЦрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрджрд┐ рдЦрд┐рд▓рд╛рдбрд╝реА 64-рдмрд┐рдЯ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рддреЛ JDK рд╕рдорд╛рди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдФрд░ рдпрд╣ рдмрдВрдж рдирд╣реАрдВ рд╣реБрдЖред

рдЙрд╕рдХреЗ рдмрд╛рдж, рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА VLCJ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдкреИрдХреЗрдЬ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ



рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╣рдореЗрдВ vlcj-3.12.1 рд╡рд┐рддрд░рдг (рдЬрд╝рд┐рдк) рдкреИрдХреЗрдЬ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣ рд╡рд╣ рдЦрд┐рд▓рд╛рдбрд╝реА рд╣реИ рдЬреЛ VLC 2.2.x рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЖрдк рдЗрд╕реЗ рдХрд╣реАрдВ рднреА рдЕрдирдЬрд╝рд┐рдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдореБрдЦреНрдп рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рд╕реНрд╡рдпрдВ рд╡реАрдПрд▓рд╕реА рдХреЗ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рджреЛ рдлрд╛рдЗрд▓реЗрдВ рдирд╛рдо рд╕реЗ рдореЗрд▓ рдЦрд╛рддреА рд╣реИрдВред рдФрд░ рдпрджрд┐ рдЖрдк рдЙрдиреНрд╣реЗрдВ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рд╕рдм рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред

рдЗрд╕рдХреЗ рдмрд╛рдж, рд╣рдо IntelliJ IDEA IDE рдореЗрдВ рдПрдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рддреЗ рд╣реИрдВ (рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рдЕрд▓рдЧ IDE рд╣реИ, рддреЛ рдореИрдВ рдХреБрдЫ рднреА рдорджрдж рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛) рдФрд░ VLCJ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рдПрдХреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдирд┐рд░реНрднрд░рддрд╛рдПрдВ рд▓рд┐рдЦ рд╕рдХрддрд╛ рд╣реВрдВред



рд╣рдо рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдмрд╕ рдпрд╣реА рдХрд░рддреЗ рд╣реИрдВ:

JNA-5.2.0

JNA рдордВрдЪ-5.2.0

vlcj-3.12.1

рдлрд┐рд░ рд╣рдо рдПрдХрдорд╛рддреНрд░ рд╡рд░реНрдЧ рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рдЙрд╕рдореЗрдВ рдЕрдЧрд▓реЗ рдЫреЛрдЯреЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рд▓рд┐рдЦрддреЗ рд╣реИрдВред

import java.awt.*; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.SwingUtilities; import uk.co.caprica.vlcj.component.EmbeddedMediaPlayerComponent; import uk.co.caprica.vlcj.discovery.NativeDiscovery; import uk.co.caprica.vlcj.player.MediaPlayerFactory; import uk.co.caprica.vlcj.player.embedded.EmbeddedMediaPlayer; import uk.co.caprica.vlcj.player.embedded.videosurface.CanvasVideoSurface; public class BasicPlayer { public final JFrame frame; public static String mrl; public static MediaPlayerFactory mpf; public static EmbeddedMediaPlayer MediaPlayer; public static CanvasVideoSurface videoSurface; public static Canvas canvas; public static void main(final String[] args) { new NativeDiscovery().discover(); mrl = "D:\\ttt.mp4"; SwingUtilities.invokeLater(new Runnable() { @Override public void run() { BasicPlayer vp = new BasicPlayer(); vp.start(mrl); } }); } public BasicPlayer() { frame = new JFrame("My First Media Player"); frame.setBounds(200, 100, 540, 340); frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); frame.addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent e) { System.out.println(e); MediaPlayer.release(); mpf.release(); System.exit(0); } }); JPanel contentPane = new JPanel(); contentPane.setLayout(new BorderLayout()); canvas = new Canvas(); mpf = new MediaPlayerFactory(); videoSurface = mpf.newVideoSurface(canvas); MediaPlayer = mpf.newEmbeddedMediaPlayer(); MediaPlayer.setVideoSurface(videoSurface); contentPane.add(canvas, BorderLayout.CENTER); //        frame.setContentPane(contentPane); frame.setVisible(true); } public void start(String mrl) { MediaPlayer.playMedia(mrl); } } 

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

рд╕рднреА рдирдП рд╣реИрдВ:

VLCJ рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рдХрд░реЗрдВ

  new NativeDiscovery().discover(); 

рдФрд░ рдЦреБрдж рдореАрдбрд┐рдпрд╛ рдкреНрд▓реЗрдпрд░ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдирд╛

  mpf = new MediaPlayerFactory(); videoSurface = mpf.newVideoSurface(canvas); MediaPlayer = mpf.newEmbeddedMediaPlayer(); MediaPlayer.setVideoSurface(videoSurface); 

рдФрд░ рдлрд┐рд░ рд╣рдо рдЗрд╕реЗ рд╡рд╛рдВрдЫрд┐рдд рдЧреНрд░рд╛рдлрд┐рдХ рдкреИрдирд▓ рдореЗрдВ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ:

 contentPane.add(canvas, BorderLayout.CENTER); 

рдФрд░ рд╕рдм рдХреБрдЫ, рдлрд╝рд╛рдЗрд▓ рдЗрд╕ рд╡рд┐рдВрдбреЛ рдореЗрдВ рдЦреЗрд▓реА рдЬрд╛рдПрдЧреАред

рдЕрдм рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ

 mrl = "D:\\ttt.mp4"; 

рдкрд░

 mrl = "udp://@:40002"; 

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

рдпрд╣ рд╕рдордЭ рд╕реЗ рдмрд╛рд╣рд░ рд╣реЛрдЧрд╛


рд╢рд╛рдпрдж H264 рдХреЛрдбреЗрдХ рдЬрд┐рд╕реЗ рд╣рдордиреЗ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВ рдЪреБрдирд╛ рд╣реИ рд╡рд╣ рдЧрд╛рдпрдм рд╣реИ? рдмрдВрдж рдХрд░реЛ, рддреЛ рдХреИрд╕реЗ ttt.mp4 рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд░реНрдл рдЦреЗрд▓рддреЗ рд╣реИрдВ? рд╡рд╣ рдЗрд╕ рд╕реЗрдЯрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдирд╣реАрдВ рдЦреЗрд▓ рд╕рдХрддрд╛, рд╡рд╣ mp4 рд╣реИред

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

рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдпрд╣ MediaPlayerFactory рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдХреЗрд╡рд▓ рд╣рдордиреЗ рдЗрд╕реЗ рддрд░реНрдХреЛрдВ рдХреЗ рдмрд┐рдирд╛ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛, рдпрд╛ рдЙрдирдХреЗ рд╕рд╛рде рднреАред Stackoverflow.com рдкрд░, рдореБрдЭреЗ рддреБрд░рдВрдд рдЗрдореЗрдЬ рд░реЛрдЯреЗрд╢рди рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдПрдХ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рдорд┐рд▓рд╛:

 String[] args = { "--video-filter", "rotate", "rotate-angle", "10" }; mpf = new MediaPlayerFactory(args); 

рдпрд╣реА рд╣реИ, рд╣рдо рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕рд░рдгреА рдХреЗ рд╕рд╛рде рдореАрдбрд┐рдпрд╛ рдлреИрдХреНрдЯреНрд░реА рдореЗрдВ рд╡рд╣рд╛рдВ рдХреБрдЫ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рд╡рд╣рд╛рдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдореАрдбрд┐рдпрд╛ рд╕рдВрд╕рд╛рдзрди рдХреЗ рд▓рд┐рдП рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

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

рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдпрд╣ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП:

 String[] args = { "--video-filter", "rotate", "--rotate-angle", "10" }; 

рдЕрдм рд╣рдорд╛рд░реА рд░реЗрдлрд╝рд░реЗрдВрд╕ рдлрд╝рд╛рдЗрд▓ рд╡рд╛рдкрд╕ рдЖ рдЧрдИ рд╣реИ рдЬреИрд╕рд╛ рдХрд┐ рдЗрд╕реЗ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП!



рдЖрдЧреЗ рдпрд╣ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реЛрдЧрд╛:

VLC рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХреЛрдбреЗрдХ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕рд░рдгреА рдореЗрдВ рд▓рд╛рдЗрди рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ:

 "--demux=h264" 

Udp рдЪреИрдирд▓ рдХреЛ рдлрд┐рд░ рд╕реЗ рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реИ


mrl = "udp: // @: 40002";

рдФрд░ рдЗрд╕ рдмрд╛рд░ рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдорд╛рдирд╡ рдорди рдХреА рдЬреАрдд рдХрд╛ рд╕рдВрдХреЗрдд рд╣реИред рдЕрдм рдпрд╣ рд╡реАрдбрд┐рдпреЛ рд╡рд┐рдВрдбреЛ рдпрд╛ рдРрд╕реА рдХрдИ рд╡рд┐рдВрдбреЛ рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдк рдЖрд╕рд╛рдиреА рд╕реЗ рдЕрдкрдиреЗ JAVA рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдЧреНрд░рд╛рдлрд┐рдХрд▓ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ рдкреЛрд░реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдпрд╣ рдПрдХ рдЬреАрдд рдкреНрд░рддреАрдд рд╣реЛрдЧреА?


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

рд╡реАрдбрд┐рдпреЛ


рдмреЗрд╢рдХ, рдХреИрдорд░реЗ рд╕реЗ рд╡реАрдбрд┐рдпреЛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рд╢рд╛рдпрдж рд╣реА рдПрдХ рд░реЛрдмреЛрдЯ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЪрдВрджреНрд░ рд░реЛрд╡рд░ рдиреЗ рджреЛ рдмрд╛рд░ рддреЗрдЬреА рд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреА!

рдХреИрд╢рд┐рдВрдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдкрд░ рд╕рдВрджреЗрд╣ рддреБрд░рдВрдд рдЧрд┐рд░ рдЧрдпрд╛ рдФрд░ рд╡реЗ (рд╕рдВрджреЗрд╣) рд╕рдЪ рд╣реЛ рдЧрдПред

рд╕рдмрд╕реЗ рдШрдордВрдбреА рдерд╛:

  caching for network resources 

рдпрд╣ рдмрд╕ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд▓рдЧрднрдЧ рд╕рдм рдХреБрдЫ рдЦрд╛рддреА рд╣реИ, рдЕрдЧрд░ рдпрд╣ рдЙрд╕реЗ рд╕рдордп рдкрд░ рдирд╣реАрдВ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдПрдХ рдЕрдВрддрд░рд╛рд▓ рдХреА рд╡реНрдпрд╡рд╕реНрдерд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░:

 caching for cameras and microphones 

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

  "--live-caching=100", "--network-caching=500", 

рдкреИрд░рд╛рдореАрдЯрд░ рдорд┐рд▓реАрд╕реЗрдХрдВрдб рдореЗрдВ рд╡рд╣рд╛рдВ рд╕реЗрдЯ рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рд▓рд┐рдП рдХреЛрдИ рднреА рдЙрдиреНрд╣реЗрдВ рдЕрдкрдиреЗ рд▓рд┐рдП рдЪреБрди рд╕рдХрддрд╛ рд╣реИред

рдЖрдк рдХреБрдВрдЬреА рдХрд╛ рдЙрдкрдпреЛрдЧ рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

 "--clock-jitter=time in milliseconds", 

рдлрд┐рд░ рдореАрдбрд┐рдпрд╛ рдкреНрд▓реЗрдпрд░ рд╕реНрдХреНрд░реАрди рдХреЛ рд╣рд┐рд▓рд╛рдиреЗ - рдбреБрд▓рд╛рдиреЗ рд╡рд╛рд▓реЗ рдШрдмрд░рд╛рдиреЗ рдХрд╛ рдЕрдиреБрдХреВрд▓рди рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдЧрд╛ред рд▓реЗрдХрд┐рди рд╡рд╣рд╛рдВ, рдЬрд┐рддрдирд╛ рдЕрдзрд┐рдХ рд╕рдордп рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЙрддрдирд╛ рд╣реА рдЗрд╕реЗ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдпрд╣ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпреЛрдВред рдЗрд╕рд▓рд┐рдП рдпрд╣рд╛рдВ рдХреЗрд╡рд▓ рдЖрдо рд╕рд╣рдорддрд┐ рдХреА рддрд▓рд╛рд╢ рд░рд╣рддреА рд╣реИ рдФрд░ рдХрднреА-рдХрднреА рд▓реЙрдЧ рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХрд╛ рдЕрдкрдорд╛рди рд╣реЛрддрд╛ рд╣реИ:



рд╡рд╣ рдЪрд╛рд╣рддрд╛ рдерд╛, рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ, рдШрдмрд░рд╛рд╣рдЯ рдХреЛ рдареАрдХ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЖрдк рд╕рдордп рдЕрдВрддрд░рд╛рд▓ рдХреЛ рдмрд╣реБрдд рдЫреЛрдЯрд╛ рдХрд░рддреЗ рд╣реИрдВред рдЕрдм рдпрд╣ рдореЗрд░реА рдЧрд▓рддреА рд╣реИред

рдЕрдм рд╕рдм рдХреБрдЫ рд╡реИрд╕рд╛ рд╣реА рд╣реЛрдиреЗ рд▓рдЧрд╛ рд╣реИ рдЬреИрд╕рд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рд╡рд┐рд▓рдВрдм рдХреЛ рдПрдХ рд╕реЗрдХрдВрдб рд╕реЗ рдХрдо рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдереЛрдбрд╝рд╛ рдХрдо)ред

рд╡реАрдбрд┐рдпреЛ


рдирддреАрдЬрддрди, рд╣рдореЗрдВ рдПрдХ рдмрд╣реБрдд рдЫреЛрдЯрд╛ рдХрд╛рдо рдХреЛрдб рдорд┐рд▓рд╛

 import java.awt.*; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.SwingUtilities; import uk.co.caprica.vlcj.discovery.NativeDiscovery; import uk.co.caprica.vlcj.player.MediaPlayerFactory; import uk.co.caprica.vlcj.player.embedded.EmbeddedMediaPlayer; import uk.co.caprica.vlcj.player.embedded.videosurface.CanvasVideoSurface; public class BasicVideoPlayer { public final JFrame frame; public static String mrl; public static MediaPlayerFactory mpf; public static EmbeddedMediaPlayer MediaPlayer; public static CanvasVideoSurface videoSurface; public static Canvas canvas; public static void main(final String[] args) { new NativeDiscovery().discover(); mrl = "udp://@:40002"; SwingUtilities.invokeLater(new Runnable() { @Override public void run() { BasicVideoPlayer vp = new BasicVideoPlayer(); vp.start(mrl); } }); } public BasicVideoPlayer() { frame = new JFrame("My First Media Player"); frame.setBounds(200,100, 540, 340); frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); frame.addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent e) { System.out.println(e); MediaPlayer.release(); mpf.release(); System.exit(0); } }); JPanel contentPane = new JPanel(); contentPane.setLayout(new BorderLayout()); canvas = new Canvas(); String[] args = { "--video-filter", "rotate", "--rotate-angle", "270", "--demux=h264", "--clock-jitter=100", "--live-caching=100", "--network-caching=500", }; mpf = new MediaPlayerFactory(args); videoSurface = mpf.newVideoSurface(canvas); MediaPlayer = mpf.newEmbeddedMediaPlayer(); MediaPlayer.setVideoSurface(videoSurface); contentPane.add(canvas, BorderLayout.CENTER); frame.setContentPane(contentPane); frame.setVisible(true); } public void start(String mrl) { MediaPlayer.playMedia(mrl); } } 

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

accelerometers
gyros
рдкреНрд░рдХрд╛рд╢ рд╕реНрддрд░
рд╣рд╡рд╛ рдХрд╛ рджрдмрд╛рд╡
рдХрдореНрдкрд╛рд╕ рд░реАрдбрд┐рдВрдЧ
рддрд╛рдкрдорд╛рди
рдФрд░ рдирдореА рднреА

рдмрд╢рд░реНрддреЗ, рдХрд┐ рдпреЗ рд╕рднреА рд╕реЗрдВрд╕рд░ рдЖрдкрдХреЗ рд╕реНрдорд╛рд░реНрдЯрдлреЛрди рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реЛрдВред

рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд╣реЗрдбрд▓реИрдореНрдк рдЪрд╛рд▓реВ рдХрд░реЗрдВ! рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ! рдпрджрд┐ рдкреНрд░рдХрд╛рд╢ рдХрд╛ рд╕реНрддрд░ рдЧрд┐рд░рддрд╛ рд╣реИред


рд╢рд╛рдпрдж рд╣реА рдХрд┐рд╕реА рдХреЛ рдХреЛрдИ рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реЛ, рд▓реЗрдХрд┐рди рдЧрд┐рддреБрдм рдХреЗ рд▓рд┐рдВрдХ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ:

рдЧрд╛рдбрд╝реА рдХреЗ рд▓рд┐рдП
рд╕реНрдорд╛рд░реНрдЯрдлреЛрди рдХреЗ рд▓рд┐рдП

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


All Articles