安卓万能播放器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之类的东西,目前我还没仔细玩,下次再写
该播放器的地址在
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之类的东西,目前我还没仔细玩,下次再写
相关文章推荐
- 安卓碎片使用心得
- 使用JADX进行安卓反编译的心得
- 安卓下使用sqlite心得
- 安卓开发腾讯X5第三库使用心得
- 安卓开发学习心得-------WebView的使用
- 安卓android网络框架之Retrofit个人使用心得
- showModalDialog和showModelessDialog使用心得
- CreateProcess使用心得
- C# Builder 使用心得
- STL的心得(2)--如何使用安装STLPort
- Visual Fortran 中使用Matlab引擎心得
- 谈谈asp.net项目中对Excel报表的使用心得
- DataTable.Select使用小心得
- Google使用心得之寻找中文版
- JSTL使用心得
- MOTO V860 彩E使用心得 (ZT)
- 使用VC和MATCOM结合开发应用程序心得笔记
- C# Builder 使用心得
- Process使用的一点心得
- Transform 使用的一点心得。