无法将MediaController添加到VLC Android SDK

问题描述 投票:1回答:2

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

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

使用的vlc sdk是1.9.8

android media-player vlc libvlc mediacontroller
2个回答
0
投票

我也在研究这个问题。你需要自己实现这个。

只需在视频表面上使用FrameLayoutoverlay视图(按钮?)的每个功能。然后调用VLC MediaPlayer play() stop() pause()等。

如果你真的想要深入了解,那么获取主人的来源,看看它是如何完成的:

git clone https://code.videolan.org/videolan/vlc-android.git


0
投票

试试这个:

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;
        }
    };
}
© www.soinside.com 2019 - 2024. All rights reserved.