VLC VideoLAN

作者: 码脑 | 来源:发表于2016-07-17 11:41 被阅读1258次

    1. 基于VLC的视频播放器

    2. 集成libVLC

    2.1 创建基础工程

    2.2 音频播放

    2.3 视频播放

    3. 分平台过滤库

    4. Demo

    5. 一个基于VLC的优秀音乐播放器

    6. 参考


    1. 基于VLC的视频播放器

    VLC media player source code

    VLC is a free and open source cross-platform multimedia player and framework that plays most multimedia files as well as DVDs, Audio CDs, VCDs, and various streaming protocols.

    2. 集成libVLC

    这里介绍如何使用,所以就不重新自己编译了。
    想自己裁剪的看这里

    dependencies {
        compile "de.mrmaffen:vlc-android-sdk:1.9.8"
    }
    

    2.2 音频播放

    播放音乐相对是比较简单的,基本上三部曲就可以完成:

    1. 创建VLC
    2. 创建Media(这里决定媒体的来源)
    3. MediaPlayer 设置Media和播放
     ……
    libvlc = new LibVLC(options);
    mMediaPlayer = new MediaPlayer(libvlc);
    
    Media m = new Media(libvlc , path);
    
    // Tell the media player to play the new Media.
    mMediaPlayer.setMedia(m);
    
    // Finally, play it!
    mMediaPlayer.play();
    
    

    2.3 视频播放

    和音频比较,视频要多几步

    • 实现IVLCVout的几个接口:
      • onNewLayout
      • onSurfacesCreated
      • onSurfacesDestroyed
      • onHardwareAccelerationError
    • 实现 MediaPlayer 的Event 接口
    • 最后设置MediaPlayer 的OUTPUT

    这里搜了一个H5的测试片源:http://www.w3school.com.cn/i/movie.ogg

    创建播放器实例:

    
    // Create media player
    mMediaPlayer = new MediaPlayer(libvlc);
    mMediaPlayer.setEventListener(mPlayerListener);
    
    // Set up video output
    final IVLCVout vout = mMediaPlayer.getVLCVout();
    vout.setVideoView(mSurface);
    
    //vout.setSubtitlesView(mSurfaceSubtitles);
    vout.addCallback(this);
    vout.attachViews();
    
    Media m = new Media(libvlc, uri);//uri=Uri.parse("http://www.w3school.com.cn/i/movie.ogg")
    mMediaPlayer.setMedia(m);
    mMediaPlayer.play();
    
    

    MediaPlayer.Event 大概有十几个状态,我们用到常用的
    看下event接口实现:

    
    @Override
    public void onEvent(MediaPlayer.Event event) {    
            VideoActivity player = mOwner.get();    
            switch (event.type) {        
                  case MediaPlayer.Event.EndReached:            
                        Log.d(TAG, "MediaPlayerEndReached");            
                        player.releasePlayer();            
                        break;        
                  case MediaPlayer.Event.Playing:        
                  case MediaPlayer.Event.Paused:        
                  case MediaPlayer.Event.Stopped:        
                  default:            
                        break;    
      }
    
    

    来看下output的设置:

    // Set up video output
    final IVLCVout vout = mMediaPlayer.getVLCVout();
    vout.setVideoView(mSurface);
    
    //vout.setSubtitlesView(mSurfaceSubtitles);
    vout.addCallback(this);
    vout.attachViews();
    
    

    基本的播放功能介绍完了,生成一个Apk看看什么样子的。
    注意到没,这个APK的尺寸还是蛮大的,才这么点功能就要50M了,感觉有必要瘦瘦身。

    3. 分平台过滤库

    在build.gradle里面添加如下配置

    productFlavors {    
            armv7a {        
                    ndk {            
                            abiFilter "armeabi-v7a"       
                     }    
            }    
    
            armv8a {        
                    ndk {            
                            abiFilter "arm64-v8a"       
                   }    
            }    
    
            mips {        
                    ndk {            
                            abiFilter "mips"        
                    }    
            }    
    
            x86 {        
                    ndk {           
                            abiFilter "x86"        
                  }    
            }    
    
          x86_64 {        
                  ndk {            
                          abiFilter "x86_64"        
                }    
            }
    }
    
    

    更多

    然后在 build variant下配置当前的平台
    我这里因为是PC模拟,所以设置x86Debug

    Paste_Image.png

    如果是手机端,应该armv7a 。

    sync一下,重新编译,看看结果。我这里是:20M左右,比刚才的50多M是不是小了很多?
    当然,如果你对这个尺寸还不满意,就得走下重现编译的步骤了,再裁剪掉一些不常用的功能,或许可以再次减小尺寸。

    4. Demo

    GIF.gif

    5. 一个基于VLC的优秀音乐播放器

    基于VLC的一个音乐播放器

    6. 参考

    演示代码下载
    官方Demo
    另一个Demo
    libVLC

    相关文章

      网友评论

      本文标题:VLC VideoLAN

      本文链接:https://www.haomeiwen.com/subject/clfjjttx.html