手机影音

17.音乐播放器相关的开源介绍

1.频谱波形图,频谱柱状图,通知栏控制音乐,频谱效果................

 

18.网络音乐播放器,网络收音机

 1.网络音乐播放器

public class MainActivity extends Activity implements OnPreparedListener {

	private MediaPlayer mMediaPlayer;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
	}

	public void click(View v) {
		try {
			if (mMediaPlayer == null) {
				mMediaPlayer = new MediaPlayer();
			}
			mMediaPlayer.reset();
//			mMediaPlayer.setDataSource("http://192.168.1.100:8080/xpg.mp3");
			mMediaPlayer.setDataSource("mms://mediasrv2.iptv.xmg.com.cn/yinyue");
			mMediaPlayer.prepareAsync();//网络音乐.应该异步准备
			mMediaPlayer.setOnPreparedListener(this);
		} catch (IllegalArgumentException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	@Override
	public void onPrepared(MediaPlayer mp) {//如果使用prepareAsync,应该把start()方法放到这个地方
		Toast.makeText(getApplicationContext(), "准备好了", 0).show();
		mMediaPlayer.start();
	}

	@Override
	protected void onDestroy() {
		if (mMediaPlayer != null) {
			mMediaPlayer.release();
			mMediaPlayer = null;
		}
		super.onDestroy();
	}
}


2.收音机

(1)FM:调频收音机-->频道-->频段
(2)网络收音机-->频道-->url
(3)使用的是mms串流媒体协议,android sdk不支持
(4)开源->FFMpeg支持-->开发周期长,开发难度大
(5)开放平台(第三方)-->api-->开发者

 

 

19.vitamio介绍

1.博客介绍:http://www.cnblogs.com/over140/archive/2012/04/26/2471060.html

   官网:http://www.yixia.com/

2.支持主流的视音频格式:mp3/mp4/mkv/avi/3gp/rmvb/mov/flv等

3. 支持功能

 (1)当然最重要的是播放功能,含播放控制(播放、暂停,声音、亮度调整等)

 (2)可以扫描SDcard,用列表展现出来,可以搜索

 (3)可以播放网络视音频(http、rtsp、mms)

4.Vitamio是一个支持所有Android设备的多媒体框架。Vitamio与Android默认的MediaPlayer工作方式相似,但包含更加强大的功能!(注意:Vitamio商业化后个人免费、公司收费)

 

 

20.videoview回忆,vitamiodemo运行查看

1.videoview:Android自带控件,多媒体播放器

2.videoview

(1)本地:支持3gp ,mp4,avi(支持播放出声音)
(2)网络:支持3gp ,mp4

3.videoview

public class MainActivity extends Activity implements OnPreparedListener, OnErrorListener, OnCompletionListener {

	private VideoView mVv;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		//1.实例化videoView
		mVv = (VideoView) findViewById(R.id.vv);
		//设置相关的监听
		mVv.setOnPreparedListener(this);
		mVv.setOnErrorListener(this);
		mVv.setOnCompletionListener(this);
		/**
		//1.flv
		//2.3gp
		//3.avi
		//4.rmvb
		//5.mkv
		//storage/emulated/0/Download/5.mkv
		 */
		//2.设置视频的地址
		//		mVv.setVideoPath("/storage/emulated/0/Download/video_test.mp4");
		mVv.setVideoPath("http://192.168.1.100:8080/1.mp4");
//		mVv.setVideoPath("http://192.168.1.100:8080/2.3gp");
		//		mVv.setVideoURI(Uri.parse("http://192.168.1.100:8080/2.3gp"));

		//3.设置控制条
		mVv.setMediaController(new MediaController(this));
		//4.开始播放
		mVv.start();

	}

	@Override
	public void onCompletion(MediaPlayer mp) {
		// TODO
		Toast.makeText(getApplicationContext(), "播放完了", 0).show();

	}

	@Override
	public boolean onError(MediaPlayer mp, int what, int extra) {
		Toast.makeText(getApplicationContext(), "资源有问题", 0).show();
		return false;
	}

	@Override
	public void onPrepared(MediaPlayer mp) {
		Toast.makeText(getApplicationContext(), "准备好了", 0).show();
	}

}


4.vitamioDemo

(1)支持格式

public class MainActivity extends Activity {

