第二次使用七牛直播SDK,在这简明扼要的描述下基础集成的几点要素,建议阅读这篇文章的阅读者先行查看官方开发文档,再回来查看这篇文章也许有可能就一步理解到位了。另附上关键代码可以直接复制使用。

如果对接中有任何问题可以前去提交七牛工单或博客下留言。

private PLVideoTextureView mVideoView; //播放器private MediaController mMediaController = null;  //控制器private int mIsLiveStreaming = 1;private boolean mIsActivityPaused = true;private boolean llSuccess = false; //拉流成功/* 七牛设置 str -------------------------------------------------------*//*** 设置基本七牛基本信息-->开始拉流*/public void startLL() {mIsLiveStreaming = 1; // 1 = 直播 / 0 = 点播int codec = AVOptions.MEDIA_CODEC_AUTO;  //解码方式 sw = 软解 / hw = 硬解 / auto = 自动setOptions(codec);// You can mirror the display 预览画面反转// mVideoView.setMirror(true);// You can also use a custom `MediaController` widgetmMediaController = new MediaController(this, false, mIsLiveStreaming == 1);mVideoView.setMediaController(mMediaController);//mVideoView.setDisplayOrientation(PLVideoTextureView.ASPECT_RATIO_FIT_PARENT); //default-->ASPECT_RATIO_FIT_PARENT 画面旋转mVideoView.setDisplayAspectRatio(PLVideoView.ASPECT_RATIO_PAVED_PARENT);  //画面预览模式mVideoView.setOnInfoListener(new PLMediaPlayer.OnInfoListener() {  //播放器状态监听@Overridepublic boolean onInfo(PLMediaPlayer plMediaPlayer, int i, int i1) {switch (i) {case PLMediaPlayer.MEDIA_INFO_UNKNOWN:logger("未知消息");break;case PLMediaPlayer.MEDIA_INFO_VIDEO_RENDERING_START: //加载成功,正在播放logger("第一帧视频已成功渲染");llSuccess = true;break;case PLMediaPlayer.MEDIA_INFO_BUFFERING_START:logger("开始缓冲");break;case PLMediaPlayer.MEDIA_INFO_BUFFERING_END:logger("停止缓冲");break;case PLMediaPlayer.MEDIA_INFO_VIDEO_ROTATION_CHANGED:logger("获取到视频的播放角度");break;case PLMediaPlayer.MEDIA_INFO_AUDIO_RENDERING_START:logger("第一帧音频已成功播放");break;}return false;}});mVideoView.setOnCompletionListener(new PLMediaPlayer.OnCompletionListener() {  //直播结束监听@Overridepublic void onCompletion(PLMediaPlayer plMediaPlayer) {}});mVideoView.setOnErrorListener(new PLMediaPlayer.OnErrorListener() {  //直播错误监听@Overridepublic boolean onError(PLMediaPlayer plMediaPlayer, int i) {boolean isNeedReconnect = false; //是否需要重新连接boolean customReturn = false;switch (i) {case PLMediaPlayer.ERROR_CODE_INVALID_URI:logger("Invalid URL !无效的 URL");break;case PLMediaPlayer.ERROR_CODE_404_NOT_FOUND:logger("404 resource not found !播放资源不存在");break;case PLMediaPlayer.ERROR_CODE_CONNECTION_REFUSED:logger("Connection refused !服务器拒绝连接");break;case PLMediaPlayer.ERROR_CODE_CONNECTION_TIMEOUT:logger("Connection timeout !连接超时");isNeedReconnect = true;break;case PLMediaPlayer.ERROR_CODE_EMPTY_PLAYLIST:logger("Empty playlist !空的播放列表");break;case PLMediaPlayer.ERROR_CODE_STREAM_DISCONNECTED:logger("Stream disconnected !与服务器连接断开");isNeedReconnect = true;break;case PLMediaPlayer.ERROR_CODE_IO_ERROR:logger("Network IO Error !网络异常");isNeedReconnect = true;break;case PLMediaPlayer.ERROR_CODE_UNAUTHORIZED:logger("Unauthorized Error !");break;case PLMediaPlayer.ERROR_CODE_PREPARE_TIMEOUT:logger("Prepare timeout !未授权,播放一个禁播的流");// TODO: 2017/2/16 如果主播正常断开连接,第二次及之后所有的提示将会提示这个提示liveEnd2();customReturn = true;//isNeedReconnect = true;break;case PLMediaPlayer.ERROR_CODE_READ_FRAME_TIMEOUT:// TODO: 2017/2/16 如果主播正常断开连接,第一次提示这个提示logger("Read frame timeout !读取数据超时");isNeedReconnect = true;break;case PLMediaPlayer.ERROR_CODE_HW_DECODE_FAILURE:setOptions(AVOptions.MEDIA_CODEC_SW_DECODE);isNeedReconnect = true;break;case PLMediaPlayer.MEDIA_ERROR_UNKNOWN:logger("未知错误");break;default:logger("unknown error !未知错误");break;}// Todo pls handle the error status here, reconnect or call finish()if (isNeedReconnect) {sendReconnectMessage();} else {// TODO: 2017/3/19 直播错误,请手动重连...if (!customReturn)liveEnd();}// Return true means the error has been handled// If return false, then `onCompletion` will be called//如果返回true-->错误已被处理 / 返回false-->setOnCompletionListener上交给国家return true;}});mVideoView.setVideoPath(mLLAddress);mVideoView.start();}/*** 设置播放器参数*/private void setOptions(int codecType) {AVOptions options = new AVOptions();// the unit of timeout is msoptions.setInteger(AVOptions.KEY_PREPARE_TIMEOUT, 10 * 1000);options.setInteger(AVOptions.KEY_GET_AV_FRAME_TIMEOUT, 10 * 1000);options.setInteger(AVOptions.KEY_PROBESIZE, 128 * 1024);// Some optimization with buffering mechanism when be set to 1options.setInteger(AVOptions.KEY_LIVE_STREAMING, mIsLiveStreaming);if (mIsLiveStreaming == 1) {options.setInteger(AVOptions.KEY_DELAY_OPTIMIZATION, 1);}// 1 -> hw codec enable, 0 -> disable [recommended]options.setInteger(AVOptions.KEY_MEDIACODEC, codecType);// whether start play automatically after prepared, default value is 1options.setInteger(AVOptions.KEY_START_ON_PREPARED, 0);mVideoView.setAVOptions(options);}/*** 发送重连消息*/private void sendReconnectMessage() {showToast(getStr(R.string.reconnection));mHandler.removeCallbacksAndMessages(null);mHandler.sendMessageDelayed(mHandler.obtainMessage(MESSAGE_ID_RECONNECTING), 500);}/*** 重连 同时对当前流是否可用做出判断*/private static final int MESSAGE_ID_RECONNECTING = 0x01;protected Handler mHandler = new Handler(Looper.getMainLooper()) {@Overridepublic void handleMessage(Message msg) {if (msg.what != MESSAGE_ID_RECONNECTING) {return;}if (mIsActivityPaused) { // TODO: 2017/2/16 同时可以增加后台确认当前主播是否在直播 (暂不使用)return;}if (!NetworkUtils.isAvailableByPing()) {sendReconnectMessage();return;}mVideoView.setVideoPath(mLLAddress);mVideoView.start();}};/* 七牛设置 end ---------------------------------*/@Overrideprotected void onPause() {super.onPause();mVideoView.pause();mIsActivityPaused = true;}@Overrideprotected void onResume() {super.onResume();mIsActivityPaused = false;mVideoView.start();}@Overrideprotected void onDestroy() {super.onDestroy();mVideoView.stopPlayback();}

