[OpenGL]从零开始写一个Android平台下的全景视频播放器——5.8 使用MediaPlayer播放在线视频
2017-01-29 20:12
676 查看
Github项目地址
为了方便没有准备好梯子的同学,我把项目在CSDN上打包下载,不过不会继续更新(保留在初始版本)
回到目录
MediaPlayer是可以播放在线视频的,其解码能力取决于手机本身
如果有更多格式或更加通用的解码需求,可以考虑使用其他的解码器。例如FFMpeg就很好,可以使用FFMpeg的Java包装版本——ijkplayer
上面的是在线视频,看起来差不多吧?如果用ijk调用方法类似但是不相同
调用方法如下(详见项目源代码):
可能有朋友已经发现,我花了大量的篇幅在讲解原理上,而具体实现的部分则比较简略甚至一笔带过。原因想必大家也都能理解——我希望我们都不要止步于“不求甚解”的阶段。“重复造轮子”固然不值得提倡,但是有些时候,“造轮子”的过程就是学习的过程。
还有一个比较重要的原因就是具体实现每个人本来就各有不同。其实现在回想一下,整个过程都不复杂,我们还大量借助了Android SDK提供的功能,工作量降低了不少呢,不是么?
我们花费大量时间去理解原理并且用OpenGL从零起步撸出了一个全景视频播放器,但是如果使用Unity3D等工具,播放一个全景视频可能只需要10分钟不到(改变culling方向)。为什么我们要做这些?这整个过程又有什么意义?
每个人应该都会有不同的答案…
至于我,我想用这句话来回答——Because we can!
Github项目地址
回到目录
为了方便没有准备好梯子的同学,我把项目在CSDN上打包下载,不过不会继续更新(保留在初始版本)
回到目录
MediaPlayer是可以播放在线视频的,其解码能力取决于手机本身
如果有更多格式或更加通用的解码需求,可以考虑使用其他的解码器。例如FFMpeg就很好,可以使用FFMpeg的Java包装版本——ijkplayer
播放在线视频
播放在线视频的方法和本地视频基本一致,如果是本地视频,raw或者assets或者sdcard中的都是可以的,在线视频就说不好了public void openRemoteFile(String path){ try{ mMediaPlayer.setDataSource(path); }catch (IOException e){ e.printStackTrace(); } } public void setMediaPlayerFromUri(Uri uri){ try{ mMediaPlayer.setDataSource(statusHelper.getContext(),uri); }catch (IOException e){ e.printStackTrace(); } mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); mMediaPlayer.setLooping(true); }
上面的是在线视频,看起来差不多吧?如果用ijk调用方法类似但是不相同
调用方法如下(详见项目源代码):
if (uri.toString().startsWith("http")) mPnoVideoPlayer.openRemoteFile(uri.toString()); else mPnoVideoPlayer.setMediaPlayerFromUri(uri);
这才是预览效果(感谢CSDN上传限制带来的渣画质)
写在最后
到这里为止我们已经实现了主流全景视频播放器的所有功能,当然,还有很多不够尽善尽美的地方。可能有朋友已经发现,我花了大量的篇幅在讲解原理上,而具体实现的部分则比较简略甚至一笔带过。原因想必大家也都能理解——我希望我们都不要止步于“不求甚解”的阶段。“重复造轮子”固然不值得提倡,但是有些时候,“造轮子”的过程就是学习的过程。
还有一个比较重要的原因就是具体实现每个人本来就各有不同。其实现在回想一下,整个过程都不复杂,我们还大量借助了Android SDK提供的功能,工作量降低了不少呢,不是么?
我们花费大量时间去理解原理并且用OpenGL从零起步撸出了一个全景视频播放器,但是如果使用Unity3D等工具,播放一个全景视频可能只需要10分钟不到(改变culling方向)。为什么我们要做这些?这整个过程又有什么意义?
每个人应该都会有不同的答案…
至于我,我想用这句话来回答——Because we can!
Github项目地址
回到目录
相关文章推荐
- [OpenGL]从零开始写一个Android平台下的全景视频播放器——2.1 使用GLSurfaceView和MediaPlayer播放一个平面视频(上)
- [OpenGL]从零开始写一个Android平台下的全景视频播放器——2.3 使用GLSurfaceView和MediaPlayer播放一个平面视频(下)
- [OpenGL]从零开始写一个Android平台下的全景视频播放器——2.2 使用GLSurfaceView和MediaPlayer播放一个平面视频(中)
- [OpenGL]从零开始写一个Android平台下的全景视频播放器——2.2 使用GLSurfaceView和MediaPlayer播放一个平面视频(中)
- [OpenGL]从零开始写一个Android平台下的全景视频播放器——2.1 使用GLSurfaceView和MediaPlayer播放一个平面视频(上)
- [OpenGL]从零开始写一个Android平台下的全景视频播放器——2.3 使用GLSurfaceView和MediaPlayer播放一个平面视频(下)
- [OpenGL]从零开始写一个Android平台下的全景视频播放器——5.1 使用OpenGL把全景视频贴到球上
- [OpenGL]从零开始写一个Android平台下的全景视频播放器——5.2 使用旋转矢量传感器改变球的朝向
- [OpenGL]从零开始写一个Android平台下的全景视频播放器——5.7 使用OpenGL ES接口保存屏幕截图
- [OpenGL]从零开始写一个Android平台下的全景视频播放器——3.2 使用OpenGL ES 2.0绘制一个球
- [OpenGL]从零开始写一个Android平台下的全景视频播放器——5.5 响应用户的多指触控事件(缩放)
- [OpenGL]从零开始写一个Android平台下的全景视频播放器——4.1 传感器类型以及数据收集方法
- [OpenGL]从零开始写一个Android平台下的全景视频播放器——5.3 如何实现分屏效果
- [OpenGL]从零开始写一个Android平台下的全景视频播放器——1.2 用OpenGL ES 2.0画一个三角形
- [OpenGL]从零开始写一个Android平台下的全景视频播放器——目录
- [OpenGL]从零开始写一个Android平台下的全景视频播放器——1.1 OpenGL ES 2.0基础知识
- [OpenGL]从零开始写一个Android平台下的全景视频播放器——目录
- [OpenGL]从零开始写一个Android平台下的全景视频播放器——5.4 响应用户的单指触控事件(平移)
- [OpenGL]从零开始写一个Android平台下的全景视频播放器——4.2 屏幕朝向,手机姿态的相关概念
- [OpenGL]从零开始写一个Android平台下的全景视频播放器——1.4 用OpenGL ES 2.0显示一张图片(下)