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
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);
}
}
}