Android七牛拉流基础设置干货相关推荐

  1. android七牛直播镜像,七牛云直播SDK之推流解析

    最近由于项目需要,研究了直播的推拉流以及滤镜叠加的效果,在此记录一下一些小的细节. 前期做了直播SDK的调研,发现七牛云的SDK更符合项目需求一点,所以,最终选择了七牛云的SDK. 推流 七牛云官方的 ...

  2. android七牛多张图片上传

    将多张图片上传到七牛,需要一张张上传 七牛android SDK使用指南http://developer.qiniu.com/code/v7/sdk/android.html 将图片上传到七牛服务器的 ...

  3. FFmpeg - Android 直播推拉流

    1. 搭建自己的流媒体服务器 在实际的开发过程中,我们是可以不用自己来搭建流媒体服务器的,访问后台的接口会返回媒体房间和 IM 房间.但现在我们自己测试就无法用公司的接口了,当然也可以去抓一些第三方的 ...

  4. android 视频比例,关于Android用Ijkplayer拉流的视频比例问题

    在Demo中集成Ijkplayer尝试拉取网络视频流进行播放时,发现拉取后出现视频无法全部在屏幕中播放,显示效果如下(测试地址为香港卫视的rtmp视频源:rtmp://live.hkstv.hk.lx ...

  5. 七牛 js JDK使用 - 上传APP

    [整理whh-原文地址] 背景介绍 使用JS将APP(包括安卓和IOS)上传到七牛 (上传APP所以不考虑数据处理) uptoken使用JAVA后台得到 七牛上传基于plupload下面不详述如何使用 ...

  6. 七牛 js JDK使用 - 上传APP 1

    背景介绍 使用JS将APP(包括安卓和IOS)上传到七牛 (上传APP所以不考虑数据处理) uptoken使用JAVA后台得到 七牛上传基于plupload下面不详述如何使用参见 七牛上传的简单案例也 ...

  7. html cdn不缓存,【前端开发日常 - 6】七牛CDN上的网页缓存问题及HTML禁止缓存(续)...

    需求背景 紧接着之前的内容[前端开发日常 - 5]七牛CDN上的网页缓存问题及HTML禁止缓存. 由于七牛CDN无法通过设置对单独的文件修改,而只能通过对 bucket 的统一设置修改 max-age ...

  8. 七牛 savekey php,七牛云1:客户端直接上传文件

    最近因为项目要用到七牛云,所以花了点时间整理了一下学习心得. 使用七牛云,第一步当然就是上传文件了,常见的云存储上传文件流程一般有3种: 用户==>业务服务器(你自己的服务器)==>云存储 ...

  9. SRS视频服务器-docker部署srs4.0.198-ubuntu系统:配置低时延实现srt推流和拉流

    一.docker安装srs4.0.198 推荐使用docker来安装srs视频服务器,简单方便 我使用的是ubuntu18.04系统. 1.1.docker的安装 我参考的是:https://blog ...

最新文章

  1. FAT文件系统原理(转)
  2. mysql密码修改脚本
  3. java线程池的使用例子,不愧是大佬
  4. elementUI的table组件实现setCurrentRow的滚动条定位效果
  5. linux内核之 phys_to_virt
  6. 网际协议:动态主机配置协议(DHCP)和NAT
  7. 代码添加ProgressBar 进度条
  8. Spring-IOC XML 配置多个相同 ID 的 bean 加载分析
  9. JS当中的无限分类递归树
  10. 深入理解BFC和Margin Collapse
  11. 计算机病毒是具有破坏性的程序6,2015年计算机二级MS Office习题及答案解析(6)
  12. 打log的方式检查程序里面的问题 及示例代码 详解
  13. [抽奖系统下载]多进程现场抽奖展示系统V2-双屏PPT版-专业抽奖展示工具-具有强劲引擎的抽奖系统-PPT双屏技术深度应用,国内唯一
  14. 安装Ubuntu Linux系统时硬盘分区
  15. 得意不张狂失败不气妥
  16. HTML的style属性(替代font等标签)
  17. 感恩节(11.28)
  18. SpringBoot 和 Vue 前后端分离教程(附源码)
  19. Android WebView混合开发实战演习
  20. Windows恢复回收站误删文件

热门文章

  1. linux 安装keepalived,Keepalived的安装与配置
  2. js创建一个指定长度的数组
  3. web复习--css
  4. 白平衡之完美反射算法
  5. 三维飞行时间图像传感器行业调研报告 - 市场现状分析与发展前景预测
  6. 低调收藏,5大免费资源网站!网友:够用一辈子啦
  7. 关闭 Administrator 账户
  8. 电脑air怎么下载准考证到PDF
  9. ios下video标签无法播放视频
  10. vb.net 教程 11-1 打印组件 4 PrintDocument 1