您的位置:首页 > 移动开发 > Android开发

安卓万能播放器splayer使用心得

2014-11-20 11:31 204 查看
公司要求做一个安卓平台的播放器,因为考虑到兼容性问题,不能使用安卓默认的mediaplayer,本人有过一点播放器开发经验,但是没能力自己从头写一个播放器,在网上搜了一些播放器,发现了一个播放器,该播放器兼容性强,关键是接口简单,对于我这个安卓的初学者来说很容易入手。并且还有dlna的推送播放功能。

该播放器的地址在

http://git.oschina.net/splayer/SplayerAndroidSdk

https://coding.net/u/splayer/p/SplayerAndroidSdk/git

其中player.java是一个简单的播放器实现的例子

public class player extends Activity implements SurfaceHolder.Callback, OnTouchListener,OnGestureListener

{

  @Override

    public void onCreate(Bundle savedInstanceState)

   {

        player = creatMediaPlayer(); //创建一个player

                mediaPlayerSetDataSourceUrl(player, SAMPLE); // 设置播放的地址

   }

@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
screen_w = width;
screen_h = height;
dp.SetSurface(holder.getSurface());//设置surface
mediaPlayerSetSurface(player, holder.getSurface());//再设置surface,现在还不太理解为什么。
mediaPlayerPrepare(player);// prepare,应该和安卓的播放器差不多。
}

protected class playerCommandHandler extends Handler {
@Override
public void handleMessage(Message msg) {
int p = msg.arg1;
switch(msg.what)
{
case PLAYER_EVENT_PREPAREDONE:
meidaPlayerStart(p); //看来真的和安卓默认播放器流程差不多,这里就开始播放了
break;

}

其他的播放接口都在这个文件中有说明:

public native int creatMediaPlayer();

    /*

     * Set the uri to mediaplayer

     */
public native void mediaPlayerSetDataSourceUrl(int  mediaplayer, String url);

/*
* stop the mediaplayer
*/
public native void stopMediaPlayer(int mediaPlayer);

/*
* release the mediaplayer
*/
public native void releaseMediaPlayer(int mediaPlayer);

/*
* set the java surface to mediaplayer ,and the player will render the video to the surface 
*/
public native void mediaPlayerSetSurface(int mediaPlayer, Surface surface);

/*
* player will connect the uri and start to deal with the media,
* player will notify out if the dealing is done (PLAYER_EVENT_PREPAREDONE)or fail (PLAYER_EVENT_ERROR_NO_STREAM)
*/
public native void mediaPlayerPrepare(int mediaPlayer);

/*
*  start to play the media after PLAYER_EVENT_PREPAREDONE
*/
public native void meidaPlayerStart(int mediaPlayer);

/*
* pause the player
*/
public native void meidaPlayerPause(int mediaPlayer);

/*
* seek to time_us point
*/
public native void mediaPlayerSeek(int mediaPlayer, long time_ms);

/*
* Get the player status
*/
public native int mediaPlayerGetStatus(int mediaPlayer);

/*
* Get the play position
*/
public native long mediaPlayerGetPosition(int mediaPlayer);

/*
* Get the media duration
*/
public native long mediaPlayerGetDuration(int mediaPlayer);

这些都能看懂吧,我就不说了。

最后说下测试成果:

手机:mx3

播放测试,hls 播放成功

播放一个10M码率的蓝光ts,竟然不卡,流畅播放。

还有一个dmr之类的东西,目前我还没仔细玩,下次再写
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息