PlayerUgcActivity.java 10.7 KB
package com.wepiao.star.starlive.ui;

import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.text.Spannable;
import android.text.SpannableString;
import android.text.style.ForegroundColorSpan;
import android.text.style.UnderlineSpan;
import android.view.View;
import android.widget.Toast;

import com.wepiao.star.starlive.R;
import com.wepiao.star.starlive.model.BaseContributionInfo;
import com.cnlive.lib_cnvideo.model.ContributionInfo;
import com.cnlive.lib_cnvideo.ui.CnliveUgcPlayerActivity;
import com.cnlive.lib_cnvideo.ui.widget.player.CNMediaPlayerType;
import com.cnlive.libs.chat.ChatState;
import com.ksyun.media.player.IMediaPlayer;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by gujun on 2016/7/12.
 */
public class PlayerUgcActivity extends CnliveUgcPlayerActivity {
    private String vId;
    private String channelId;
    private String type;
    private boolean hasMovie;
    private String flyKissPrice;

    private static final String room = "cnlivetest";
    private static final String name = "游客"+ System.currentTimeMillis();

    //TODO 问题消息体 {"type":"question","user_name":"name","mbody":"test message","imgurl":"http://y3.cnliveimg.com:8080/image/itv/2016/0729/c48d1db2dc1641f19d90ef23e294d34a_139042_100.jpg","num":"5"}

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

        addData(getIntent());

