基于VLC的视频播放器

移动开发 Android
最近在研究视频播放的功能,之前是使用VideoView。在网上看了一下,感觉不是很好,支持的格式比较少,现在网络视频的格式各种各样,感觉用VideoView播放起来局限性很大。

最近在研究视频播放的功能,之前是使用VideoView。在网上看了一下,感觉不是很好,支持的格式比较少,现在网络视频的格式各种各样,感觉用VideoView播放起来局限性很大。

找到了一个比较合适的播放器,Github地址为https://github.com/xiaomo/AndroidPlayerLibrary 。这个播放器是基于vlc这个软件,在将我们的demo导入到Eclipse中之后,可以发现,这样一个libvlc文件夹。

在Media这个类中我们可以发现,这些是支持的格式还是比较多的。

String[] video_extensions = { 
                ".3g2"".3gp"".3gp2"".3gpp"".amv"".asf"".avi"".divx"".drc"".dv"
                ".f4v"".flv"".gvi"".gxf"".ismv"".iso"".m1v"".m2v"".m2t"".m2ts"
                ".m4v"".mkv"".mov"".mp2"".mp2v"".mp4"".mp4v"".mpe"".mpeg"
                ".mpeg1"".mpeg2"".mpeg4"".mpg"".mpv2"".mts"".mtv"".mxf"".mxg"
                ".nsv"".nut"".nuv"".ogm"".ogv"".ogx"".ps"".rec"".rm"".rmvb"
                ".tod"".ts"".tts"".vob"".vro"".webm"".wm"".wmv"".wtv"".xesc" }; 
 
String[] audio_extensions = { 
                ".3ga"".a52"".aac"".ac3"".adt"".adts"".aif"".aifc"".aiff"".amr"
                ".aob"".ape"".awb"".caf"".dts"".flac"".it"".m4a"".m4b"".m4p"
                ".mid"".mka"".mlp"".mod"".mpa"".mp1"".mp2"".mp3"".mpc"".mpga"
                ".oga"".ogg"".oma"".opus"".ra"".ram"".rmi"".s3m"".spx"".tta"
                ".voc"".vqf"".w64"".wav"".wma"".wv"".xa"".xm" }; 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.

在这个例子中它自己写了一个PlayerActivity和PlayerView,在PlayerView中实现了libvlc中的IVideoPlayer接口

在PlayerActivity中实现PlayerView类,从而进行界面和流程的控制。

protected void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        mUrl = getIntent().getStringExtra("url"); 
        if (TextUtils.isEmpty(mUrl)) { 
            Toast.makeText(this"error:no url in intent!", Toast.LENGTH_SHORT).show(); 
            return
        } 
        requestWindowFeature(Window.FEATURE_NO_TITLE); 
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); 
 
        setContentView(R.layout.activity_player); 
 
        mHandler = new Handler(this); 
 
        tvTitle = (TextView) findViewById(R.id.tv_title); 
        tvTime = (TextView) findViewById(R.id.tv_time); 
        tvLength = (TextView) findViewById(R.id.tv_length); 
        sbVideo = (SeekBar) findViewById(R.id.sb_video); 
        sbVideo.setOnSeekBarChangeListener(this); 
        ibLock = (ImageButton) findViewById(R.id.ib_lock); 
        ibLock.setOnClickListener(this); 
        ibBackward = (ImageButton) findViewById(R.id.ib_backward); 
        ibBackward.setOnClickListener(this); 
        ibPlay = (ImageButton) findViewById(R.id.ib_play); 
        ibPlay.setOnClickListener(this); 
        ibFarward = (ImageButton) findViewById(R.id.ib_forward); 
        ibFarward.setOnClickListener(this); 
        ibSize = (ImageButton) findViewById(R.id.ib_size); 
        ibSize.setOnClickListener(this); 
 
        llOverlay = findViewById(R.id.ll_overlay); 
        rlOverlayTitle = findViewById(R.id.rl_title); 
 
        rlLoading = findViewById(R.id.rl_loading); 
        tvBuffer = (TextView) findViewById(R.id.tv_buffer); 
        //使用步骤 
        //***步 :通过findViewById或者new PlayerView()得到mPlayerView对象 
        //mPlayerView= new PlayerView(PlayerActivity.this); 
        mPlayerView = (PlayerView) findViewById(R.id.pv_video); 
 
        //第二步:设置参数,毫秒为单位 
        mPlayerView.setNetWorkCache(20000); 
 
        //第三步:初始化播放器 
        mPlayerView.initPlayer(mUrl); 
 
        //第四步:设置事件监听,监听缓冲进度等 
        mPlayerView.setOnChangeListener(this); 
 
        //第五步:开始播放 
        mPlayerView.start(); 
 
        //init view 
        tvTitle.setText(mUrl); 
        showLoading(); 
        hideOverlay(); 
 
    } 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.

关于如何使用这个类库

库两种使用方式:

***种,直接new一个PlayerView或者在布局文件的xml里面嵌入view。

第二种,跳转到一个写好的播放页面PlayerActivity (本地文件参数格式:file:///sacard/test.rmvb。)

这里我选择了第二种方法

startActivity(new Intent(this, PlayerActivity.class).putExtra("url", items.get(position))); 
  • 1.

通过一个选择列表的形式,点击每一项,传递一个url到PlayerActivity

  • 1.

 选择列表中的1.2JDK下载.mp4

横竖屏的切换也是没有问题的。

责任编辑:chenqingxiang 来源: 博客园
相关推荐

2022-11-12 08:26:04

VLC视频播放器裁剪视频

2023-08-26 19:07:40

VLC旋转视频

2022-08-16 17:37:06

视频播放器鸿蒙

2011-07-20 16:21:20

iPhone 视频 播放器

2020-01-13 14:00:06

技巧VLCLinux

2022-06-21 14:41:38

播放器适配西瓜视频

2021-10-21 16:00:07

鸿蒙HarmonyOS应用

2021-10-19 14:27:07

鸿蒙HarmonyOS应用

2018-05-25 14:37:58

2012-06-04 13:44:08

2023-03-28 09:44:02

开发应用鸿蒙

2023-03-29 09:37:49

视频播放器应用鸿蒙

2023-03-28 09:38:34

开发应用鸿蒙

2023-03-06 16:20:08

视频播放器VLC

2011-06-24 10:21:11

Qt phonon 多媒体

2011-06-13 09:33:04

2021-10-18 14:57:25

鸿蒙HarmonyOS应用

2012-04-05 13:19:06

WEBHTML5

2011-06-10 13:42:50

QT mplayer 播放器

2023-03-29 09:32:15

视频播放器应用鸿蒙
点赞
收藏

51CTO技术栈公众号