Android Vlc播放h264编码的视频解决方案

      项目总的设计是:摄像头采用的分别是思科,海康威视,宇视科技,大华等等的有名商家,摄像头产生的多路视频流经过Nvr处理后的h264格式视频,通过RTSP协议传输给前端播放。

      原生提供的播放器支持的格式少的可怜,最省事功能也最强大的节操播放器本来是播放视频的首选,但是注意github已经写明的第二行:

能播放什么格式的视频依赖的这三个并不支持h264, 所以选择只剩下解码格式支持最全面的Vitamio和VLC。这两者中界面支持更友好的Vitamio经过实测解码视频卡顿现象比较明显,而Vlc明显就播放起来很流畅,所以用Vlc作为播放h264的视频播放器。引入lib很简单,将libvlc-3.0.0的aar包放到app的libs下即可,网上教程很多了这个不必多说

Github有一个用Vlc二次开发的播放器,对于界面和功能都有了很好的支持:https://github.com/Shirlman/YiPlayer,在这个Demo的基础上将提供的VideoView,播放控制的xml文件这些引入,作为播放的控件,接下来再按照需求接着开发就能更有效率,列几个我经历过的耗时问题,比如:

1.当播放完了之后,接着播放新的怎么办?

解: 正常写播放逻辑,改写引入的那个VideoView,在handler收到播放完成消息后,添加一行调用detachViews(),

                    case MSG_COMPLETION:
                    if(mOnCompletionListener != null) {
                        mOnCompletionListener.onCompletion();
                        //add
                        mMediaPlayer.getVLCVout().detachViews();
                    }

                    break;

2.想做播放前的视频首帧缩略图效果怎么办?

解:我没找到提供的这个的方法,最后让视频先播放极短的时间,比如1秒,然后暂停在那个画面上当缩略图

3. Nvr过来的rtsp流不能获取视频总时长和当前的播放进度怎么办?

解:总时长因为项目的需求是android端发起获取的请求,获取从当天XX--XX的一段时间视频,所以总时长可以自己通过时间戳计算,播放进度则是自己通过Timer定时器粗略计算的,利用Timer绘制视频播放时候的进度条

4. 播放的视频并不能适配播放器的屏幕

解:https://blog.csdn.net/Crystal_xing/article/details/83788609,核心代码3行

猜你喜欢

转载自blog.csdn.net/Crystal_xing/article/details/84065601