	private VideoView vvv;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		if (!LibsChecker.checkVitamioLibs(this))
			return;
		init();
	}

	private void init() {
		vvv = (VideoView) findViewById(R.id.vvv);
		System.out.println(vvv == null);
		vvv.setMediaController(new MediaController(this));
		/**
		 * //1.flv
			//2.3gp
			3.avi
			//4.rmvb
			//5.mkv
		 */
		
		
		
		
		
		
		
		
		
		//################设置视频地址##############################
		/**---------------本地视频---------------**/
//		vvv.setVideoPath("/storage/emulated/0/Download/video_test.mp4");//本地地址播放 支持mp4
//				vvv.setVideoPath("/storage/emulated/0/Download/2.3gp");			//本地地址播放  支持3gp
//				vvv.setVideoPath("/storage/emulated/0/Download/3.avi");// 可以播放声音.但是没有视频
//				vvv.setVideoPath("/storage/emulated/0/Download/4.rmvb");// 可以播放声音.但是没有视频
				vvv.setVideoPath("/storage/emulated/0/Download/5.mkv");//

		//常规格式
		/**---------------网络视频---------------**/

		//		vvv.setVideoPath("http://192.168.1.100:8080/mp4.mp4");//网络地址 支持网络的mp4
		//		vvv.setVideoPath("http://192.168.1.100:8080/2.3gp");  //网络地址 支持网络的3gp
		//				vvv.setVideoPath("http://192.168.1.100:8080/flv.flv");//网络地址 支持网络的3gp
		//				vvv.setVideoPath("http://192.168.1.100:8080/3.avi");  //网络地址 支持网络的avi
		//				vvv.setVideoPath("http://192.168.1.100:8080/4.rmvb"); //网络地址 支持网络的rmvb
		//		vvv.setVideoPath("http://192.168.1.100:8080/5.mkv"); //网络地址 支持网络的mkv

		//对流媒体支持
				
//				vvv.setVideoPath("mms://mediasrv2.iptv.xmg.com.cn/yinyue");//支持mms流媒体协议-->收音机	
//				vvv.setVideoPath("http://live.3gv.ifeng.com/zixun.m3u8");//支持hls协议-->在线直播-->凤凰卫视
				vvv.setVideoPath("rtsp://218.204.223.237:554/live/1/66251FC11353191F/e7ooqwcfbqjoo80j.sdp");//支持rtsp协议-->实时流媒体传输协议-->监控
		//		vvv.setVideoPath("rtsp://xgrammyawardsx.is.livestream-api.com/livestreamiphone/grammyawards");//支持rtsp协议-->实时流媒体传输协议-->监控
		//		vvv.setVideoPath("http://m.livestream.com");//支持rtsp协议-->实时流媒体传输协议-->监控

		//http://dl76.80s.la:920/1406/筷子兄弟小苹果/筷子兄弟小苹果.mp4
		
		
		//################设置视频地址##############################
		vvv.start();
		vvv.setOnPreparedListener(new OnPreparedListener() {

			@Override
			public void onPrepared(MediaPlayer mp) {
				Toast.makeText(getApplicationContext(), "准备好了", 0).show();
			}
		});

		//vvv.setVideoURI(Uri.parse("http://f5.r.56.com/f5.c186.56.com/flvdownload/0/2/sc_141249584035hd_clear.flv?v=1&t=W1ho-pj4TBZ04fA_snju0w&r=5745&e=1414389696&tt=379&sz=26349090&vid=128255495"));
		//		vvv.setVideoURI(Uri.parse("http://www.56.com/u82/v_MTI4MjU1NDk1.html?ptag=vsogou"));
		//vvv.setVideoURI(Uri.parse("http://live.3gv.ifeng.com/zixun.m3u8"));
		//vvv.setMediaController(new MediaController(this));
		/*vvv.requestFocus();
		vvv.setOnPreparedListener(new OnPreparedListener() {		
			@Override
			public void onPrepared(MediaPlayer mp) {
				//vvv.start(); 
				//mp.start();
				
			}
		});*/

	}

}


 

21.vitamio的videoView集成