        //更新排行榜列表
        findViewById(R.id.test1).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                List<ContributionInfo> list = new ArrayList<>();
                list.add(new BaseContributionInfo("http://v1.qzone.cc/avatar/201403/23/11/54/532e5aefc546e496.jpg!200x200.jpg","1"));
                list.add(new BaseContributionInfo("http://imgsrc.baidu.com/baike/pic/item/c2fdfc039245d6882d5d54d9a6c27d1ed21b2474.jpg","2"));
                list.add(new BaseContributionInfo("http://img2.a0bi.com/upload/ttq/20160709/1468043314019.png","1"));
                list.add(new BaseContributionInfo("http://b.hiphotos.baidu.com/zhidao/pic/item/d1a20cf431adcbefef0f982fabaf2edda3cc9fe4.jpg","2"));
                list.add(new BaseContributionInfo("http://img2.a0bi.com/upload/ttq/20160817/1471399679901.png","1"));
                list.add(new BaseContributionInfo("http://img2.a0bi.com/upload/ttq/20160709/1468043314019.png","2"));
                updateContributionList(list);
            }
        });

        //更新收入
        findViewById(R.id.test2).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                updateIncome(2334455);
            }
        });

        //更新累计关注人数
        findViewById(R.id.test3).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                updateFollowCount(1122333);
            }
        });

        if("ugcLive".equals(type)){
            //初始化弹幕视图 间隔时间,行数,行弹幕最大值,速度(0.1-1.0)
            initTopBarrage(400, 2, 10, 0.5f);
            initBottomBarrage(400, 5, 10, 0.5f);
            //初始化聊天室 房间号,用户昵称
            initChat(room, name);
        }

    }

    //内部view创建完成可以进行相关的更新ui操作
    @Override
    public void viewCreated() {
        //TODO 添加相关的更新ui操作
        updateIncome(2334455);
    }

    @Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        addData(intent);
    }

    private void addData(Intent intent) {
        if(intent == null) return;
        if (intent.hasExtra("vId"))
            vId = intent.getStringExtra("vId");
        if (intent.hasExtra("channelId"))
            channelId = intent.getStringExtra("channelId");
        if (intent.hasExtra("type"))
            type = intent.getStringExtra("type");
        if (intent.hasExtra("flyKissPrice"))
            flyKissPrice = intent.getStringExtra("flyKissPrice");
        if (intent.hasExtra("hasMovie"))
            hasMovie = intent.getBooleanExtra("hasMovie",false);
        if(type.equals("ugcLive")){
            // channelId直播节目频道id;  hasMovie:有无电影;   flyKissPrice:购买飞吻钱数(无电影时必须传值,有电影时传空即可)
            setLiveVideoData(channelId, hasMovie, flyKissPrice);
        }else if(type.equals("ugcVod")){
            //vId点播节目id ;hasMovie:有无电影
            setVodVideoData(vId,hasMovie);
        }else{
            Toast.makeText(this,"暂不支持此种视频类型", Toast.LENGTH_LONG).show();
        }
    }

    @Override
    protected void shareViewClick() {
        Toast.makeText(this, "分享点击", Toast.LENGTH_SHORT).show();
    }

    @Override
    protected void anchorInfoClick() {
        Toast.makeText(this, "主播信息点击", Toast.LENGTH_SHORT).show();
    }

    @Override
    protected void contributionListClick() {
        Toast.makeText(this, "贡献榜点击", Toast.LENGTH_SHORT).show();
    }

    @Override
    protected void supportAnchorClick() {
        Toast.makeText(this, "支持TA点击", Toast.LENGTH_SHORT).show();
    }

    @Override
    protected void sendGiftClick() {
        Toast.makeText(this, "送飞吻点击", Toast.LENGTH_SHORT).show();
    }

    @Override
    public void movieInfoClick() {
        Toast.makeText(this, "有电影版的直播结束页面的电影详情点击", Toast.LENGTH_SHORT).show();
    }

    @Override
    protected void showInputLimitDialog() {
        //TODO 展示限制60输入的dialog 注意:添加dialog要进行if(!dialog.isShowing())的判断,否则会有弹出多次问题
        Toast.makeText(this, "展示输入超过60字的提示框", Toast.LENGTH_SHORT).show();
    }

    @Override
    protected void showInputSensitiveWordsDialog(String msg) {
        //TODO 展示敏感词的dialog
        Toast.makeText(this, msg, Toast.LENGTH_SHORT).show();
    }

    @Override
    protected void replayClick() {
        Toast.makeText(this, "直播结束页面的重播按钮点击", Toast.LENGTH_SHORT).show();

        //TODO 添加正式的vId,type,hasMovie
        Intent intent = new Intent(this, PlayerUgcActivity.class);
        intent.putExtra("cId", "yupiao");
        intent.putExtra("type", "ugcLive");
        intent.putExtra("hasMovie", false);
        startActivity(intent);
    }

    @Override
    public void onPlayStateError(int flag, IMediaPlayer iMediaPlayer, int what, String extra) {
        //ugc直播时才会有结束页
        boolean isUgcLive = "ugcLive".equals(type);
        if(flag == CNMediaPlayerType.TYPE_ERROR_PLAYER && isUgcLive){
            //TODO 请求判断是否是结束状态 将值赋予showLiveEndView

            //test
            boolean showLiveEndView = true;

            if (showLiveEndView) {
                // 展示 直播结束页面
                // 第一个参:数观看的人数,第二个参数:贡献的钱数,第三个参数:电影名
                showLiveEndView("12345", "345456", "《让子弹飞》");
            } else {
                // 展示 直播重试页面
                showErrorRetryView(flag);
            }
        }else{
            showErrorRetryView(flag);
        }
    }

    //判断主播端状态
    @Override
    public void onChannelState(int flag, String status) {
        super.onChannelState(flag, status);
        if (CNMediaPlayerType.ERROR_END.equals(status)) {
            showErrorRetryView(flag);
            stopMediaPlayer();
        } else if (CNMediaPlayerType.NORMAL_END.equals(status)) {
            showLiveEndView("12345", "345456", "《让子弹飞》");
            stopMediaPlayer();
        } else if (CNMediaPlayerType.NORMAL_START.equals(status)) {
            replayClick();
        }
    }

    //聊天室事件监听
    @Override
    public void onChatState(int what, String extra) {
        switch (what) {
            case ChatState.StateInitDone: //初始化完成
                connectChat();//连接聊天室
                break;
            case ChatState.ErrorInitAuth: //认证失败
            case ChatState.ErrorInitNetwork: //未检测到网络
            case ChatState.ErrorInitOther: //初始化错误
                showMessage("聊天室初始化失败,点击重试", clickErrorInit);//设置错误信息
                break;
            case ChatState.StateConnect: //与服务器建立连接
                break;
            case ChatState.StateJoin: //聊天室登录成功
                hideMessage();//隐藏错误信息
                break;
            case ChatState.StateReconnect: //与服务器重新连接
                connectChat();
                break;
            case ChatState.ErrorConnect: //连接服务器失败
            case ChatState.ErrorChat: //聊天室连接失败
            case ChatState.ErrorName: //昵称冲突
                String message = "聊天室连接失败,点击重试";
                SpannableString spannableString = new SpannableString(message); //定义文字样式
                spannableString.setSpan(new UnderlineSpan(), message.length() - 2, message.length(), Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
                spannableString.setSpan(new ForegroundColorSpan(Color.rgb(255, 213, 0)), message.length() - 2, message.length(), Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
                showMessage(spannableString, clickErrorConnect);//设置错误信息
                break;
            case ChatState.ErrorConnectCloseOnError: //聊天室异常断开
                showMessage("聊天室已断开,请检查网络");
                break;
            case ChatState.ErrorSendOther: //消息发送失败
                Toast.makeText(this,extra, Toast.LENGTH_SHORT).show();
                break;
            case ChatState.ErrorSendNoConnect: //消息发送失败 没有连接聊天室
                Toast.makeText(this,extra, Toast.LENGTH_SHORT).show();
                break;
        }
    }

    //聊天室连接失败 点击事件
    protected View.OnClickListener clickErrorConnect = new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            v.setOnClickListener(null);
            connectChat();
        }
    };

    //聊天室初始化失败 点击事件
    protected View.OnClickListener clickErrorInit = new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            v.setOnClickListener(null);
            initChat(room, name);
        }
    };
}