[OpenGL]从零开始写一个Android平台下的全景视频播放器——5.8 使用MediaPlayer播放在线视频

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)