1.下载lib包.demo:` https://github.com/yixia/VitamioBundle

2.新建工程,引入lib包

3. 是否修改androidmanifest.xml 
 (1). 权限

   <uses-permission android:name="android.permission.INTERNET" />
   
 (2). 添加activity

   <!-- vitamio add -->
          <activity
            android:name="io.vov.vitamio.activity.InitActivity"
            android:configChanges="orientation|screenSize|smallestScreenSize|keyboard|keyboardHidden|navigation"
            android:launchMode="singleTop"
            android:theme="@android:style/Theme.NoTitleBar"
            android:windowSoftInputMode="stateAlwaysHidden" />

4.代码的集成

(1)布局

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity" >

    <io.vov.vitamio.widget.VideoView
        android:id="@+id/vitamio_vv"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</RelativeLayout>


(2)MainActivity.java

public class MainActivity extends Activity implements OnPreparedListener, OnErrorListener, OnCompletionListener {

	private VideoView mVitamio_vv;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		//使用vitamio需要初始化引擎,引擎的检查
		/**---------------需要注意 begin---------------**/
		if (!LibsChecker.checkVitamioLibs(this))
			return;
		/**---------------需要注意 end---------------**/

		mVitamio_vv = (VideoView) findViewById(R.id.vitamio_vv);
		/**---------------设置监听---------------**/
		mVitamio_vv.setOnPreparedListener(this);
		mVitamio_vv.setOnErrorListener(this);
		mVitamio_vv.setOnCompletionListener(this);
		//设置路径
		//本地视频
		//网络视频
		//流媒体
		mVitamio_vv.setVideoPath("storage/emulated/0/Download/5.mkv");
		//设置控制条
		mVitamio_vv.setMediaController(new MediaController(this));
		//开始播放
		mVitamio_vv.start();
	}

	@Override
	public void onCompletion(MediaPlayer mp) {
		// TODO
		Toast.makeText(getApplicationContext(), "播放完了", 0).show();
	}

	@Override
	public boolean onError(MediaPlayer mp, int what, int extra) {
		Toast.makeText(getApplicationContext(), "资源有问题", 0).show();
		// TODO
		return false;
	}

	@Override
	public void onPrepared(MediaPlayer mp) {
		Toast.makeText(getApplicationContext(), "准备好了", 0).show();
		// TODO

	}

}


 

22. vitamio的mediaplay的集成

1.相关配置见21.

2.MainActivity.java

public class MainActivity extends Activity implements OnErrorListener, OnPreparedListener, OnCompletionListener {

	private MediaPlayer mMediaPlayer;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		//使用vitamio需要初始化引擎,引擎的检查
		/**---------------需要注意 begin---------------**/
		if (!LibsChecker.checkVitamioLibs(this))
			return;
		/**---------------需要注意 end---------------**/

	}

	public void click(View v) {
		try {
			mMediaPlayer = new MediaPlayer(this);
			mMediaPlayer.setOnErrorListener(this);
			mMediaPlayer.setOnPreparedListener(this);
			mMediaPlayer.setOnCompletionListener(this);
			mMediaPlayer.reset();
			mMediaPlayer.setDataSource("mms://mediasrv2.iptv.xmg.com.cn/yinyue");
			mMediaPlayer.prepareAsync();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}

	@Override
	public void onCompletion(MediaPlayer mp) {
		Toast.makeText(getApplicationContext(), "播放完了", 0).show();
	}

	@Override
	public void onPrepared(MediaPlayer mp) {
		Toast.makeText(getApplicationContext(), "准备好了", 0).show();
		mMediaPlayer.start();

	}

	@Override
	public boolean onError(MediaPlayer mp, int what, int extra) {
		Toast.makeText(getApplicationContext(), "资源有问题", 0).show();
		// TODO
		return true;
	}

	@Override
	protected void onDestroy() {
		if (mMediaPlayer != null) {
			mMediaPlayer.release();
			mMediaPlayer = null;
		}
		super.onDestroy();
	}

}


 

22.百度媒体云介绍

1.百度媒体云

 

2.也可以单独作为播放器使用

 

23.百度媒体云运行demo总结

1.介绍:http://developer.baidu.com/cloud/media,或者直接百度`百度媒体云`
2. 下载: http://developer.baidu.com/wiki/index.php?title=docs/cplat/media/video/sdk

3.集成方式

(1) 共享播放引擎方案:如果你的手机里面有了播放引擎就直接相互使用.如果没有,对其进行下载
     1. 优点:工程大小比较下;
     2. 缺点:如果用户手机之前没有安装播放引擎.然用户去安装引擎,用户体验差,很多用户都不接受
(2). Jar+so动态库方案:在工程里面直接集成jar+so动态库
     1. 优点:不用管手机里面是否有播放引擎
     2. 缺点:那么工程会大6m左右;

4.百度媒体云运行demo总结
(1)本地:支持所有格式
(2)网络:支持所有格式
(3)流媒体:支持mms rtsp支持   m3u8支持

 

24.媒体云的集成_共享播放引擎的方式

1. 修改AndroidManifest.xml文件-->添加activity或者添加权限

    包名需要自己修改

<!-- 百度媒体云.播放视频需要的activity -->
	        <activity
			android:name="com.baidu.cyberplayersdksample1.VideoViewPlayingActivity"
            android:configChanges="keyboardHidden|orientation"
            android:exported="true"
            android:label="PlayingActivity"
            android:screenOrientation="landscape"
            android:theme="@android:style/Theme.NoTitleBar.Fullscreen" >
            <intent-filter>
                <action android:name="android.intent.action.VIEW" />

                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.BROWSABLE" />
            </intent-filter>
	        </activity>

			 <uses-permission android:name="android.permission.INTERNET" />
		    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
		    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
		    <uses-permission android:name="android.permission.WRITE_SETTINGS" />
		    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
		    <uses-permission android:name="android.permission.WAKE_LOCK" />


2. 添加`Baidu_CyberPlayer_SDK_Android.jar`
3. 写代码-->参考demo

 (1)controllerplaying.xml-------------必须的布局,直接复制用

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/root"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="horizontal">

    <RelativeLayout
        android:id="@+id/view_holder"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true" >      
    </RelativeLayout>
 	
    <LinearLayout        
        android:id="@+id/controller_holder"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:orientation="vertical" >
    </LinearLayout>
</RelativeLayout>


(2)VideoViewPlayingActivity.java-------必须的类,直接复制用

 

package com.example.badiut5demo59;

import android.app.Activity;
import android.content.Context;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.os.PowerManager;
import android.os.PowerManager.WakeLock;
import android.util.Log;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;

import com.baidu.cyberplayer.sdk.BMediaController;
import com.baidu.cyberplayer.sdk.BVideoView;
import com.baidu.cyberplayer.sdk.BVideoView.OnCompletionListener;
import com.baidu.cyberplayer.sdk.BVideoView.OnErrorListener;
import com.baidu.cyberplayer.sdk.BVideoView.OnInfoListener;
import com.baidu.cyberplayer.sdk.BVideoView.OnPreparedListener;

public class VideoViewPlayingActivity extends Activity implements OnPreparedListener, OnCompletionListener, OnErrorListener, OnInfoListener {
	
	private final String TAG = "VideoViewPlayingActivity";
		
	private String mVideoSource = null;
	
	private BVideoView mVV = null;
	private BMediaController mVVCtl = null;
	private RelativeLayout mViewHolder = null;
	private LinearLayout mControllerHolder = null;
	
	private boolean mIsHwDecode = false;
	
	private final int UI_EVENT_PLAY = 0;
	
	private WakeLock mWakeLock = null;
	private static final String POWER_LOCK = "VideoViewPlayingActivity";
	
	//播放状态
	private  enum PLAYER_STATUS {
		PLAYER_IDLE, PLAYER_PREPARING, PLAYER_PREPARED,
	}
	
	private PLAYER_STATUS mPlayerStatus = PLAYER_STATUS.PLAYER_IDLE;
	
	private int mLastPos = 0;
	
	private View.OnClickListener mPreListener = new View.OnClickListener() {
		
		@Override
		public void onClick(View v) {
			// TODO Auto-generated method stub
			Log.v(TAG, "pre btn clicked");
		}
	};
	
	private View.OnClickListener mNextListener = new View.OnClickListener() {
		
		@Override
		public void onClick(View v) {
			// TODO Auto-generated method stub
			Log.v(TAG, "next btn clicked");
		}
	};
		
	Handler mUIHandler = new Handler() {
		public void handleMessage(Message msg) {
			switch (msg.what) {
			case UI_EVENT_PLAY:
				mPlayerStatus = PLAYER_STATUS.PLAYER_PREPARING;
				if(mLastPos != 0){
					//如果有记录播放位置,先seek到想要播放的位置
					mVV.seekTo(mLastPos);
					mLastPos = 0;
				}
				//设置播放源
				mVV.setVideoPath(mVideoSource);
				//开始播放
				mVV.start();
				break;
			default:
				break;
			}
		}
	};
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
						
		setContentView(R.layout.controllerplaying);

		PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
		mWakeLock = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK | PowerManager.ON_AFTER_RELEASE, POWER_LOCK);
		
		mIsHwDecode = getIntent().getBooleanExtra("isHW", false);
		Uri uriPath = getIntent().getData();
		if (null != uriPath) {
			String scheme = uriPath.getScheme();
			if (null != scheme && (scheme.equals("http") || scheme.equals("https") || scheme.equals("rtsp"))) {
				mVideoSource = uriPath.toString();
			} else {
				mVideoSource = uriPath.getPath();
			}
		}
		
		initUI();
	}
	
	/**
	 * 初始化界面
	 */
	private void initUI() {		
		mViewHolder = (RelativeLayout)findViewById(R.id.view_holder);
		mControllerHolder = (LinearLayout )findViewById(R.id.controller_holder);
		//创建BVideoView和BMediaController
		mVV = new BVideoView(this);
		mVVCtl = new BMediaController(this);
		mViewHolder.addView(mVV);
		mControllerHolder.addView(mVVCtl);
		
		//注册listener
		mVV.setOnPreparedListener(this);
		mVV.setOnCompletionListener(this);
		mVV.setOnErrorListener(this);
		mVV.setOnInfoListener(this);
		mVVCtl.setPreNextListener(mPreListener, mNextListener);
		
		//关联BMediaController
		mVV.setMediaController(mVVCtl);
		//设置解码模式
		mVV.setDecodeMode(BVideoView.DECODE_SW);
	}
	
	@Override
	protected void onPause() {
		// TODO Auto-generated method stub
		super.onPause();
		Log.v(TAG, "onPause");
		//在停止播放前 你可以先记录当前播放的位置,以便以后可以续播
		if(mPlayerStatus != PLAYER_STATUS.PLAYER_IDLE){
			mLastPos = mVV.getCurrentPosition();
			mVV.stopPlayback();
		}
	}

	
	@Override
	protected void onResume() {
		// TODO Auto-generated method stub
		super.onResume();
		Log.v(TAG, "onResume");
		if (null != mWakeLock && (!mWakeLock.isHeld())) {
			mWakeLock.acquire();
		}
		//发起一次播放任务,当然您不一定要在这发起
		mUIHandler.sendEmptyMessage(UI_EVENT_PLAY);		
	}
	
	@Override
	protected void onStop(){
		super.onStop();
		Log.v(TAG, "onStop");
	}
	
	@Override
	protected void onDestroy(){
		super.onDestroy();
		Log.v(TAG, "onDestroy");
	}

	@Override
	public boolean onInfo(int what, int extra) {
		// TODO Auto-generated method stub
		return false;
	}

	/**
	 * 播放出错
	 */
	@Override
	public boolean onError(int what, int extra) {
		// TODO Auto-generated method stub
		Log.v(TAG, "onError");
		mPlayerStatus = PLAYER_STATUS.PLAYER_IDLE;
		return true;
	}

	/**
	 * 播放完成
	 */
	@Override
	public void onCompletion() {
		// TODO Auto-generated method stub
		Log.v(TAG, "onCompletion");
		mPlayerStatus = PLAYER_STATUS.PLAYER_IDLE;
	}

	/**
	 * 播放准备就绪
	 */
	@Override
	public void onPrepared() {
		// TODO Auto-generated method stub
		Log.v(TAG, "onPrepared");
		mPlayerStatus = PLAYER_STATUS.PLAYER_PREPARED;
	}	
}


 

(3)MainActivity.java

public class MainActivity extends Activity {
	//AK,SK需要我们注册百度的开发者.并且添加应用
	private String AK = "GsuXf8CSLerYpSh1Smksnitt";
	private String SK = "zssOn8r43S1cya7X";

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		//初始化BCyberPlayerFactory, 在其他任何接口调用前需要先对BCyberPlayerFactory进行初始化
		BCyberPlayerFactory.init(this);
		setContentView(R.layout.activity_main);

		//检测engine是否安装,如果没安装先安装engine
		checkEngineInstalled();
	}

	public void click(View v) {
//		String path = "rtsp://218.204.223.237:554/live/1/66251FC11353191F/e7ooqwcfbqjoo80j.sdp";
		String path = "http://192.168.1.100:8080/4.rmvb";
		playVideo(path);
	}

	/**
	 * 具体的播放操作
	 */
	private void playVideo(String path) {
		//如果engine没安装,进行提示
		if (!isEngineInstalled()) {
			setInfo("CyberPlayerEngine not installed,\n please install it first");
		} else {//如果已经安装
			String source = path;
			if (source == null || source.equals("")) {
				//简单检测播放源的合法性,不合法不播放
				setInfo("Please input a valid video path");
			} else {
				//播放前需要用ak,sk来初始化BEngineManager, 播放的时候会对ak,sk进行权限认证
				//当前您也可以到VideoViewPlayingActivity进行初始化
				BEngineManager mgr = BCyberPlayerFactory.createEngineManager();
				mgr.initCyberPlayerEngine(AK, SK);

				Intent intent = new Intent(this, VideoViewPlayingActivity.class);
				intent.setData(Uri.parse(source));
				startActivity(intent);
			}
		}
	}

	/**
	 * 检测engine是否安装,如果没有安装需要安装engine
	 */
	private void checkEngineInstalled() {
		if (isEngineInstalled()) {
			setInfo("CyberPlayerEngine Installed.\n");
		} else {
			//安装engine
			installEngine();
		}
	}

	/**
	 * 下载并安装engine
	 */
	private void installEngine() {
		BEngineManager mgr = BCyberPlayerFactory.createEngineManager();
		mgr.installAsync(mEngineListener);
	}

	/**
	 * 检测engine是否安装
	 * @return
	 */
	private boolean isEngineInstalled() {
		BEngineManager mgr = BCyberPlayerFactory.createEngineManager();
		return mgr.EngineInstalled();
	}

	private OnEngineListener mEngineListener = new OnEngineListener() {
		String info = "";

		String dlhead = "install engine: onDownload   ";
		String dlbody = "";

		@Override
		public boolean onPrepare() {
			// TODO Auto-generated method stub
			info = "install engine: onPrepare.\n";
			setInfo(info);
			return true;
		}

		@Override
		public int onDownload(int total, int current) {
			// TODO Auto-generated method stub
			if (dlhead != null) {
				info += dlhead;
				dlhead = null;
			}
			dlbody = current + "/" + total;
			setInfo(info + dlbody + "\n");
			return DOWNLOAD_CONTINUE;
		}

		@Override
		public int onPreInstall() {
			// TODO Auto-generated method stub
			info += dlbody;
			info += "\n";
			info += "install engine: onPreInstall.\n";
			setInfo(info);

			return DOWNLOAD_CONTINUE;
		}

		@Override
		public void onInstalled(int result) {
			// TODO Auto-generated method stub
			info += "install engine: onInstalled, ret = " + mRetInfo[result] + "\n";
			setInfo(info);
			if (result == OnEngineListener.RET_NEW_PACKAGE_INSTALLED) {
				//安装完成
			}
		}
	};

	public void setInfo(String str) {
		Toast.makeText(getApplicationContext(), str, 0).show();
	}

	//返回值对应的含义
	String[] mRetInfo = new String[] { "RET_NEW_PACKAGE_INSTALLED", "RET_NO_NEW_PACKAGE", "RET_STOPPED",
			"RET_CANCELED", "RET_FAILED_STORAGE_IO", "RET_FAILED_NETWORK", "RET_FAILED_ALREADY_RUNNING",
			"RET_FAILED_OTHERS", "RET_FAILED_ALREADY_INSTALLED", "RET_FAILED_INVALID_APK" };
}

 

25.媒体云的集成_jar包+so库形式

1.加载多个包

2.清单文件配置---------如上

3.controllerplaying.xml-------如上

4.VideoViewPlayingActivity.java------如上

5.MainActivity.java

public class MainActivity extends Activity {
	private final String TAG = "MainActivity";

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);

		setContentView(R.layout.activity_main);
	}

	public void click(View v) {
		String path = "http://192.168.1.100:8080/3.avi";
		playVideo(path);
	}

	private void playVideo(String path) {
		String source = path;
		if (source == null || source.equals("")) {
			/**
			 * 简单检测播放源的合法性,不合法不播放
			 */
			Toast.makeText(this, "please input your video source", 500).show();
			Intent intent = new Intent(this, VideoViewPlayingActivity.class);
			intent.setData(Uri.parse(source));
			startActivity(intent);

		} else {
			Intent intent = new Intent(this, VideoViewPlayingActivity.class);
			intent.setData(Uri.parse(source));
			startActivity(intent);
		}
	}
}


 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值