androidmediaplayerandroid mediaplayer实例化失败,总会报nullpointerexception

androidmediaplayer  时间:2021-06-11  阅读:()

如何玩转 Android MediaPlayer之Media Proxy

HttpGetProxy.JAVA还是本文的关键部分: [java] view plaincopyprint? public class HttpGetProxy { final static private String TAG = "HttpGetProxy"; final static private String LOCAL_IP_ADDRESS_1 = "127.0.0.1"; final static private String LOCAL_IP_ADDRESS_2 = "10.0.2.2"; final static private int HTTP_PORT = 80; final static private String HTTP_END=" "; /**代理服务器使用的端口*/ private int proxy_ip_port; /**链接带的端口*/ private String original_ip_port; /**远程服务器地址*/ private String remoteHost; /**本地服务器地址*/ private String localHost; private ServerSocket localServer = null; /**收发Media Player请求的Socket*/ private Socket sckPlayer = null; /**收发Media Server请求的Socket*/ private Socket sckServer = null; private SocketAddress address; /** * 初始化代理服务器 * @param localport 代理服务器监听的端口 */ public HttpGetProxy(int localport) { try { _HttpGetProxy(LOCAL_IP_ADDRESS_1,localport); } catch (Exception e) { Log.e(TAG,LOCAL_IP_ADDRESS_1+"???"+e.toString()); try { _HttpGetProxy(LOCAL_IP_ADDRESS_2,localport); }catch (Exception e1) { Log.e(TAG,LOCAL_IP_ADDRESS_2+"???"+e.toString()); System.exit(0); } } } private void _HttpGetProxy(String ipAddress,int localport) throws UnknownHostException, IOException { proxy_ip_port=localport; localServer = new ServerSocket(localport,1,Address.getByName(ipAddress)); localHost=ipAddress; } /** * 把网络URL转为本地URL,127.0.0.1替换网络域名 * @param url 网络URL * @return 本地URL */ public String getLocalURL(String urlString){ //----排除HTTP特殊----// String targetUrl=ProxyUtils.getRedirectUrl(urlString); //----获取对应本地代理服务器的链接----// String result = null; URI originalURI=URI.create(targetUrl); remoteHost=originalURI.getHost(); if(originalURI.getPort()!=-1){//URL带Port address = new SocketAddress(remoteHost,originalURI.getPort());//使用默认端口 original_ip_port = originalURI.getPort()+"";//保存端口,中转时替换 result=targetUrl.replace(remoteHost+":"+originalURI.getPort(), localHost+":"+proxy_ip_port); } else{//URL不带Port address = new SocketAddress(remoteHost,HTTP_PORT);//使用80端口 original_ip_port = ""; result=targetUrl.replace(remoteHost,localHost+":"+proxy_ip_port); } return result; } /** * 启动代理服务器 * @throws IOException */ public void asynStartProxy(){ new Thread() { public void run() { int bytes_read; byte[] local_request = new byte[1024]; byte[] remote_reply = new byte[1024]; while (true) { try { //-------------------------------------- //监听MediaPlayer的请求,MediaPlayer->代理服务器 //-------------------------------------- sckPlayer = ept(); Log.e(TAG, "..........sckPlayer connected.........."); String requestStr = ""; while ((bytes_read = sckPlayer.getInputStream().read(local_request)) != -1) { byte[] tmpBuffer=new byte[bytes_read]; System.arraycopy(local_request,0,tmpBuffer,0,bytes_read); String str = new String(tmpBuffer); //Log.e("from MediaPlayer---->", str); requestStr = requestStr + str; if (requestStr.contains("GET") && requestStr.contains(HTTP_END)) { break; } } //把request中的本地ip改为远程ip requestStr = requestStr.replace(localHost,remoteHost); //把代理服务器端口改为原URL端口 if(TextUtils.isEmpty(original_ip_port)) requestStr = requestStr.replace(":"+proxy_ip_port, ""); else requestStr = requestStr.replace(":"+proxy_ip_port, ":"+original_ip_port); Log.e("to Media Server---->", requestStr); //-------------------------------------- //把MediaPlayer的请求发到网络服务器,代理服务器->网络服务器 //-------------------------------------- sckServer = new Socket(); sckServer.connect(address); Log.e(TAG,"..........remote Server connected.........."); sckServer.getOutputStream().write(requestStr.getBytes());//发送MediaPlayer的请求 //------------------------------------------------------ //把网络服务器的反馈发到MediaPlayer,网络服务器->代理服务器->MediaPlayer //------------------------------------------------------ Log.e(TAG,"..........remote start to receive.........."); String responseStr = ""; boolean isCaptured=false; while ((bytes_read = sckServer.getInputStream().read(remote_reply)) != -1) { byte[] tmpBuffer=new byte[bytes_read]; System.arraycopy(remote_reply,0,tmpBuffer,0,bytes_read); //----捕获收到的Response文本内容----// if (!isCaptured) { String str = new String(tmpBuffer); responseStr += str; if (responseStr.contains("HTTP/") && responseStr.contains(HTTP_END)) { int endIndex=responseStr.indexOf(HTTP_END, 0); responseStr=responseStr.substring(0, endIndex); Log.e("from Media Server---->", responseStr); isCaptured=true; } } sckPlayer.getOutputStream().write(tmpBuffer); sckPlayer.getOutputStream().flush(); } Log.e(TAG, "..........over.........."); //关闭对内,对内 2个SOCKET sckPlayer.close(); sckServer.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }.start(); } }

android中的Mediaplayer 是不是我们每次播放一个不同的视频文件的时候.都要调用一次Prepare方法啊

没错,播放之前需要调用 prepare()准备。

Android的MediaPlayer包含了Audio和video的播放功能 关于MediaPlayer的使用方式: 1.如何获得MediaPlayer实例: 可以使用直接new的方式: MediaPlayer mp = new MediaPlayer(); 也可以使用create的方式,如: MediaPlayer mp = MediaPlayer.create(this, R.raw.test);//这时就不用调用setDataSource了 2.如何设置要播放的文件: MediaPlayer要播放的文件主要包括3个来源: a. 用户在应用中事先自带的resource资源 例如:MediaPlayer.create(this, R.raw.test); b. 存储在SD卡或其他文件路径下的媒体文件 例如:mp.setDataSource("/sdcard/test.mp3"); c. 网络上的媒体文件 例如:mp.setDataSource("mp3或者mp4的地址"); 3.MediaPlayer常用API MediaPlayer的setDataSource一共四个方法: setDataSource (String path) setDataSource (FileDescriptor fd) setDataSource (Context context, Uri uri) setDataSource (FileDescriptor fd, long offset, long length) 对播放器的主要控制方法: Android通过控制播放器的状态的方式来控制媒体文件的播放,其中: 1.prepare()和prepareAsync() 提供了同步和异步两种方式设置播放器进入prepare状态,需要注意的是,如果MediaPlayer实例是由create方法创建的,那么第一次启动播放前不需要再调用prepare()了,因为create方法里已经调用过了。

2. start()是真正启动文件播放的方法 3.pause()和()比较简单,起到暂停和停止播放的作用 4.seekTo()是定位方法,可以让播放器从指定的位置开始播放,需要注意的是该方法是个异步方法,也就是说该方法返回时并不意味着定位完成,尤其是播放的网络文件,真正定位完成时会触发OnSeekComplete.onSeekComplete(),如果需要是可以调用setOnSeekCompleteListener(OnSeekCompleteListener)设置监听器来处理的。

5.release()可以释放播放器占用的资源,一旦确定不再使用播放器时应当尽早调用它释放资源。

6.reset()可以使播放器从Error状态中恢复过来,重新会到Idle状态。

android MediaPlayer java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0

从你这些程序看无法看出问题。

报的错误很明显,你的集合里面没有元素,但是你想从里面取数据。

(你也没说是哪一行报错,我觉得是不是这个集合的问题:private List mMusicList = new ArrayList();集合里面没有元素)

跪求Android高手写个MediaPlayer的小程序!

可以这么考虑!简单的功能其实不难,又因为MediaPlayer极其容易出错。

所以要监听一个错误回调接口,重置MediaPlayer。

/*实例化媒体播放器*/ mPlayer=newMediaPlayer(); /**/ mPlayer.setOnErrorListener(newOnErrorListener(){ /** *当播放器发生错误的时候回调 */ @Override publicbooleanonError(MediaPlayermp,intwhat,intextra){ /*当发生错误的时候重置播放器*/ mp.reset(); returnfalse; } }); /*播放,下一首,上一首只要传递不同的文件路径即可:*/ try{ /*重置MediaPlayer*/ mPlayer.reset(); /*设置要播放的文件路径*/ mPlayer.setDataSource(path);/*媒体文件路径*/ /*准备播放*/ mPlayer.prepare(); /*开始播放*/ mPlayer.start(); }catch(IllegalArgumentExceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); }catch(IllegalStateExceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); }catch(IOExceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); } /*暂停:*/ if(mPlayer.isPlaying()){ mPlayer.pause(); } /*停止:*/ if(mPlayer.isPlaying()){ /*重置播放器*/ mPlayer.reset(); } /*继续播放:*/ if(!mPlayer.isPlaying()){ mPlayer.start(); }

