android - 无法将 MediaController 添加到 VLC Android SDK

标签 android media-player vlc libvlc mediacontroller

我尝试创建一个应用程序,允许用户在 Android 设备上观看直播视频。从我的小研究中,我发现 VLC Sdk 很酷,因为它支持更多协议(protocol)。从Tutorial on using vlc sdk获得的代码

我能够使实时观看应用程序正常工作,但问题是我似乎无法向视频添加控件(例如暂停、播放、搜索器等)。请我需要你的帮助。谢谢

使用的vlc sdk是1.9.8

最佳答案

试试这个:

public class Show_Array extends AppCompatActivity implements IVLCVout.Callback  {

    private TextView container_extension;
    private String stream_typee,stream_idd,container_extensionn ;
    private String SAMPLE_URL = "";
    public int mHeight;
    public int mWidth;
    private SurfaceView mVideoSurface = null;
    private FrameLayout sdk;
    private IVLCVout vlcVout;
    private LibVLC mLibVlc = null;
    private MediaPlayer mMediaPlayer = null;
    private int flag = 0;
    private ImageButton Resize;
    private Media media;
    private ArrayList<String> args;
    private SurfaceHolder mSurfaceHolderVideo;
    private MediaController controller;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
        setContentView(R.layout.show__array);
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
        //Referances
        Resize = findViewById(R.id.Resize);
        mVideoSurface =  findViewById(R.id.video_surface);


        stream_typee = getIntent().getExtras().getString("stream_type");
        stream_idd = getIntent().getExtras().getString("stream_id");
        container_extensionn = getIntent().getExtras().getString("container_extension");

        args = new ArrayList<>();
        args.add("-vvv");
        mLibVlc = new LibVLC(this, args);
        mMediaPlayer = new MediaPlayer(mLibVlc);
        vlcVout = mMediaPlayer.getVLCVout();
        sdk = findViewById(R.id.sdk);


        Resize_video();
        setup_url();

        controller = new MediaController(this);
        controller.setMediaPlayer(playerInterface);
        controller.setAnchorView(mVideoSurface);
        mVideoSurface.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                controller.show(10000);
            }
        });

    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        mMediaPlayer.release();
        mLibVlc.release();
    }

    void Resize_video()
    {
        DisplayMetrics displayMetrics = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
        mHeight = displayMetrics.heightPixels;
        mWidth = displayMetrics.widthPixels;
        Resize.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                flag+=1;
                int width = 1000;
                int height = 560;

                if(flag%2!=0) {

                    LinearLayout.LayoutParams myImageLayout = new LinearLayout.LayoutParams(width, height);
                    myImageLayout.gravity = Gravity.CENTER_HORIZONTAL | Gravity.CENTER_VERTICAL;
                    sdk.setLayoutParams(myImageLayout);
                    vlcVout.setWindowSize(width,height);

                }
                else
                {
                    LinearLayout.LayoutParams myImageLayout = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
                    myImageLayout.gravity = Gravity.CENTER_HORIZONTAL | Gravity.CENTER_VERTICAL;
                    sdk.setLayoutParams(myImageLayout);
                    vlcVout.setWindowSize(mWidth,mHeight);

                }
            }
        });
    }
    void setup_url()
    {
        //TextView
        container_extension = findViewById(R.id.URL);
        if (stream_typee.equals("live"))
        {
            SAMPLE_URL = "http://uautv.ru:2095/"+stream_typee+"/webserver/6tE@BzW73@sX/"+stream_idd+".ts";
            container_extension.setText( SAMPLE_URL);
        }else
        {
            SAMPLE_URL = "http://uautv.ru:2095/"+stream_typee+"/webserver/6tE@BzW73@sX/"+stream_idd+"."+container_extensionn;
            container_extension.setText( SAMPLE_URL);

        }
    }

    @Override
    protected void onStart() {
        super.onStart();
        vlcVout.setWindowSize(mWidth,mHeight);
        vlcVout.setVideoView(mVideoSurface);
        vlcVout.attachViews();
        mMediaPlayer.getVLCVout().addCallback(this);
        if(!SAMPLE_URL.isEmpty()) {
             media = new Media(mLibVlc, Uri.parse(SAMPLE_URL));
            mMediaPlayer.setMedia(media);
            media.release();
            mMediaPlayer.play();


        }else
        {
            Toast.makeText(getApplicationContext(),"URL EMPTY",Toast.LENGTH_LONG).show();
        }


    }

    @Override
    protected void onStop() {
        super.onStop();

        mMediaPlayer.stop();
        mMediaPlayer.getVLCVout().detachViews();
        mMediaPlayer.getVLCVout().removeCallback(this);


    }

    @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
    @Override
    public void onNewLayout(IVLCVout vlcVout, int width, int height, int visibleWidth, int visibleHeight, int sarNum, int sarDen)
    { }

    @Override
    public void onSurfacesCreated(IVLCVout vlcVout) {
    }

    @Override
    public void onSurfacesDestroyed(IVLCVout vlcVout) {
    }
    private MediaController.MediaPlayerControl playerInterface = new MediaController.MediaPlayerControl() {
        public int getBufferPercentage() {
            return 0;
        }

        public int getCurrentPosition() {
            float pos = mMediaPlayer.getPosition();
            return (int)(pos * getDuration());
        }

        public int getDuration() {
            return (int)mMediaPlayer.getLength();
        }

        public boolean isPlaying() {
            return mMediaPlayer.isPlaying();
        }

        public void pause() {
            mMediaPlayer.pause();
        }

        public void seekTo(int pos) {
            mMediaPlayer.setPosition((float)pos / getDuration());
        }

        public void start() {
            mMediaPlayer.play();
        }

        public boolean canPause() {
            return true;
        }

        public boolean canSeekBackward() {
            return true;
        }

        public boolean canSeekForward() {
            return true;
        }

        @Override
        public int getAudioSessionId() {
            return 0;
        }
    };
}

关于android - 无法将 MediaController 添加到 VLC Android SDK,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45386830/

相关文章:

java - 显示安卓证书

java - 如何在 Java 中使 CheckBox/EditText 对象成为全局对象

android - 在 Android Media Player 中重播音乐的问题

eclipse - JavaFX播放声音引发错误

android - 从上下文 Assets 中的 Uri 加载 MediaPlayer

MPMoviePlayerController 中没有扩展名的 HTTP 流

java - 使用 VLCJ 播放视频时不显示文件路径

Android 如何识别来自外部适配器的 Listview 按钮单击事件?

android - 自 Android Studio 4.2 以来,没有可调试的进程可见

compilation - 在 Mac OS 10.9 上编译 VLCKit