StreamActivity.java 9.97 KB
package com.wepiao.star.starlive.ui;

import android.graphics.Color;
import android.os.Bundle;
import android.text.Spannable;
import android.text.SpannableString;
import android.text.style.ForegroundColorSpan;
import android.text.style.UnderlineSpan;
import android.util.Log;
import android.view.View;
import android.view.WindowManager;
import android.widget.Button;
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.stream.BaseCNStreamActivity;
import com.cnlive.libs.chat.ChatState;
import com.cnlive.libs.stream.base.IStreamer;

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

/**
 * Created by Administrator on 2016/8/16.
 */
public class StreamActivity extends BaseCNStreamActivity {
    private String activityid = "" + System.currentTimeMillis();
    private String channelid = "yupiao";
    private int isHorizon = 0;

    private Button button1, button2, button3;

    private static final String room = "cnlivetest";
    private static final String name = "游客";

    private static final boolean isMovie = true;

    //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
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.cnstream_base_activity);

        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
        //初始化弹幕视图 间隔时间,行数,行弹幕最大值,速度(0.1-1.0)
        initTopBarrage(400, 2, 10, 0.5f);
        initBottomBarrage(400, 5, 10, 0.5f);
        //初始化聊天室 房间号,用户昵称
        initChat(room, name);
        //初始化 设置是否有电影票
        initStream(isMovie);

        //测试
        button1 = (Button) findViewById(R.id.button1);
        button1.setOnClickListener(listener);
        button2 = (Button) findViewById(R.id.button2);
        button2.setOnClickListener(listener);
        button3 = (Button) findViewById(R.id.button3);
        button3.setOnClickListener(listener);
    }

    private View.OnClickListener listener = new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            switch (view.getId()) {
                case R.id.button1:
                    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);
                    break;
                case R.id.button2:
                    updateIncome(2334455);
                    break;
                case R.id.button3:
                    updateFollowCount(1122333);
                    break;
            }
        }
    };


    @Override
    public void setStreamData() {
        //设置 直播节目 属性
        cnBuilder.setActivityID(activityid);
        cnBuilder.setChannelID(channelid);
        cnBuilder.setIsHorizontalScreen(isHorizon);
    }

    @Override
    public void showEnd() {
//        //直播结束页面的数据
        showEndView("123456", "123456");
    }

    @Override
    public void closeButtonWhenNotInLiveClickListener() {
        //直播结束页面和直播页面(没有在直播状态中)的关闭按钮点击事件
        super.closeButtonWhenNotInLiveClickListener();
        finish();
    }

    @Override
    public void replayButtonClickListener() {
        //直播结束页的重播按钮点击事件
        super.replayButtonClickListener();
        finish();
    }

    @Override
    public void backClickListener() {
        //重试页面返回按钮的点击事件
        super.backClickListener();
        finish();
    }

    @Override
    public void onContributionListClick() {
        super.onContributionListClick();
        Toast.makeText(this, "您点击了贡献榜", Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onStreamerState(int flag, String extra) {
        //推流状态信息,输出状态即可,与 initCNStreamError(int flag) 包含初始化失败状态
    }

    @Override
    public void initCNStreamError(int flag) {
        //初始化CNStreamSDK失败,可能的原因是开启摄像头失败、转码失败、编码失败、
        Log.e("DemoView", String.valueOf(flag));
        switch (flag) {
            case IStreamer.cnstream_error_create_stream_server:
                //创建直播活动请求服务器失败
                break;
            case IStreamer.cnstream_error_create_stream_network:
                //创建直播活动时网络连接失败
                break;
            case IStreamer.cnstream_error_create_stream_other:
                //创建直播活动时失败
                break;
            case IStreamer.cnstream_error_stop_stream:
                //停止直播活动失败
                break;
            case IStreamer.cnstream_init_error_instop:
                //初始化失败 正在停止推流
                break;
            case IStreamer.cnstream_error_dns_parse_failed:
                //url域名解析失败
                break;
            case IStreamer.cnstream_error_av_async:
                //音视频采集pts差值超过5s	音视频采集pts具体差值,单位ms
                break;
            case IStreamer.cnstream_video_encoder_error_unsupported:
                //编码器初始化失败
                break;
            case IStreamer.cnstream_video_encoder_error_unknown:
                //视频编码失败
                break;
            case IStreamer.cnstream_audio_encoder_error_unsupported:
                //音频初始化失败
                break;
            case IStreamer.cnstream_audio_encoder_error_unknown:
                //音频编码失败
                break;
            case IStreamer.cnstream_audio_recorder_error_start_failed:
                //录音开启失败
                break;
            case IStreamer.cnstream_audio_recorder_error_unknown:
                //录音开启未知错误
                break;
            case IStreamer.cnstream_camera_error_unknown:
                //摄像头未知错误
                break;
            case IStreamer.cnstream_camera_error_start_failed:
                //打开摄像头失败
                break;
            case IStreamer.cnstream_camera_error_server_died:
                //系统Camera服务进程退出
                break;
        }
//        finish();
    }

    //聊天室事件监听
    @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: //与服务器建立连接
                hideMessage();//隐藏错误信息
                break;
            case ChatState.StateReconnect: //与服务器重新连接
                hideMessage();
                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: //消息发送失败
                //TODO Toast提示
                break;
            case ChatState.ErrorSendNoConnect: //消息发送失败 没有连接聊天室
                //TODO Toast提示
                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);
        }
    };
}