android mediaplayer实例化失败,总会报nullpointerexception

从log来看,是75行这个player没有初始化啊,你是否对player这个成员实例化了,从log上可,没有实例化就是用了。

你可以改为这样 1 2 3 4 5 6 if(player?!=?null)?{ // } else{//加这个 player?=?newMediaPlayer(); }

哪里购买香港云服务器便宜?易探云2核2G低至18元/月起;BGP线路年付低至6.8折

哪里购买香港云服务器便宜?众所周知,国内购买云服务器大多数用户会选择阿里云或腾讯云,但是阿里云香港云服务器不仅平时没有优惠,就连双十一、618、开年采购节这些活动也很少给出优惠。那么,腾讯云虽然海外云有优惠活动,但仅限新用户,购买过腾讯云服务器的用户就不会有优惠了。那么,我们如果想买香港云服务器,怎么样购买香港云服务器便宜和优惠呢?下面,云服务器网(yuntue.com)小编就介绍一下!我们都知道...

弘速云20.8元/月 ,香港云服务器 2核 1g 10M

弘速云元旦活动本公司所销售的弹性云服务器、虚拟专用服务器(VPS)、虚拟主机等涉及网站接入服务的云产品由具备相关资质的第三方合作服务商提供官方网站:https://www.hosuyun.com公司名:弘速科技有限公司香港沙田直营机房采用CTGNET高速回国线路弹性款8折起优惠码:hosu1-1 测试ip:69.165.77.50​地区CPU内存硬盘带宽价格购买地址香港沙田2-8核1-16G20-...

提速啦(24元/月)河南BGP云服务器活动 买一年送一年4核 4G 5M

提速啦的来历提速啦是 网站 本着“良心 便宜 稳定”的初衷 为小白用户避免被坑 由赣州王成璟网络科技有限公司旗下赣州提速啦网络科技有限公司运营 投资1000万人民币 在美国Cera 香港CTG 香港Cera 国内 杭州 宿迁 浙江 赣州 南昌 大连 辽宁 扬州 等地区建立数据中心 正规持有IDC ISP CDN 云牌照 公司。公司购买产品支持3天内退款 超过3天步退款政策。提速啦的市场定位提速啦主...

androidmediaplayer为你推荐
刘建平刘建平的履历tdetde在国际贸易中的用词代表什么意思jsmJSM们有用过什么化妆品能使鼻子和脸部立体泛珍珠白的感觉的产品吗?心水分享,谢谢mac地址克隆路由器的Mac地址克隆有什么作用?视频技术短视频运营每天的工作是做什么?需要所学的技术都有什么方面?网络审计什么叫网络会计师事务所star413CONVERSE和ALLSTAR有什么区别qq网络硬盘我QQ的网络硬盘怎么啦?点心os点心操作系统?红牛下架红牛 为什么全国下架
韩国虚拟主机 骨干网 亚洲大于500m mach5 地址大全 中国智能物流骨干网 京东商城0元抢购 最好的免费空间 徐正曦 中国电信测速网 傲盾官网 gtt 最漂亮的qq空间 域名与空间 国外在线代理服务器 谷歌台湾 腾讯网盘 97rb SmartAXMT800 forwarder 更多