MediaPlayer播放网络视频

main.xml的源码如下:

Player.java是本文的核心,Player.java实现了“进度条更新”、“数据缓冲”、“SurfaceHolder生命周期”等功能,其中“SurfaceHolder生命周期”是视频与音频播放的最大区别,通过surfaceCreated()、surfaceDestroyed()、surfaceChanged()可以创建/释放某些资源。下面这个地方需要注意一下:

有些视频是android播放器不能播放的,不能播放时videoHeight=0,videoWidth=0,以此来判断是否播放视频。

Player.java源码如下:

 

test_videoplayer.java是主程序,负责调用Player类,其中关键部分是SeekBarChangeEvent这个SeekBar拖动的事件:SeekBar的Progress是0~SeekBar.getMax()之内的数,而MediaPlayer.seekTo()的参数是0~MediaPlayer.getDuration()之内数,所以MediaPlayer.seekTo()的参数是(progress/seekBar.getMax())*MediaPlayer.getDuration()。

 

test_videoplayer.java源码如下

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MediaPlayerAndroid 平台上用于播放音频和视频的类,但它并不直接支持网络流媒体的播放,特别是对于网络超时的处理。当从网络源加载视频时,如果发生超时,通常需要配合使用其他库或者自定义网络请求管理器,如 OkHttp、Volley 或 Retrofit,并在 MediaPlayer 的基础上进行扩展。 在处理网络视频超时时,你可以采取以下步骤: 1. **网络请求管理**: 在开始下载或流式传输视频之前,先发起网络请求并设置适当的超时时间。如果请求失败或超时,你需要捕获 `IOException` 或相应的异常。 ```java OkHttpClient client = new OkHttpClient.Builder() .connectTimeout(10, TimeUnit.SECONDS) .readTimeout(10, TimeUnit.SECONDS) .build(); Request request = new Request.Builder() .url(yourVideoUrl) .build(); try (Response response = client.newCall(request).execute()) { // 处理响应,如果异常则可能是超时 } catch (IOException e) { if (e instanceof ConnectTimeoutException || e instanceof ReadTimeoutException) { handleNetworkTimeout(); } } ``` 2. **错误处理与重试**: 当网络请求超时后,你可以选择暂停、显示错误提示,或者尝试重新连接。这可能涉及到暂停当前的 MediaPlayer,然后在网络恢复后再继续播放。 3. **MediaPlayer 更新**: 如果使用 `MediaPlayer` 来播放,需要监听其 `onError` 或 `onCompletion` 事件,并在这些事件中检查是否由于网络问题导致的错误。如果是,则可以清理资源并重新开始。 4. **后台服务或线程**: 对于较长的视频或者需要保持播放连续性的场景,可能需要将网络请求放在后台服务或线程中,这样即使主线程的超时被触发,播放也可以继续。 ```java // 使用 Handler 或 HandlerThread 进行异步处理 HandlerThread thread = new HandlerThread("NetworkPlayer"); thread.start(); Handler handler = new Handler(thread.getLooper()); Runnable updatePlayer = () -> { // 在子线程中更新 MediaPlayer 或者重新发起网络请求 }; handler.post(updatePlayer); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值