huangxinbao

add xdysdk for push onPause() and resume().

modify package for push and play.
@@ -53,4 +53,5 @@ dependencies { @@ -53,4 +53,5 @@ dependencies {
53 annotationProcessor 'com.jakewharton:butterknife-compiler:8.5.1' 53 annotationProcessor 'com.jakewharton:butterknife-compiler:8.5.1'
54 compile 'com.qiniu:happy-dns:0.2.+' 54 compile 'com.qiniu:happy-dns:0.2.+'
55 compile 'org.greenrobot:eventbus:3.0.0' 55 compile 'org.greenrobot:eventbus:3.0.0'
  56 + compile 'com.flyco.tablayout:FlycoTabLayout_Lib:2.1.2@aar'
56 } 57 }
1 package com.mang.xdy.demo.activity; 1 package com.mang.xdy.demo.activity;
2 ; 2 ;
3 -import android.Manifest;  
4 import android.annotation.SuppressLint; 3 import android.annotation.SuppressLint;
5 import android.app.ProgressDialog; 4 import android.app.ProgressDialog;
6 import android.content.DialogInterface; 5 import android.content.DialogInterface;
7 -import android.content.pm.PackageManager;  
8 import android.os.Bundle; 6 import android.os.Bundle;
9 import android.os.Handler; 7 import android.os.Handler;
10 import android.os.Message; 8 import android.os.Message;
11 import android.support.design.widget.TabLayout; 9 import android.support.design.widget.TabLayout;
12 -import android.support.v4.app.ActivityCompat;  
13 -import android.support.v4.content.PermissionChecker;  
14 import android.support.v7.app.AlertDialog; 10 import android.support.v7.app.AlertDialog;
15 import android.support.v7.app.AppCompatActivity; 11 import android.support.v7.app.AppCompatActivity;
16 import android.text.TextUtils; 12 import android.text.TextUtils;
@@ -25,13 +21,14 @@ import android.widget.ImageView; @@ -25,13 +21,14 @@ import android.widget.ImageView;
25 import android.widget.RelativeLayout; 21 import android.widget.RelativeLayout;
26 import android.widget.SeekBar; 22 import android.widget.SeekBar;
27 import android.widget.TextView; 23 import android.widget.TextView;
28 -import android.widget.Toast;  
29 24
  25 +import com.flyco.tablayout.SlidingTabLayout;
  26 +import com.flyco.tablayout.listener.OnTabSelectListener;
30 import com.google.gson.Gson; 27 import com.google.gson.Gson;
31 import com.mang.xdy.bean.VideoPlayBean; 28 import com.mang.xdy.bean.VideoPlayBean;
32 import com.mang.xdy.cache.ACache; 29 import com.mang.xdy.cache.ACache;
33 import com.mang.xdy.common.Constants; 30 import com.mang.xdy.common.Constants;
34 -import com.mang.xdy.core.SPUtil; 31 +import com.mang.xdy.utils.SPUtil;
35 import com.mang.xdy.core.XdySdk; 32 import com.mang.xdy.core.XdySdk;
36 import com.mang.xdy.demo.R; 33 import com.mang.xdy.demo.R;
37 import com.mang.xdy.demo.adapter.SimpleFragmentPagerAdapter; 34 import com.mang.xdy.demo.adapter.SimpleFragmentPagerAdapter;
@@ -46,6 +43,7 @@ import com.mang.xdy.demo.utils.ToastUtil; @@ -46,6 +43,7 @@ import com.mang.xdy.demo.utils.ToastUtil;
46 import com.mang.xdy.demo.widget.dialog.LoginDialog; 43 import com.mang.xdy.demo.widget.dialog.LoginDialog;
47 import com.mang.xdy.demo.widget.view.NoScrollViewPager; 44 import com.mang.xdy.demo.widget.view.NoScrollViewPager;
48 import com.mang.xdy.listener.ObserverListener; 45 import com.mang.xdy.listener.ObserverListener;
  46 +import com.mang.xdy.utils.SystemUtils;
49 import com.mang.xdy.utils.UIUtils; 47 import com.mang.xdy.utils.UIUtils;
50 import com.mang.xdy.utils.XdyLogUtil; 48 import com.mang.xdy.utils.XdyLogUtil;
51 import com.mang.xdy.utils.XdyStringUtils; 49 import com.mang.xdy.utils.XdyStringUtils;
@@ -54,6 +52,8 @@ import com.pili.pldroid.player.PLMediaPlayer; @@ -54,6 +52,8 @@ import com.pili.pldroid.player.PLMediaPlayer;
54 import com.pili.pldroid.player.widget.PLVideoTextureView; 52 import com.pili.pldroid.player.widget.PLVideoTextureView;
55 import com.pili.pldroid.player.widget.PLVideoView; 53 import com.pili.pldroid.player.widget.PLVideoView;
56 import org.greenrobot.eventbus.EventBus; 54 import org.greenrobot.eventbus.EventBus;
  55 +import org.greenrobot.eventbus.Subscribe;
  56 +import org.greenrobot.eventbus.ThreadMode;
57 import org.json.JSONException; 57 import org.json.JSONException;
58 import org.json.JSONObject; 58 import org.json.JSONObject;
59 59
@@ -103,8 +103,13 @@ public class VideoPlayActivity extends AppCompatActivity implements ObserverList @@ -103,8 +103,13 @@ public class VideoPlayActivity extends AppCompatActivity implements ObserverList
103 ImageView mImageView_Back; 103 ImageView mImageView_Back;
104 @BindView(R.id.tv_videoPlay_className) 104 @BindView(R.id.tv_videoPlay_className)
105 TextView mTextView_ClassName; 105 TextView mTextView_ClassName;
  106 + @BindView(R.id.stl_videoPlay_tab)
  107 + SlidingTabLayout mSlidingTab;
106 /*课堂名字*/ 108 /*课堂名字*/
107 private String className; 109 private String className;
  110 + /*课堂类型*/
  111 + private int classType=1;
  112 + private String[] titles;
108 private Handler mmHandler = new Handler() { 113 private Handler mmHandler = new Handler() {
109 @Override 114 @Override
110 public void handleMessage(Message msg) { 115 public void handleMessage(Message msg) {
@@ -137,6 +142,8 @@ public class VideoPlayActivity extends AppCompatActivity implements ObserverList @@ -137,6 +142,8 @@ public class VideoPlayActivity extends AppCompatActivity implements ObserverList
137 jsonObject = new JSONObject(userJson); 142 jsonObject = new JSONObject(userJson);
138 seek = jsonObject.optLong("recordPlaybackMaxTime"); 143 seek = jsonObject.optLong("recordPlaybackMaxTime");
139 className=jsonObject.optString("className"); 144 className=jsonObject.optString("className");
  145 + classType=jsonObject.optInt("classType");
  146 +
140 } catch (JSONException e) { 147 } catch (JSONException e) {
141 e.printStackTrace(); 148 e.printStackTrace();
142 } 149 }
@@ -145,8 +152,13 @@ public class VideoPlayActivity extends AppCompatActivity implements ObserverList @@ -145,8 +152,13 @@ public class VideoPlayActivity extends AppCompatActivity implements ObserverList
145 } 152 }
146 if(replay) { 153 if(replay) {
147 initRecordSeek(userJson); 154 initRecordSeek(userJson);
  155 + }else {
  156 + if (classType == 1) {
  157 + img_videoPlay_start.setVisibility(View.GONE);
  158 + } else {
  159 + img_videoPlay_start.setVisibility(View.VISIBLE);
  160 + }
148 } 161 }
149 -  
150 break; 162 break;
151 case Constants.VIDEO_PLAY: 163 case Constants.VIDEO_PLAY:
152 //播放视频 164 //播放视频
@@ -188,6 +200,7 @@ public class VideoPlayActivity extends AppCompatActivity implements ObserverList @@ -188,6 +200,7 @@ public class VideoPlayActivity extends AppCompatActivity implements ObserverList
188 super.onCreate(savedInstanceState); 200 super.onCreate(savedInstanceState);
189 getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); //屏幕常亮 201 getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); //屏幕常亮
190 setContentView(R.layout.activity_video_play); 202 setContentView(R.layout.activity_video_play);
  203 + EventBus.getDefault().register(this);
191 ButterKnife.bind(this); 204 ButterKnife.bind(this);
192 aCache=ACache.get(this); 205 aCache=ACache.get(this);
193 xdySdk = XdySdk.getXdyInstance(); 206 xdySdk = XdySdk.getXdyInstance();
@@ -212,7 +225,6 @@ public class VideoPlayActivity extends AppCompatActivity implements ObserverList @@ -212,7 +225,6 @@ public class VideoPlayActivity extends AppCompatActivity implements ObserverList
212 if(!replay){ 225 if(!replay){
213 mVideoView.setVisibility(View.GONE); 226 mVideoView.setVisibility(View.GONE);
214 mMediaContainer.setVisibility(View.GONE); 227 mMediaContainer.setVisibility(View.GONE);
215 - img_videoPlay_start.setVisibility(View.VISIBLE);  
216 // btn_videoPlay_stopPublish.setVisibility(View.VISIBLE); 228 // btn_videoPlay_stopPublish.setVisibility(View.VISIBLE);
217 }else{ 229 }else{
218 surfaceviewPlayVideo.setVisibility(View.GONE); 230 surfaceviewPlayVideo.setVisibility(View.GONE);
@@ -246,6 +258,7 @@ public class VideoPlayActivity extends AppCompatActivity implements ObserverList @@ -246,6 +258,7 @@ public class VideoPlayActivity extends AppCompatActivity implements ObserverList
246 img_videoPlay_start.setEnabled(false); 258 img_videoPlay_start.setEnabled(false);
247 btn_videoPlay_stopPublish.setEnabled(true); 259 btn_videoPlay_stopPublish.setEnabled(true);
248 sh = surfaceView_publish.getHolder(); 260 sh = surfaceView_publish.getHolder();
  261 + sh.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
249 surfaceView_publish.setZOrderMediaOverlay(true); 262 surfaceView_publish.setZOrderMediaOverlay(true);
250 xdySdk.api("publishVideo", "", surfaceView_publish, VideoPlayActivity.this); 263 xdySdk.api("publishVideo", "", surfaceView_publish, VideoPlayActivity.this);
251 isVideoMode=true; 264 isVideoMode=true;
@@ -260,13 +273,37 @@ public class VideoPlayActivity extends AppCompatActivity implements ObserverList @@ -260,13 +273,37 @@ public class VideoPlayActivity extends AppCompatActivity implements ObserverList
260 }); 273 });
261 } 274 }
262 275
263 - public void setTablayout() { 276 +// public void setTablayout() {
  277 +// pagerAdapter = new SimpleFragmentPagerAdapter(getSupportFragmentManager(), this,replay);
  278 +// viewPager.setAdapter(pagerAdapter);
  279 +// viewPager.setOnRplayTouchListener(this);
  280 +// viewPager.setPagingEnabled(false);
  281 +// tabLayout = (TabLayout) findViewById(R.id.sliding_tabs);
  282 +// tabLayout.setupWithViewPager(viewPager,false);
  283 +// tabLayout.setTabMode(TabLayout.MODE_FIXED);
  284 +// }
  285 +
  286 + public void setTablayout(){
  287 + titles = new String[]{"文档", "聊天"};
264 pagerAdapter = new SimpleFragmentPagerAdapter(getSupportFragmentManager(), this,replay); 288 pagerAdapter = new SimpleFragmentPagerAdapter(getSupportFragmentManager(), this,replay);
265 viewPager.setAdapter(pagerAdapter); 289 viewPager.setAdapter(pagerAdapter);
266 viewPager.setOnRplayTouchListener(this); 290 viewPager.setOnRplayTouchListener(this);
267 - tabLayout = (TabLayout) findViewById(R.id.sliding_tabs);  
268 - tabLayout.setupWithViewPager(viewPager,false);  
269 - tabLayout.setTabMode(TabLayout.MODE_FIXED); 291 + viewPager.setPagingEnabled(false);
  292 + mSlidingTab.setViewPager(viewPager, titles);
  293 + mSlidingTab.setOnTabSelectListener(new OnTabSelectListener() {
  294 + @Override
  295 + public void onTabSelect(int position) {
  296 + if (1 == position && replay) {
  297 + //为了避免回访时切换界面出现桌面 暂时先这样写了
  298 + showMediaContainer(TIME_OUT);
  299 + }
  300 + }
  301 +
  302 + @Override
  303 + public void onTabReselect(int position) {
  304 +
  305 + }
  306 + });
270 } 307 }
271 308
272 //判断解析是否有密码 309 //判断解析是否有密码
@@ -323,7 +360,7 @@ public class VideoPlayActivity extends AppCompatActivity implements ObserverList @@ -323,7 +360,7 @@ public class VideoPlayActivity extends AppCompatActivity implements ObserverList
323 */ 360 */
324 public void playVideo(String response) { 361 public void playVideo(String response) {
325 362
326 - progressDialogDismiss(); 363 +// progressDialogDismiss();
327 364
328 if(replay){ 365 if(replay){
329 playRecord(response); 366 playRecord(response);
@@ -362,6 +399,7 @@ public class VideoPlayActivity extends AppCompatActivity implements ObserverList @@ -362,6 +399,7 @@ public class VideoPlayActivity extends AppCompatActivity implements ObserverList
362 399
363 @Override 400 @Override
364 public void onBackPressed() { 401 public void onBackPressed() {
  402 + UIUtils.closeDialog(mLoginDialog);
365 exit_dialog(); 403 exit_dialog();
366 } 404 }
367 405
@@ -440,6 +478,19 @@ public class VideoPlayActivity extends AppCompatActivity implements ObserverList @@ -440,6 +478,19 @@ public class VideoPlayActivity extends AppCompatActivity implements ObserverList
440 478
441 479
442 } 480 }
  481 + @Subscribe(threadMode = ThreadMode.POSTING)
  482 + public void finishActivity(String res){
  483 + if("home".equals(res)) {
  484 + this.finish();
  485 + }
  486 +
  487 + }
  488 +
  489 + @Override
  490 + protected void onDestroy() {
  491 + super.onDestroy();
  492 + EventBus.getDefault().unregister(this);
  493 + }
443 494
444 @Override 495 @Override
445 protected void onPause() { 496 protected void onPause() {
@@ -453,7 +504,7 @@ public class VideoPlayActivity extends AppCompatActivity implements ObserverList @@ -453,7 +504,7 @@ public class VideoPlayActivity extends AppCompatActivity implements ObserverList
453 if(replay) { 504 if(replay) {
454 xdySdk.api("pauseRecordPlayback", ""); 505 xdySdk.api("pauseRecordPlayback", "");
455 } 506 }
456 -// xdySdk.onPublisherPause(); 507 + xdySdk.onPublisherPause();
457 } 508 }
458 509
459 @Override 510 @Override
@@ -467,13 +518,15 @@ public class VideoPlayActivity extends AppCompatActivity implements ObserverList @@ -467,13 +518,15 @@ public class VideoPlayActivity extends AppCompatActivity implements ObserverList
467 if(replay) { 518 if(replay) {
468 xdySdk.api("startRecordPlayback", ""); 519 xdySdk.api("startRecordPlayback", "");
469 } 520 }
470 -// xdySdk.onPublisherResume(); 521 + xdySdk.onPublisherResume();
471 } 522 }
472 523
473 /** 524 /**
474 * 错误情况退出 525 * 错误情况退出
475 */ 526 */
476 public void exit() { 527 public void exit() {
  528 + progressDialogDismiss();
  529 + isDefaultExit=true;
477 xdySdk.api("stopPublishVideo",""); 530 xdySdk.api("stopPublishVideo","");
478 xdySdk.api("leaveClass", ""); 531 xdySdk.api("leaveClass", "");
479 xdySdk.remove(this); 532 xdySdk.remove(this);
@@ -534,7 +587,7 @@ public class VideoPlayActivity extends AppCompatActivity implements ObserverList @@ -534,7 +587,7 @@ public class VideoPlayActivity extends AppCompatActivity implements ObserverList
534 } 587 }
535 if (mErrorDialog != null) 588 if (mErrorDialog != null)
536 return; 589 return;
537 - 590 + progressDialogDismiss();
538 mErrorDialog = new AlertDialog.Builder(this) 591 mErrorDialog = new AlertDialog.Builder(this)
539 .setTitle("退出") 592 .setTitle("退出")
540 .setMessage("您设备的网络属于断开状态,请重新进入") 593 .setMessage("您设备的网络属于断开状态,请重新进入")
@@ -548,7 +601,6 @@ public class VideoPlayActivity extends AppCompatActivity implements ObserverList @@ -548,7 +601,6 @@ public class VideoPlayActivity extends AppCompatActivity implements ObserverList
548 }) 601 })
549 .create(); 602 .create();
550 mErrorDialog.setCanceledOnTouchOutside(false); 603 mErrorDialog.setCanceledOnTouchOutside(false);
551 -  
552 mErrorDialog.show(); 604 mErrorDialog.show();
553 605
554 } 606 }
@@ -27,14 +27,13 @@ import android.widget.TextView; @@ -27,14 +27,13 @@ import android.widget.TextView;
27 27
28 28
29 import com.mang.xdy.common.Constants; 29 import com.mang.xdy.common.Constants;
30 -import com.mang.xdy.core.SPUtil; 30 +import com.mang.xdy.utils.SPUtil;
31 import com.mang.xdy.demo.R; 31 import com.mang.xdy.demo.R;
32 import com.mang.xdy.demo.bean.JoinClassSuccessEntity; 32 import com.mang.xdy.demo.bean.JoinClassSuccessEntity;
33 import com.mang.xdy.demo.bean.Message; 33 import com.mang.xdy.demo.bean.Message;
34 import com.mang.xdy.demo.fragment.ChatFragment; 34 import com.mang.xdy.demo.fragment.ChatFragment;
35 import com.mang.xdy.demo.utils.JsonUtil; 35 import com.mang.xdy.demo.utils.JsonUtil;
36 import com.mang.xdy.demo.widget.chat.UrlUtils; 36 import com.mang.xdy.demo.widget.chat.UrlUtils;
37 -import com.mang.xdy.utils.XdyLogUtil;  
38 37
39 import org.kymjs.kjframe.KJBitmap; 38 import org.kymjs.kjframe.KJBitmap;
40 39
@@ -16,14 +16,12 @@ import android.widget.ListView; @@ -16,14 +16,12 @@ import android.widget.ListView;
16 16
17 import com.google.gson.Gson; 17 import com.google.gson.Gson;
18 import com.mang.xdy.common.Constants; 18 import com.mang.xdy.common.Constants;
19 -import com.mang.xdy.core.SPUtil; 19 +import com.mang.xdy.utils.SPUtil;
20 import com.mang.xdy.core.XdySdk; 20 import com.mang.xdy.core.XdySdk;
21 import com.mang.xdy.demo.R; 21 import com.mang.xdy.demo.R;
22 -import com.mang.xdy.demo.activity.VideoPlayActivity;  
23 import com.mang.xdy.demo.adapter.ChatAdapter; 22 import com.mang.xdy.demo.adapter.ChatAdapter;
24 import com.mang.xdy.demo.bean.ChatMsgEntity; 23 import com.mang.xdy.demo.bean.ChatMsgEntity;
25 import com.mang.xdy.demo.bean.Faceicon; 24 import com.mang.xdy.demo.bean.Faceicon;
26 -import com.mang.xdy.demo.bean.JoinClassBean;  
27 import com.mang.xdy.demo.bean.JoinClassSuccessEntity; 25 import com.mang.xdy.demo.bean.JoinClassSuccessEntity;
28 import com.mang.xdy.demo.bean.Message; 26 import com.mang.xdy.demo.bean.Message;
29 import com.mang.xdy.demo.bean.SendChatMsgEntity; 27 import com.mang.xdy.demo.bean.SendChatMsgEntity;
@@ -33,7 +31,6 @@ import com.mang.xdy.demo.widget.chat.OnOperationListener; @@ -33,7 +31,6 @@ import com.mang.xdy.demo.widget.chat.OnOperationListener;
33 import com.mang.xdy.demo.widget.emoji.DisplayRules; 31 import com.mang.xdy.demo.widget.emoji.DisplayRules;
34 import com.mang.xdy.listener.ObserverListener; 32 import com.mang.xdy.listener.ObserverListener;
35 import com.mang.xdy.utils.XdyLogUtil; 33 import com.mang.xdy.utils.XdyLogUtil;
36 -import com.mang.xdy.utils.XdyStringUtils;  
37 34
38 import org.greenrobot.eventbus.EventBus; 35 import org.greenrobot.eventbus.EventBus;
39 import org.greenrobot.eventbus.Subscribe; 36 import org.greenrobot.eventbus.Subscribe;
@@ -43,7 +40,6 @@ import org.kymjs.kjframe.utils.KJLoger; @@ -43,7 +40,6 @@ import org.kymjs.kjframe.utils.KJLoger;
43 import org.kymjs.kjframe.utils.StringUtils; 40 import org.kymjs.kjframe.utils.StringUtils;
44 41
45 import java.io.File; 42 import java.io.File;
46 -import java.math.MathContext;  
47 import java.util.ArrayList; 43 import java.util.ArrayList;
48 import java.util.List; 44 import java.util.List;
49 45
@@ -11,6 +11,8 @@ import com.mang.xdy.demo.R; @@ -11,6 +11,8 @@ import com.mang.xdy.demo.R;
11 import com.mang.xdy.demo.dialog.BaseDialog; 11 import com.mang.xdy.demo.dialog.BaseDialog;
12 import com.mang.xdy.utils.UIUtils; 12 import com.mang.xdy.utils.UIUtils;
13 13
  14 +import org.greenrobot.eventbus.EventBus;
  15 +
14 import me.yokeyword.fragmentation.SupportFragment; 16 import me.yokeyword.fragmentation.SupportFragment;
15 17
16 18
@@ -72,5 +74,7 @@ public class LoginDialog extends BaseDialog { @@ -72,5 +74,7 @@ public class LoginDialog extends BaseDialog {
72 if (fragment != null && fragment.isAdded()) { 74 if (fragment != null && fragment.isAdded()) {
73 fragment.pop(); 75 fragment.pop();
74 } 76 }
  77 + dismiss();
  78 + EventBus.getDefault().post("home");
75 } 79 }
76 } 80 }
@@ -16,6 +16,7 @@ @@ -16,6 +16,7 @@
16 android:layout_width="match_parent" 16 android:layout_width="match_parent"
17 android:layout_height="wrap_content" 17 android:layout_height="wrap_content"
18 android:hint="请输入课堂号" 18 android:hint="请输入课堂号"
  19 + android:inputType="number"
19 android:text="1332699420"/> 20 android:text="1332699420"/>
20 <TextView 21 <TextView
21 android:layout_width="match_parent" 22 android:layout_width="match_parent"
@@ -25,6 +26,7 @@ @@ -25,6 +26,7 @@
25 android:id="@+id/edt_home_role" 26 android:id="@+id/edt_home_role"
26 android:layout_width="match_parent" 27 android:layout_width="match_parent"
27 android:layout_height="wrap_content" 28 android:layout_height="wrap_content"
  29 + android:hint="请输入角色"
28 android:text="normal" 30 android:text="normal"
29 /> 31 />
30 <TextView 32 <TextView
@@ -37,6 +39,7 @@ @@ -37,6 +39,7 @@
37 android:id="@+id/edt_home_serviceIp" 39 android:id="@+id/edt_home_serviceIp"
38 android:layout_width="match_parent" 40 android:layout_width="match_parent"
39 android:layout_height="wrap_content" 41 android:layout_height="wrap_content"
  42 + android:hint="请输入服务器地址"
40 android:text="112.126.80.182:90" 43 android:text="112.126.80.182:90"
41 /> 44 />
42 <TextView 45 <TextView
@@ -48,6 +51,7 @@ @@ -48,6 +51,7 @@
48 android:id="@+id/edt_home_userId" 51 android:id="@+id/edt_home_userId"
49 android:layout_width="match_parent" 52 android:layout_width="match_parent"
50 android:layout_height="wrap_content" 53 android:layout_height="wrap_content"
  54 + android:hint="请输入用户id"
51 android:text="0" 55 android:text="0"
52 /> 56 />
53 <Button 57 <Button
@@ -55,13 +59,22 @@ @@ -55,13 +59,22 @@
55 android:layout_width="match_parent" 59 android:layout_width="match_parent"
56 android:layout_height="wrap_content" 60 android:layout_height="wrap_content"
57 android:text="进入课堂" 61 android:text="进入课堂"
  62 + android:textColor="@color/white"
  63 + android:background="@drawable/home_selector_bottom_btn_blue"
  64 + android:layout_marginLeft="15dp"
  65 + android:layout_marginRight="15dp"
58 66
59 /> 67 />
60 <Button 68 <Button
61 android:id="@+id/btn_home_enter_publisher" 69 android:id="@+id/btn_home_enter_publisher"
62 android:layout_width="match_parent" 70 android:layout_width="match_parent"
63 android:layout_height="wrap_content" 71 android:layout_height="wrap_content"
  72 + android:layout_marginTop="15dp"
  73 + android:layout_marginLeft="15dp"
  74 + android:layout_marginRight="15dp"
64 android:text="录制回放" 75 android:text="录制回放"
  76 + android:textColor="@color/white"
  77 + android:background="@drawable/home_selector_bottom_btn_green"
65 /> 78 />
66 79
67 </LinearLayout> 80 </LinearLayout>
1 <?xml version="1.0" encoding="utf-8"?> 1 <?xml version="1.0" encoding="utf-8"?>
2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
3 xmlns:tools="http://schemas.android.com/tools" 3 xmlns:tools="http://schemas.android.com/tools"
  4 + xmlns:custom="http://schemas.android.com/apk/res-auto"
4 android:id="@+id/activity_video_play" 5 android:id="@+id/activity_video_play"
5 android:layout_width="match_parent" 6 android:layout_width="match_parent"
6 android:layout_height="match_parent" 7 android:layout_height="match_parent"
@@ -127,7 +128,25 @@ @@ -127,7 +128,25 @@
127 android:id="@+id/sliding_tabs" 128 android:id="@+id/sliding_tabs"
128 android:layout_width="match_parent" 129 android:layout_width="match_parent"
129 android:layout_height="wrap_content" 130 android:layout_height="wrap_content"
  131 + android:visibility="gone"
  132 +
130 /> 133 />
  134 + <com.flyco.tablayout.SlidingTabLayout
  135 + android:id="@+id/stl_videoPlay_tab"
  136 + android:layout_width="match_parent"
  137 + android:layout_height="@dimen/ui_titlebar_height"
  138 + android:layout_alignParentLeft="true"
  139 + android:layout_alignParentStart="true"
  140 + android:layout_below="@+id/fl_videoview_container"
  141 + android:background="#fafafa"
  142 + custom:tl_indicator_color="@color/home_tab_selected"
  143 + custom:tl_indicator_corner_radius="1.5dp"
  144 + custom:tl_indicator_height="@dimen/ui_DIMEN_5.0PX"
  145 + custom:tl_tab_space_equal="true"
  146 + custom:tl_textSelectColor="@color/home_tab_selected"
  147 + custom:tl_textUnselectColor="@color/home_tab_unselected"
  148 +
  149 + custom:tl_textsize="@dimen/ui_DIMEN_28.0PX"/>
131 <com.mang.xdy.demo.widget.view.NoScrollViewPager 150 <com.mang.xdy.demo.widget.view.NoScrollViewPager
132 android:id="@+id/viewpager" 151 android:id="@+id/viewpager"
133 android:layout_width="match_parent" 152 android:layout_width="match_parent"
@@ -81,14 +81,14 @@ public class Threeivity extends AppCompatActivity implements View.OnClickListene @@ -81,14 +81,14 @@ public class Threeivity extends AppCompatActivity implements View.OnClickListene
81 // SmartPlayerNoLayout smartPlayerNoLayout=new SmartPlayerNoLayout(surface, Threeivity.this); 81 // SmartPlayerNoLayout smartPlayerNoLayout=new SmartPlayerNoLayout(surface, Threeivity.this);
82 // startActivity(new Intent(Threeivity.this,SmartPlayer.class)); 82 // startActivity(new Intent(Threeivity.this,SmartPlayer.class));
83 String url= "rtmp://123.56.205.116:6000/live/h5dev_1999957388_980_983041_1491813919";; 83 String url= "rtmp://123.56.205.116:6000/live/h5dev_1999957388_980_983041_1491813919";;
84 -//// XdyPlayerCore xdyPlayer=new XdyPlayerCore(url,surface,Threeivity.this); 84 +//// XdyPlayer xdyPlayer=new XdyPlayer(url,surface,Threeivity.this);
85 //// xdyPlayer.playVideo(url,surface); 85 //// xdyPlayer.playVideo(url,surface);
86 // XdySdk.setAsyncApi("playAudio",url,null,Threeivity.this); 86 // XdySdk.setAsyncApi("playAudio",url,null,Threeivity.this);
87 // XdySdk.setAsyncApi("playVideo",url,surface,Threeivity.this,new EventHande()); 87 // XdySdk.setAsyncApi("playVideo",url,surface,Threeivity.this,new EventHande());
88 xdySdk.api("publishVideo",url,surface,Threeivity.this); 88 xdySdk.api("publishVideo",url,surface,Threeivity.this);
89 // xdyPlayer.playVideo("",surface); 89 // xdyPlayer.playVideo("",surface);
90 90
91 -// XdyPublisherCore xdyPublisherCore=new XdyPublisherCore(Threeivity.this); 91 +// XdyPublisher xdyPublisherCore=new XdyPublisher(Threeivity.this);
92 // xdyPublisherCore.publish("",surface); 92 // xdyPublisherCore.publish("",surface);
93 } 93 }
94 }); 94 });
1 -package com.mang.xdy.core;  
2 -  
3 -import android.content.Context;  
4 -import android.content.SharedPreferences;  
5 -  
6 -import java.io.ByteArrayOutputStream;  
7 -import java.io.IOException;  
8 -import java.io.InputStream;  
9 -  
10 -  
11 -public class SPUtil {  
12 - private static SharedPreferences mSp;  
13 -  
14 - private static SharedPreferences getSharedPreferences(Context context) {  
15 - if (mSp == null) {  
16 - mSp = context.getSharedPreferences("config", Context.MODE_PRIVATE);  
17 - }  
18 - return mSp;  
19 - }  
20 -  
21 - public static void putBoolean(Context context, String key, boolean value) {  
22 - // SharedPreferences sp = mContext.getSharedPreferences("config",  
23 - // Context.MODE_PRIVATE);  
24 - getSharedPreferences(context).edit().putBoolean(key, value).commit();  
25 - }  
26 -  
27 - public static boolean getBoolean(Context context, String key, boolean defValue) {  
28 - // SharedPreferences sp = mContext.getSharedPreferences("config",  
29 - // Context.MODE_PRIVATE);  
30 - return getSharedPreferences(context).getBoolean(key, defValue);  
31 - }  
32 -  
33 - public static void putString(Context context, String key, String value) {  
34 - getSharedPreferences(context).edit().putString(key, value).commit();  
35 - }  
36 -  
37 - public static String getString(Context context, String key, String defValue) {  
38 - return getSharedPreferences(context).getString(key, defValue);  
39 - }  
40 -  
41 - public static void putInt(Context context, String key, int value) {  
42 - getSharedPreferences(context).edit().putInt(key, value).commit();  
43 - }  
44 -  
45 - public static int getInt(Context context, String key, int defValue) {  
46 - return getSharedPreferences(context).getInt(key, defValue);  
47 - }  
48 -  
49 - /**  
50 - * 移除一个字符串值  
51 - *  
52 - * @param context  
53 - * @param key  
54 - */  
55 - public static void removeString(Context context, String key) {  
56 - getSharedPreferences(context).edit().remove(key).commit();  
57 - }  
58 -  
59 - /**  
60 - * 把流里的内容解析成字符串  
61 - *  
62 - * @param is  
63 - * @return  
64 - * @throws IOException  
65 - */  
66 - public static String streamToString(InputStream is) throws IOException {  
67 - ByteArrayOutputStream baos = new ByteArrayOutputStream();  
68 - byte[] buffer = new byte[1024];  
69 - int len = -1;  
70 - while ((len = is.read(buffer)) != -1) {  
71 - baos.write(buffer, 0, len);  
72 - }  
73 - String string = baos.toString();  
74 - baos.close();  
75 - is.close();  
76 - return string;  
77 - }  
78 - public static long getLong(String key,long defValue) {  
79 - return mSp.getLong(key, defValue);  
80 - }  
81 - public static void setLong(Context context, String key, Long value) {  
82 - getSharedPreferences(context).edit().putLong(key, value).commit();  
83 - }  
84 -}  
@@ -5,19 +5,24 @@ package com.mang.xdy.core; @@ -5,19 +5,24 @@ package com.mang.xdy.core;
5 */ 5 */
6 6
7 import android.content.Context; 7 import android.content.Context;
  8 +import android.graphics.Bitmap;
8 import android.os.Build; 9 import android.os.Build;
9 import android.text.NoCopySpan; 10 import android.text.NoCopySpan;
10 import android.text.TextUtils; 11 import android.text.TextUtils;
11 import android.webkit.JavascriptInterface; 12 import android.webkit.JavascriptInterface;
12 import android.webkit.ValueCallback; 13 import android.webkit.ValueCallback;
13 import android.webkit.WebChromeClient; 14 import android.webkit.WebChromeClient;
  15 +import android.webkit.WebResourceError;
  16 +import android.webkit.WebResourceRequest;
14 import android.webkit.WebSettings; 17 import android.webkit.WebSettings;
15 import android.webkit.WebView; 18 import android.webkit.WebView;
  19 +import android.webkit.WebViewClient;
16 20
  21 +import com.mang.xdy.common.Constants;
17 import com.mang.xdy.utils.XdyLogUtil; 22 import com.mang.xdy.utils.XdyLogUtil;
  23 +import com.mang.xdy.utils.XdyStringUtils;
18 24
19 /** 25 /**
20 - * 需要提供两个参数的接口,一个参数的接口,同时给出回调()  
21 * 数据的异常检测都放在最外层(便于给用户提示),这层默认数据都是完整 26 * 数据的异常检测都放在最外层(便于给用户提示),这层默认数据都是完整
22 * 核心WebView 处理和调用的js 27 * 核心WebView 处理和调用的js
23 */ 28 */
@@ -54,7 +59,6 @@ public class XdyJsCore { @@ -54,7 +59,6 @@ public class XdyJsCore {
54 if(context==null){ 59 if(context==null){
55 return; 60 return;
56 } 61 }
57 - //清理Webview缓存数据库  
58 mXdyJavaScript=new XdyJavaScript(); 62 mXdyJavaScript=new XdyJavaScript();
59 mWebView=new WebView(context); 63 mWebView=new WebView(context);
60 WebSettings webSettings=mWebView.getSettings(); 64 WebSettings webSettings=mWebView.getSettings();
@@ -69,6 +73,23 @@ public class XdyJsCore { @@ -69,6 +73,23 @@ public class XdyJsCore {
69 // XdyLogUtil.e("message:"+message+" lineNumber:"+" sourceId:"+sourceID); 73 // XdyLogUtil.e("message:"+message+" lineNumber:"+" sourceId:"+sourceID);
70 } 74 }
71 }); 75 });
  76 + mWebView.setWebViewClient(new WebViewClient(){
  77 + @Override
  78 + public void onPageStarted(WebView view, String url, Bitmap favicon) {
  79 + super.onPageStarted(view, url, favicon);
  80 + }
  81 +
  82 + @Override
  83 + public void onPageFinished(WebView view, String url) {
  84 + super.onPageFinished(view, url);
  85 + }
  86 +
  87 +
  88 + @Override
  89 + public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
  90 + super.onReceivedError(view, errorCode, description, failingUrl);
  91 + }
  92 + });
72 mWebView.post(new Runnable() { 93 mWebView.post(new Runnable() {
73 @Override 94 @Override
74 public void run() { 95 public void run() {
1 -package com.mang.xdy.core;  
2 -  
3 -import android.content.Context;  
4 -import android.util.Log;  
5 -import android.view.SurfaceView;  
6 -  
7 -import com.daniulive.smartplayer.SmartPlayerJni;  
8 -import com.eventhandle.SmartEventCallback;  
9 -import com.mang.xdy.utils.XdyLogUtil;  
10 -  
11 -/**  
12 - * Created by abao on 2017/4/5.  
13 - */  
14 -  
15 -/**  
16 - * 播放视频的方法核心方法(供内部调用,外部继续封装)  
17 - */  
18 -public class XdyPlayerCore {  
19 -  
20 - private long playerHandle = 0;  
21 - private static final int PORTRAIT = 1; //竖屏  
22 - private static final int LANDSCAPE = 2; //横屏  
23 - private static final String TAG = "XdyPlayer";  
24 -  
25 - private SmartPlayerJni libPlayer = null;  
26 - private Context mContext;  
27 - /*是否正在播放,如果正在播放设置为TRUE,防止多次被实例化,*/  
28 - private boolean isPlaying=false;  
29 - private static XdyPlayerCore mXdyPlayerCore;  
30 - static {  
31 - System.loadLibrary("SmartPlayer");  
32 - }  
33 - protected XdyPlayerCore(String rtmpUrl, Context mContext) {  
34 - this.mContext=mContext;  
35 - }  
36 - protected static XdyPlayerCore getXdyPlayerCore(String rtmpUrl, Context mContext){  
37 - if(mXdyPlayerCore==null){  
38 - synchronized (XdyPlayerCore.class){  
39 - if(mXdyPlayerCore==null){  
40 - mXdyPlayerCore=new XdyPlayerCore(rtmpUrl, mContext);  
41 - }  
42 - }  
43 - }  
44 - return mXdyPlayerCore;  
45 - }  
46 -  
47 - /**  
48 - * 播放视频的的调用的方法  
49 - * 如果surfaceView 为null则播放Audio  
50 - * @param rtmpUrl  
51 - * @param surfaceView  
52 - */  
53 - public void playVideo(String rtmpUrl, SurfaceView surfaceView,SmartEventCallback smartEventCallback) {  
54 -// if (isPlaying) {  
55 -// return;  
56 -// }  
57 - if(libPlayer==null)  
58 - libPlayer = new SmartPlayerJni();  
59 - playerHandle = libPlayer.SmartPlayerInit(mContext);  
60 - if (playerHandle == 0) {  
61 - XdyLogUtil.e(TAG, "视频初始化失败 ");  
62 - return;  
63 - }  
64 - libPlayer.SetSmartPlayerEventCallback(playerHandle, smartEventCallback);  
65 - libPlayer.SmartPlayerSetSurface(playerHandle, surfaceView);  
66 - libPlayer.SmartPlayerSetAudioOutputType(playerHandle, 0);  
67 - libPlayer.SmartPlayerSetBuffer(playerHandle, 200);  
68 - int isPlaySuccessful = libPlayer.SmartPlayerStartPlayback(playerHandle, rtmpUrl);  
69 - if (isPlaySuccessful != 0) {  
70 - XdyLogUtil.e(TAG, "视频播放失败" + rtmpUrl);  
71 - }  
72 -// XdySdk.getXdyInstance().notifyObserver("video_success","");  
73 - XdyLogUtil.e(TAG, "视频播放成功" + rtmpUrl);  
74 -// isPlaying = true;  
75 -  
76 - }  
77 -  
78 - /**  
79 - * 播放音频  
80 - * @param rtmpUrl  
81 - * @param smartEventCallback  
82 - */  
83 - public void playAudio(String rtmpUrl,SmartEventCallback smartEventCallback) {  
84 - if(libPlayer==null){  
85 - libPlayer = new SmartPlayerJni();  
86 - }  
87 - //TODO  
88 - if(playerHandle==0) {  
89 - playerHandle = libPlayer.SmartPlayerInit(mContext);  
90 - }  
91 - XdyLogUtil.e(TAG, "playVideoId" + playerHandle);  
92 - if (playerHandle == 0) {  
93 - XdyLogUtil.e(TAG, "音频初始化失败");  
94 - return;  
95 - }  
96 - libPlayer.SetSmartPlayerEventCallback(playerHandle, smartEventCallback);  
97 - //播放音频  
98 - libPlayer.SmartPlayerSetSurface(playerHandle, null);  
99 - int isPlaySuccessful = libPlayer.SmartPlayerStartPlayback(playerHandle, rtmpUrl);  
100 - if (isPlaySuccessful != 0) {  
101 - XdyLogUtil.e(TAG, "音频播放失败" + rtmpUrl);  
102 - }  
103 - XdyLogUtil.e(TAG, "音频播放成功" + rtmpUrl);  
104 - }  
105 - class EventHande implements SmartEventCallback {  
106 - @Override  
107 - public void onCallback(int code, long param1, long param2, String param3, String param4, Object param5) {  
108 - switch (code) {  
109 - case EVENTID.EVENT_DANIULIVE_ERC_PLAYER_STARTED:  
110 - Log.i(TAG, "开始。。");  
111 - break;  
112 - case EVENTID.EVENT_DANIULIVE_ERC_PLAYER_CONNECTING:  
113 - Log.i(TAG, "连接中。。");  
114 - break;  
115 - case EVENTID.EVENT_DANIULIVE_ERC_PLAYER_CONNECTION_FAILED:  
116 - Log.i(TAG, "连接失败。。");  
117 - break;  
118 - case EVENTID.EVENT_DANIULIVE_ERC_PLAYER_CONNECTED:  
119 - Log.i(TAG, "连接成功。。");  
120 - break;  
121 - case EVENTID.EVENT_DANIULIVE_ERC_PLAYER_DISCONNECTED:  
122 - Log.i(TAG, "连接断开。。");  
123 - break;  
124 - case EVENTID.EVENT_DANIULIVE_ERC_PLAYER_STOP:  
125 - Log.i(TAG, "关闭。。");  
126 - break;  
127 - case EVENTID.EVENT_DANIULIVE_ERC_PLAYER_RESOLUTION_INFO:  
128 - Log.i(TAG, "分辨率信息: width: " + param1 + ", height: " + param2);  
129 - break;  
130 - case EVENTID.EVENT_DANIULIVE_ERC_PLAYER_NO_MEDIADATA_RECEIVED:  
131 - Log.i(TAG, "收不到媒体数据,可能是url错误。。");  
132 - }  
133 -  
134 - }  
135 - }  
136 -  
137 - /**  
138 - * 结束时调用  
139 - */  
140 - protected void onDestroy()  
141 - {  
142 - XdyLogUtil.i(TAG, "Run into destory++");  
143 -  
144 - if(playerHandle!=0)  
145 - {  
146 - libPlayer.SmartPlayerClose(playerHandle);  
147 - playerHandle = 0;  
148 - }  
149 - }  
150 -  
151 - /**  
152 - * 暂停方法  
153 - */  
154 - protected void onPause(){  
155 - if(playerHandle!=0)  
156 - {  
157 - libPlayer.SmartPlayerClose(playerHandle);  
158 - playerHandle = 0;  
159 - }  
160 - isPlaying = false;  
161 - }  
162 - /**  
163 - * 停止播放,重置正在播放标识  
164 - */  
165 - protected void onStopPlay() {  
166 - if(playerHandle!=0)  
167 - {  
168 - libPlayer.SmartPlayerClose(playerHandle);  
169 - playerHandle = 0;  
170 - }  
171 - isPlaying = false;  
172 - }  
173 -}  
1 -package com.mang.xdy.core;  
2 -  
3 -  
4 -import android.annotation.SuppressLint;  
5 -import android.app.Activity;  
6 -import android.graphics.ImageFormat;  
7 -import android.graphics.PixelFormat;  
8 -import android.hardware.Camera;  
9 -import android.util.Log;  
10 -import android.view.Surface;  
11 -import android.view.SurfaceHolder;  
12 -import android.view.SurfaceView;  
13 -  
14 -import com.daniulive.smartpublisher.SmartPublisherJni;  
15 -import com.eventhandle.SmartEventCallback;  
16 -import com.mang.xdy.utils.XdyLogUtil;  
17 -import com.voiceengine.NTAudioRecord;  
18 -  
19 -import java.io.IOException;  
20 -import java.util.List;  
21 -  
22 -/**  
23 - * Created by abao on 2017/4/6.  
24 - */  
25 -@SuppressWarnings("deprecation")  
26 -public class XdyPublisherCore implements SurfaceHolder.Callback, Camera.PreviewCallback {  
27 - private SurfaceView mSurfaceView;  
28 - private SurfaceHolder pubSurfaceViewHolder;  
29 - Activity mActivity;  
30 - private SmartPublisherJni xdyPublisher;  
31 - private Camera.AutoFocusCallback myAutoFocusCallback = null;  
32 - NTAudioRecord audioRecord_ = null;  
33 - private static final int BACK = 2;  
34 - private static final int FRONT = 1; //前置摄像头标记  
35 - private int currentCameraType = BACK; //当前打开的摄像头标记  
36 - private Camera mCamera = null;  
37 - private boolean mPreviewRunning = false;  
38 - private int curCameraIndex = -1;  
39 - private int frameCount = 0;  
40 - private static String TAG="XdyPublisher";  
41 - private static final int PORTRAIT = 1; //竖屏  
42 - private static final int LANDSCAPE = 2; //横屏  
43 - private int currentOrigentation = PORTRAIT;  
44 - //默认都推送 0不推送 1推送  
45 - protected int audio_opt = 1;  
46 - protected int video_opt = 1;  
47 - int videoWidth = 640;  
48 - private int videoHight = 480;  
49 - /*是否推流的标志,true 开始推送,false不推送*/  
50 - private boolean isStart = false;  
51 - /*是否支持硬编码 默认不支持*/  
52 - private boolean is_hardware_encoder = false;  
53 -  
54 - static {  
55 - System.loadLibrary("SmartPublisher");  
56 - }  
57 -  
58 - public XdyPublisherCore(int audio_opt,int video_opt,Activity mActivity) {  
59 - this.audio_opt=audio_opt;  
60 - this.video_opt=video_opt;  
61 - this.mActivity = mActivity;  
62 - }  
63 - /**  
64 - * 开始推流(视频)  
65 - *  
66 - * @param rtmpUrls  
67 - */  
68 - public void publisher(String rtmpUrls, SurfaceView pubSurfaceView,SmartEventCallback smartEventCallback) {  
69 -// if(isStart){  
70 -// return;  
71 -// }  
72 - mPreviewRunning = false;  
73 - this.mSurfaceView=pubSurfaceView;  
74 - if (xdyPublisher == null) {  
75 - xdyPublisher = new SmartPublisherJni();  
76 - }  
77 - isStart=true;  
78 - if(pubSurfaceViewHolder==null) {  
79 - pubSurfaceViewHolder = mSurfaceView.getHolder();  
80 - pubSurfaceViewHolder.addCallback(this);  
81 - pubSurfaceViewHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);  
82 - }  
83 - Log.i(TAG, "surfaceCreated..");  
84 - try {  
85 - currentCameraType = FRONT;  
86 -  
87 - if (mCamera == null) {  
88 - mCamera = openCamera(currentCameraType);  
89 - mCamera.stopPreview();  
90 - initCamera(pubSurfaceViewHolder);  
91 - }  
92 - } catch (Exception e) {  
93 - e.printStackTrace();  
94 - Log.e(TAG, "surfaceCreated: 异常了"+e.getMessage());  
95 - }  
96 - int i = xdyPublisher.SmartPublisherInit(mActivity, audio_opt,video_opt, videoWidth, videoHight);  
97 - XdyLogUtil.e(TAG, ": " + i);  
98 - xdyPublisher.SetSmartPublisherEventCallback(new EventHande());  
99 - XdyLogUtil.e(TAG,"url:"+rtmpUrls);  
100 - if (xdyPublisher.SmartPublisherSetURL(rtmpUrls) != 0) {  
101 - XdyLogUtil.e(TAG, "Failed to set publish stream URL..");  
102 - }  
103 - int isStarted = xdyPublisher.SmartPublisherStart(); // 0 成功  
104 - if (isStarted != 0) {  
105 - XdyLogUtil.e(TAG, "Failed to publish stream..");  
106 - } else {  
107 - XdyLogUtil.e(TAG, "publish successful");  
108 -// isStart = true;  
109 - }  
110 - CheckInitAudioRecorder();  
111 - }  
112 -  
113 - /**  
114 - * 开始推流(只有音频)  
115 - *  
116 - * @param rtmpUrl  
117 - */  
118 - public void publisherAudio(String rtmpUrl,SmartEventCallback smartEventCallback) {  
119 -// if(isStart){  
120 -// return;  
121 -// }  
122 - if (xdyPublisher == null) {  
123 - xdyPublisher = new SmartPublisherJni();  
124 - }  
125 - isStart=true;  
126 - XdyLogUtil.e(TAG, "surfaceCreated..");  
127 -  
128 - int i = xdyPublisher.SmartPublisherInit(mActivity, audio_opt,video_opt, videoWidth, videoHight);  
129 - if(i!=0){  
130 - XdyLogUtil.e(TAG, "SmartPublisherInit:初始化返回值是0成功: " + i);  
131 - return;  
132 - }  
133 -  
134 - xdyPublisher.SetSmartPublisherEventCallback(smartEventCallback);  
135 - if (xdyPublisher.SmartPublisherSetURL(rtmpUrl) != 0) {  
136 - XdyLogUtil.e(TAG, "Failed to set publish stream URL..");  
137 - }  
138 -  
139 - if (0 != xdyPublisher.SmartPublisherSetRecorder(0)) {  
140 - XdyLogUtil.e(TAG, "SmartPublisherSetRecoder failed.");  
141 - return;  
142 - }  
143 - int isStarted = xdyPublisher.SmartPublisherStart(); // 0 成功  
144 - if (isStarted != 0) {  
145 - Log.e(TAG, "Failed to publish stream..");  
146 - } else {  
147 - Log.e(TAG, "publish successful");  
148 -// isStart = true;  
149 - }  
150 - CheckInitAudioRecorder();  
151 - }  
152 - void CheckInitAudioRecorder() {  
153 - if (audioRecord_ == null) {  
154 - audioRecord_ = new NTAudioRecord(mActivity, 1);  
155 - }  
156 -  
157 - if (audioRecord_ != null) {  
158 - Log.e(TAG, "onCreate, call executeAudioRecordMethod..");  
159 - audioRecord_.executeAudioRecordMethod();  
160 - }  
161 - }  
162 -  
163 - @SuppressLint("NewApi")  
164 - private Camera openCamera(int type) {  
165 - int frontIndex = -1;  
166 - int backIndex = -1;  
167 - int cameraCount = Camera.getNumberOfCameras();  
168 - Log.i(TAG, "cameraCount: " + cameraCount);  
169 -  
170 - Camera.CameraInfo info = new Camera.CameraInfo();  
171 - for (int cameraIndex = 0; cameraIndex < cameraCount; cameraIndex++) {  
172 - Camera.getCameraInfo(cameraIndex, info);  
173 -  
174 - if (info.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) {  
175 - frontIndex = cameraIndex;  
176 - } else if (info.facing == Camera.CameraInfo.CAMERA_FACING_BACK) {  
177 - backIndex = cameraIndex;  
178 - }  
179 - }  
180 -  
181 - currentCameraType = type;  
182 - if (type == FRONT && frontIndex != -1) {  
183 - curCameraIndex = frontIndex;  
184 - return Camera.open(frontIndex);  
185 - } else if (type == BACK && backIndex != -1) {  
186 - curCameraIndex = backIndex;  
187 - return Camera.open(backIndex);  
188 - }  
189 - return null;  
190 - }  
191 - private void initCamera(SurfaceHolder holder) {  
192 - Log.i(TAG, "initCamera..");  
193 -  
194 - if (mPreviewRunning) {  
195 - if(mCamera!=null)  
196 - mCamera.stopPreview();  
197 - }  
198 -  
199 - Camera.Parameters parameters;  
200 - try {  
201 - parameters = mCamera.getParameters();  
202 - } catch (Exception e) {  
203 - // TODO Auto-generated catch block  
204 - e.printStackTrace();  
205 - return;  
206 - }  
207 -  
208 - parameters.setPreviewSize(videoWidth, videoHight);  
209 - parameters.setPictureFormat(PixelFormat.JPEG);  
210 - parameters.setPreviewFormat(PixelFormat.YCbCr_420_SP);  
211 - setCameraDisplayOrientation(mActivity, curCameraIndex, mCamera);  
212 - mCamera.setParameters(parameters);  
213 - int bufferSize = (((videoWidth | 0xf) + 1) * videoHight * ImageFormat.getBitsPerPixel(parameters.getPreviewFormat())) / 8;  
214 - mCamera.addCallbackBuffer(new byte[bufferSize]);  
215 -  
216 - mCamera.setPreviewCallbackWithBuffer(this);  
217 - try {  
218 - mCamera.setPreviewDisplay(holder);  
219 - } catch (Exception ex) {  
220 - // TODO Auto-generated catch block  
221 - if (null != mCamera) {  
222 - mCamera.release();  
223 - mCamera = null;  
224 - }  
225 - ex.printStackTrace();  
226 - }  
227 - mCamera.startPreview();  
228 - mCamera.autoFocus(myAutoFocusCallback);  
229 - mPreviewRunning = true;  
230 - }  
231 -  
232 -  
233 - @Override  
234 - public void surfaceCreated(SurfaceHolder holder) {  
235 - XdyLogUtil.e(TAG,"holder Create");  
236 -  
237 - }  
238 -  
239 - @Override  
240 - public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {  
241 - initCamera(holder);  
242 - }  
243 -  
244 - @Override  
245 - public void surfaceDestroyed(SurfaceHolder holder) {  
246 -  
247 - }  
248 - @Override  
249 - public void onPreviewFrame(byte[] data, Camera camera) {  
250 - frameCount++;  
251 - if (frameCount % 3000 == 0) {  
252 - XdyLogUtil.i("OnPre", "gc+");  
253 - System.gc();  
254 - XdyLogUtil.i("OnPre", "gc-");  
255 - }  
256 -  
257 - if (data == null) {  
258 - Camera.Parameters params = camera.getParameters();  
259 - Camera.Size size = params.getPreviewSize();  
260 - int bufferSize = (((size.width | 0x1f) + 1) * size.height * ImageFormat.getBitsPerPixel(params.getPreviewFormat())) / 8;  
261 - camera.addCallbackBuffer(new byte[bufferSize]);  
262 - } else {  
263 - if (isStart) {  
264 - xdyPublisher.SmartPublisherOnCaptureVideoData(data, data.length, currentCameraType, currentOrigentation);  
265 - }  
266 - camera.addCallbackBuffer(data);  
267 - }  
268 -  
269 - }  
270 -  
271 - //Check if it has back camera  
272 - private int findBackCamera() {  
273 - int cameraCount = 0;  
274 - Camera.CameraInfo cameraInfo = new Camera.CameraInfo();  
275 - cameraCount = Camera.getNumberOfCameras();  
276 -  
277 - for (int camIdx = 0; camIdx < cameraCount; camIdx++) {  
278 - Camera.getCameraInfo(camIdx, cameraInfo);  
279 - if (cameraInfo.facing == Camera.CameraInfo.CAMERA_FACING_BACK) {  
280 - return camIdx;  
281 - }  
282 - }  
283 - return -1;  
284 - }  
285 -  
286 - //Check if it has front camera  
287 - private int findFrontCamera() {  
288 - int cameraCount = 0;  
289 - Camera.CameraInfo cameraInfo = new Camera.CameraInfo();  
290 - cameraCount = Camera.getNumberOfCameras();  
291 -  
292 - for (int camIdx = 0; camIdx < cameraCount; camIdx++) {  
293 - Camera.getCameraInfo(camIdx, cameraInfo);  
294 - if (cameraInfo.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) {  
295 - return camIdx;  
296 - }  
297 - }  
298 - return -1;  
299 - }  
300 - private void switchCamera() throws IOException {  
301 - mCamera.setPreviewCallback(null);  
302 - mCamera.stopPreview();  
303 - mCamera.release();  
304 - if (currentCameraType == FRONT) {  
305 - mCamera = openCamera(BACK);  
306 - } else if (currentCameraType == BACK) {  
307 - mCamera = openCamera(FRONT);  
308 - }  
309 -  
310 - initCamera(pubSurfaceViewHolder);  
311 - }  
312 - private void SetCameraFPS(Camera.Parameters parameters) {  
313 - if (parameters == null)  
314 - return;  
315 -  
316 - int[] findRange = null;  
317 -  
318 - int defFPS = 20 * 1000;  
319 -  
320 - List<int[]> fpsList = parameters.getSupportedPreviewFpsRange();  
321 - if (fpsList != null && fpsList.size() > 0) {  
322 - for (int i = 0; i < fpsList.size(); ++i) {  
323 - int[] range = fpsList.get(i);  
324 - if (range != null  
325 - && Camera.Parameters.PREVIEW_FPS_MIN_INDEX < range.length  
326 - && Camera.Parameters.PREVIEW_FPS_MAX_INDEX < range.length) {  
327 - XdyLogUtil.i(TAG, "Camera index:" + i + " support min fps:" + range[Camera.Parameters.PREVIEW_FPS_MIN_INDEX]);  
328 -  
329 - XdyLogUtil.i(TAG, "Camera index:" + i + " support max fps:" + range[Camera.Parameters.PREVIEW_FPS_MAX_INDEX]);  
330 -  
331 - if (findRange == null) {  
332 - if (defFPS <= range[Camera.Parameters.PREVIEW_FPS_MAX_INDEX]) {  
333 - findRange = range;  
334 -  
335 - XdyLogUtil.i(TAG, "Camera found appropriate fps, min fps:" + range[Camera.Parameters.PREVIEW_FPS_MIN_INDEX]  
336 - + " ,max fps:" + range[Camera.Parameters.PREVIEW_FPS_MAX_INDEX]);  
337 - }  
338 - }  
339 - }  
340 - }  
341 - }  
342 -  
343 - if (findRange != null) {  
344 - parameters.setPreviewFpsRange(findRange[Camera.Parameters.PREVIEW_FPS_MIN_INDEX], findRange[Camera.Parameters.PREVIEW_FPS_MAX_INDEX]);  
345 - }  
346 - }  
347 -  
348 - class EventHande implements SmartEventCallback {  
349 - @Override  
350 - public void onCallback(int code, long param1, long param2, String param3, String param4, Object param5) {  
351 - switch (code) {  
352 - case EVENTID.EVENT_DANIULIVE_ERC_PLAYER_STARTED:  
353 - XdyLogUtil.i(TAG, "开始。。");  
354 - break;  
355 - case EVENTID.EVENT_DANIULIVE_ERC_PLAYER_CONNECTING:  
356 - XdyLogUtil.i(TAG, "连接中。。");  
357 - break;  
358 - case EVENTID.EVENT_DANIULIVE_ERC_PLAYER_CONNECTION_FAILED:  
359 - XdyLogUtil.i(TAG, "连接失败。。");  
360 - break;  
361 - case EVENTID.EVENT_DANIULIVE_ERC_PLAYER_CONNECTED:  
362 - XdyLogUtil.i(TAG, "连接成功。。");  
363 - //TODO  
364 - break;  
365 - case EVENTID.EVENT_DANIULIVE_ERC_PLAYER_DISCONNECTED:  
366 - XdyLogUtil.i(TAG, "连接断开。。");  
367 - break;  
368 - case EVENTID.EVENT_DANIULIVE_ERC_PLAYER_STOP:  
369 - XdyLogUtil.i(TAG, "关闭。。");  
370 - break;  
371 - case EVENTID.EVENT_DANIULIVE_ERC_PLAYER_RESOLUTION_INFO:  
372 - XdyLogUtil.i(TAG, "分辨率信息: width: " + param1 + ", height: " + param2);  
373 - break;  
374 - case EVENTID.EVENT_DANIULIVE_ERC_PLAYER_NO_MEDIADATA_RECEIVED:  
375 - XdyLogUtil.i(TAG, "收不到媒体数据,可能是url错误。。");  
376 - }  
377 -  
378 - }  
379 - }  
380 -  
381 - private void setCameraDisplayOrientation(Activity activity, int cameraId, android.hardware.Camera camera) {  
382 - android.hardware.Camera.CameraInfo info = new android.hardware.Camera.CameraInfo();  
383 - android.hardware.Camera.getCameraInfo(cameraId, info);  
384 - int rotation = activity.getWindowManager().getDefaultDisplay().getRotation();  
385 - int degrees = 0;  
386 - switch (rotation) {  
387 - case Surface.ROTATION_0:  
388 - degrees = 0;  
389 - break;  
390 - case Surface.ROTATION_90:  
391 - degrees = 90;  
392 - break;  
393 - case Surface.ROTATION_180:  
394 - degrees = 180;  
395 - break;  
396 - case Surface.ROTATION_270:  
397 - degrees = 270;  
398 - break;  
399 - }  
400 - int result;  
401 - if (info.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) {  
402 - result = (info.orientation + degrees) % 360;  
403 - result = (360 - result) % 360;  
404 - } else {  
405 - // back-facing  
406 - result = (info.orientation - degrees + 360) % 360;  
407 - }  
408 -  
409 - XdyLogUtil.i(TAG, "curDegree: " + result);  
410 -  
411 - camera.setDisplayOrientation(result);  
412 - }  
413 -  
414 - /**  
415 - * 停止推流  
416 - */  
417 - protected void onStopPublisher() {  
418 - if (audioRecord_ != null) {  
419 - XdyLogUtil.i(TAG, "surfaceDestroyed, call StopRecording..");  
420 - audioRecord_.StopRecording();  
421 - audioRecord_ = null;  
422 - }  
423 - if (xdyPublisher != null) {  
424 - xdyPublisher.SmartPublisherStop();  
425 - }  
426 - if(mCamera!=null){  
427 - mCamera.release();//释放相机资源  
428 - mCamera=null;  
429 - }  
430 - XdyLogUtil.e("audio","执行");  
431 - isStart=false;  
432 - }  
433 -  
434 - /**  
435 - * onPause 方法调用,不释放相机资源  
436 - */  
437 - protected void onPausePublisher(){  
438 - isStart=false;  
439 - if (audioRecord_ != null) {  
440 - XdyLogUtil.i(TAG, "surfaceDestroyed, call StopRecording..");  
441 - audioRecord_.StopRecording();  
442 - audioRecord_ = null;  
443 - }  
444 - if (xdyPublisher != null) {  
445 - xdyPublisher.SmartPublisherStop();  
446 - }  
447 - if(mCamera!=null) {  
448 - mCamera.stopPreview();  
449 - }  
450 -  
451 - }  
452 - public void onResumePublisher(){  
453 - isStart=true;  
454 - }  
455 -  
456 - private int setHardwareEncoderKbps(int width, int height)  
457 - {  
458 - int hwEncoderKpbs = 0;  
459 -  
460 - switch(width) {  
461 - case 176:  
462 - hwEncoderKpbs = 300;  
463 - break;  
464 - case 320:  
465 - hwEncoderKpbs = 500;  
466 - break;  
467 - case 640:  
468 - hwEncoderKpbs = 1000;  
469 - break;  
470 - case 1280:  
471 - hwEncoderKpbs = 1700;  
472 - break;  
473 - default:  
474 - hwEncoderKpbs = 1000;  
475 - }  
476 -  
477 - return hwEncoderKpbs;  
478 - }  
479 -}  
@@ -21,6 +21,8 @@ import com.mang.xdy.common.Constants; @@ -21,6 +21,8 @@ import com.mang.xdy.common.Constants;
21 import com.mang.xdy.listener.ObserverListener; 21 import com.mang.xdy.listener.ObserverListener;
22 import com.mang.xdy.listener.SubjectListener; 22 import com.mang.xdy.listener.SubjectListener;
23 import com.mang.xdy.message.MsgManage; 23 import com.mang.xdy.message.MsgManage;
  24 +import com.mang.xdy.play.XdyPlayer;
  25 +import com.mang.xdy.play.XdyPublisher;
24 import com.mang.xdy.utils.JsonUtil; 26 import com.mang.xdy.utils.JsonUtil;
25 import com.mang.xdy.utils.NetWorkUtils; 27 import com.mang.xdy.utils.NetWorkUtils;
26 import com.mang.xdy.utils.PlayerUtils; 28 import com.mang.xdy.utils.PlayerUtils;
@@ -46,11 +48,11 @@ public class XdySdk implements SubjectListener{ @@ -46,11 +48,11 @@ public class XdySdk implements SubjectListener{
46 /** 48 /**
47 * 用户初始化,还是调用各种方法,都需要统一的对外给出监听事件 49 * 用户初始化,还是调用各种方法,都需要统一的对外给出监听事件
48 */ 50 */
49 - private static XdyJsCore mXdyJsCore; 51 + private static XdyJsCore mXdyJsCore;
50 private static XdySdk mXdySdk; 52 private static XdySdk mXdySdk;
51 - private static Context mContext;  
52 - private XdyPlayerCore mXdyPlayerCore;  
53 - private XdyPublisherCore mXdyPublisherCore; 53 + private static Context mContext;
  54 + private XdyPlayer mXdyPlayer;
  55 + private XdyPublisher mXdyPublisher;
54 /*消息管理*/ 56 /*消息管理*/
55 private static MsgManage mMsgManage; 57 private static MsgManage mMsgManage;
56 58
@@ -62,7 +64,7 @@ public class XdySdk implements SubjectListener{ @@ -62,7 +64,7 @@ public class XdySdk implements SubjectListener{
62 //TODO 拿不到同步的数据先保留信息(必须释放,否者内存泄漏) 64 //TODO 拿不到同步的数据先保留信息(必须释放,否者内存泄漏)
63 private SurfaceView mSurfaceView_Publish; 65 private SurfaceView mSurfaceView_Publish;
64 private Activity mActivity; 66 private Activity mActivity;
65 - /*是否正在推流,mcu自动断开的时候使用,推流成功后才表示正在使用*/ 67 + /*是否正在推流,mcu自动断开,onPause使用的时候使用,推流成功后才表示正在使用*/
66 private boolean isPublisher =false; 68 private boolean isPublisher =false;
67 // /*Audio 推送中,resume需要使用*/ 69 // /*Audio 推送中,resume需要使用*/
68 private boolean isPublisherAudio=false; 70 private boolean isPublisherAudio=false;
@@ -75,7 +77,7 @@ public class XdySdk implements SubjectListener{ @@ -75,7 +77,7 @@ public class XdySdk implements SubjectListener{
75 /*推流地址*/ 77 /*推流地址*/
76 private String publish_url=""; 78 private String publish_url="";
77 /*保存nodeid ,自己的唯一标识*/ 79 /*保存nodeid ,自己的唯一标识*/
78 - private int nodeId=0; 80 + private int mNodeId =0;
79 81
80 @Override 82 @Override
81 public void add(ObserverListener observerListener) { 83 public void add(ObserverListener observerListener) {
@@ -97,7 +99,8 @@ public class XdySdk implements SubjectListener{ @@ -97,7 +99,8 @@ public class XdySdk implements SubjectListener{
97 } 99 }
98 } 100 }
99 } 101 }
100 - private XdySdk(){} 102 + private XdySdk(){
  103 + }
101 104
102 private static Handler handler=new Handler(){ 105 private static Handler handler=new Handler(){
103 @Override 106 @Override
@@ -149,6 +152,9 @@ public class XdySdk implements SubjectListener{ @@ -149,6 +152,9 @@ public class XdySdk implements SubjectListener{
149 onPlayDestroy(); 152 onPlayDestroy();
150 break; 153 break;
151 } 154 }
  155 + if(!isRecordPlayBack &&!judegeNetOK()){
  156 + return;
  157 + }
152 handler.post(new Runnable() { 158 handler.post(new Runnable() {
153 @Override 159 @Override
154 public void run() { 160 public void run() {
@@ -169,6 +175,9 @@ public class XdySdk implements SubjectListener{ @@ -169,6 +175,9 @@ public class XdySdk implements SubjectListener{
169 */ 175 */
170 public void api(String type,String mediaId, SurfaceView surfaceView, Activity activity) { 176 public void api(String type,String mediaId, SurfaceView surfaceView, Activity activity) {
171 judgeString(type); 177 judgeString(type);
  178 + if(!isRecordPlayBack &&!judegeNetOK()){
  179 + return;
  180 + }
172 switch (type) { 181 switch (type) {
173 case Constants.PLAY_AUDIO: 182 case Constants.PLAY_AUDIO:
174 //判断mediaId (仅播放需要)通过取得value 如果为空的话表示输入的数据有误 183 //判断mediaId (仅播放需要)通过取得value 如果为空的话表示输入的数据有误
@@ -186,12 +195,12 @@ public class XdySdk implements SubjectListener{ @@ -186,12 +195,12 @@ public class XdySdk implements SubjectListener{
186 //如果是回放给出。m3u8的id用户 用户需要自己获取play_url_audio=audioPlayBean.getReplay(); 195 //如果是回放给出。m3u8的id用户 用户需要自己获取play_url_audio=audioPlayBean.getReplay();
187 }else{ 196 }else{
188 play_url_audio=audioPlayBean.getRtmpUrl() ; 197 play_url_audio=audioPlayBean.getRtmpUrl() ;
189 - if(mXdyPlayerCore==null) {  
190 - mXdyPlayerCore = XdyPlayerCore.getXdyPlayerCore(play_url_audio, activity); 198 + if(mXdyPlayer ==null) {
  199 + mXdyPlayer = XdyPlayer.getXdyPlayerCore(play_url_audio, activity);
191 }else{ 200 }else{
192 - mXdyPlayerCore.onStopPlay(); 201 + mXdyPlayer.onStopPlay();
193 } 202 }
194 - mXdyPlayerCore.playAudio(play_url_audio, new EventHande_Play()); 203 + mXdyPlayer.playAudio(play_url_audio, new EventHande_Play());
195 } 204 }
196 205
197 }else{ 206 }else{
@@ -215,13 +224,13 @@ public class XdySdk implements SubjectListener{ @@ -215,13 +224,13 @@ public class XdySdk implements SubjectListener{
215 // play_url_video=videoPlayBean.getReplay(); 224 // play_url_video=videoPlayBean.getReplay();
216 }else{ 225 }else{
217 play_url_video=videoPlayBean.getRtmpUrl(); 226 play_url_video=videoPlayBean.getRtmpUrl();
218 - if(mXdyPlayerCore==null) {  
219 - mXdyPlayerCore = XdyPlayerCore.getXdyPlayerCore(play_url_video, activity); 227 + if(mXdyPlayer ==null) {
  228 + mXdyPlayer = XdyPlayer.getXdyPlayerCore(play_url_video, activity);
220 }else{ 229 }else{
221 //重复播放时候 230 //重复播放时候
222 - mXdyPlayerCore.onStopPlay(); 231 + mXdyPlayer.onStopPlay();
223 } 232 }
224 - mXdyPlayerCore.playVideo(play_url_video, surfaceView,new EventHande_Play()); 233 + mXdyPlayer.playVideo(play_url_video, surfaceView,new EventHande_Play());
225 } 234 }
226 235
227 }else{ 236 }else{
@@ -243,7 +252,6 @@ public class XdySdk implements SubjectListener{ @@ -243,7 +252,6 @@ public class XdySdk implements SubjectListener{
243 case Constants.PUBLISH_AUDIO: 252 case Constants.PUBLISH_AUDIO:
244 //只推送音频 253 //只推送音频
245 getPublishPathAudio(); 254 getPublishPathAudio();
246 -// mSurfaceView=surfaceView;  
247 mActivity=activity; 255 mActivity=activity;
248 break; 256 break;
249 257
@@ -261,21 +269,17 @@ public class XdySdk implements SubjectListener{ @@ -261,21 +269,17 @@ public class XdySdk implements SubjectListener{
261 XdyLogUtil.e(TAG,Constants.ERROR_TYPE_NULL); 269 XdyLogUtil.e(TAG,Constants.ERROR_TYPE_NULL);
262 } 270 }
263 } 271 }
264 - /*判断是否是合法的url*/  
265 - protected void judgeUrl(String url){  
266 - if (url == null)  
267 - return;  
268 -  
269 - // rtmp://  
270 - if (url.length() < 8) {  
271 - Log.e(TAG, "Input publish url error:" + url);  
272 - return;  
273 - }  
274 -  
275 - if (!url.startsWith("rtmp://")) {  
276 - Log.e(TAG, "Input publish url error:" + url);  
277 - return; 272 + /*判断网路是否正常*/
  273 + private boolean judegeNetOK(){
  274 + if( !NetWorkUtils.isNetworkConnected(mContext)){
  275 + String errorJson="{\n" +
  276 + " \"code\": 20000,\n" +
  277 + " \"reson\": \"无网络连接,请检查网络\"\n" +
  278 + "}";
  279 + notifyObserver(Constants.ERROR_CODE, errorJson);
  280 + return false;
278 } 281 }
  282 + return true;
279 } 283 }
280 284
281 public static XdySdk getXdyInstance(){ 285 public static XdySdk getXdyInstance(){
@@ -306,7 +310,7 @@ public class XdySdk implements SubjectListener{ @@ -306,7 +310,7 @@ public class XdySdk implements SubjectListener{
306 try { 310 try {
307 jsonObject = new JSONObject(response); 311 jsonObject = new JSONObject(response);
308 isRecordPlayBack = jsonObject.optBoolean("isRecordPlayBack"); 312 isRecordPlayBack = jsonObject.optBoolean("isRecordPlayBack");
309 - nodeId=jsonObject.optInt("nodeId"); 313 + mNodeId =jsonObject.optInt("mNodeId");
310 } catch (JSONException e) { 314 } catch (JSONException e) {
311 e.printStackTrace(); 315 e.printStackTrace();
312 } 316 }
@@ -333,16 +337,16 @@ public class XdySdk implements SubjectListener{ @@ -333,16 +337,16 @@ public class XdySdk implements SubjectListener{
333 //TODo 给出提示 337 //TODo 给出提示
334 throw new IllegalArgumentException(Constants.ERROR_TYPE_ACTIVITY); 338 throw new IllegalArgumentException(Constants.ERROR_TYPE_ACTIVITY);
335 } 339 }
336 - if (mXdyPublisherCore == null) {  
337 - mXdyPublisherCore = new XdyPublisherCore(1, 1, mActivity); 340 + if (mXdyPublisher == null) {
  341 + mXdyPublisher = new XdyPublisher(1, 1, mActivity);
338 }else{ 342 }else{
339 //todo 如果不为空的话是已经播放过,得清理上次的 343 //todo 如果不为空的话是已经播放过,得清理上次的
340 - mXdyPlayerCore.onPause(); 344 +// mXdyPlayer.onPause();
341 } 345 }
342 publish_url=video_url; 346 publish_url=video_url;
343 isPublisher =true; 347 isPublisher =true;
344 isPublisherAudio=false; 348 isPublisherAudio=false;
345 - mXdyPublisherCore.publisher(video_url,mSurfaceView_Publish, new EventHande_Publish()); 349 + mXdyPublisher.publisher(video_url,mSurfaceView_Publish, new EventHande_Publish());
346 // PlayerUtils.setPublishSendSuccessVideo(aCache.getAsString(Constants.GET_VIDEO_PUBLISH_PATH)); 350 // PlayerUtils.setPublishSendSuccessVideo(aCache.getAsString(Constants.GET_VIDEO_PUBLISH_PATH));
347 //// TODO: 2017/4/13 大牛连接成功回调没有监听到 暂时在这告知后台,(后续加上网路判断,摄像头判断) 351 //// TODO: 2017/4/13 大牛连接成功回调没有监听到 暂时在这告知后台,(后续加上网路判断,摄像头判断)
348 setPublishSendSuccessVideo(video_url); 352 setPublishSendSuccessVideo(video_url);
@@ -379,13 +383,13 @@ public class XdySdk implements SubjectListener{ @@ -379,13 +383,13 @@ public class XdySdk implements SubjectListener{
379 XdyLogUtil.e(TAG,"activity is null"); 383 XdyLogUtil.e(TAG,"activity is null");
380 return; 384 return;
381 } 385 }
382 - if(mXdyPublisherCore==null) {  
383 - mXdyPublisherCore = new XdyPublisherCore(1, 0, mActivity); 386 + if(mXdyPublisher ==null) {
  387 + mXdyPublisher = new XdyPublisher(1, 0, mActivity);
384 }else { 388 }else {
385 //todo 如果不为空的话是已经播放过,得清理上次的 389 //todo 如果不为空的话是已经播放过,得清理上次的
386 - mXdyPlayerCore.onPause(); 390 +// mXdyPlayer.onPause();
387 } 391 }
388 - mXdyPublisherCore.publisherAudio(audio_url,new EventHande_Publish()); 392 + mXdyPublisher.publisherAudio(audio_url,new EventHande_Publish());
389 publish_url=audio_url; 393 publish_url=audio_url;
390 isPublisher =true; 394 isPublisher =true;
391 isPublisherAudio=true; 395 isPublisherAudio=true;
@@ -441,7 +445,7 @@ public class XdySdk implements SubjectListener{ @@ -441,7 +445,7 @@ public class XdySdk implements SubjectListener{
441 VideoPlayBean videoPlayBean= JsonUtil.parseJsonToBean(video,VideoPlayBean.class); 445 VideoPlayBean videoPlayBean= JsonUtil.parseJsonToBean(video,VideoPlayBean.class);
442 if(videoPlayBean!=null) { 446 if(videoPlayBean!=null) {
443 // if(videoPlayBean.getMediaId()!=videoPlayBean.getFromNodeId()) { 447 // if(videoPlayBean.getMediaId()!=videoPlayBean.getFromNodeId()) {
444 - if(nodeId!=videoPlayBean.getFromNodeId()) { 448 + if(mNodeId !=videoPlayBean.getFromNodeId()) {
445 //过滤自己推送的video 449 //过滤自己推送的video
446 aCache.put(videoPlayBean.getMediaId() + "", video); 450 aCache.put(videoPlayBean.getMediaId() + "", video);
447 handleListener(type, videoPlayBean.getMediaId() + ""); 451 handleListener(type, videoPlayBean.getMediaId() + "");
@@ -455,7 +459,7 @@ public class XdySdk implements SubjectListener{ @@ -455,7 +459,7 @@ public class XdySdk implements SubjectListener{
455 AudioPlayBean audioPlayBean=JsonUtil.parseJsonToBean(audio,AudioPlayBean.class); 459 AudioPlayBean audioPlayBean=JsonUtil.parseJsonToBean(audio,AudioPlayBean.class);
456 if(audioPlayBean!=null){ 460 if(audioPlayBean!=null){
457 // if(audioPlayBean.getMediaId()!=audioPlayBean.getFromNodeId()) { 461 // if(audioPlayBean.getMediaId()!=audioPlayBean.getFromNodeId()) {
458 - if(nodeId!=audioPlayBean.getFromNodeId()) { 462 + if(mNodeId !=audioPlayBean.getFromNodeId()) {
459 aCache.put(audioPlayBean.getMediaId() + "", audio); 463 aCache.put(audioPlayBean.getMediaId() + "", audio);
460 handleListener(type, audioPlayBean.getMediaId() + ""); 464 handleListener(type, audioPlayBean.getMediaId() + "");
461 } 465 }
@@ -521,9 +525,9 @@ public class XdySdk implements SubjectListener{ @@ -521,9 +525,9 @@ public class XdySdk implements SubjectListener{
521 */ 525 */
522 public boolean onPlayStop(String id){ 526 public boolean onPlayStop(String id){
523 if(currentPlayId.equals(id)) { 527 if(currentPlayId.equals(id)) {
524 - if (mXdyPlayerCore != null) {  
525 - mXdyPlayerCore.onStopPlay();  
526 -// mXdyPlayerCore = null; 528 + if (mXdyPlayer != null) {
  529 + mXdyPlayer.onStopPlay();
  530 +// mXdyPlayer = null;
527 531
528 } 532 }
529 return true; 533 return true;
@@ -534,8 +538,8 @@ public class XdySdk implements SubjectListener{ @@ -534,8 +538,8 @@ public class XdySdk implements SubjectListener{
534 * 退出时清除信息(重置js监听) 538 * 退出时清除信息(重置js监听)
535 */ 539 */
536 public void removeAll(){ 540 public void removeAll(){
537 - if(mXdyPlayerCore!=null) {  
538 - mXdyPlayerCore.onPause(); 541 + if(mXdyPlayer !=null) {
  542 + mXdyPlayer.onPause();
539 } 543 }
540 if(mXdyJsCore!=null&&!isRecordPlayBack) { 544 if(mXdyJsCore!=null&&!isRecordPlayBack) {
541 mXdyJsCore.init(mContext); 545 mXdyJsCore.init(mContext);
@@ -547,9 +551,9 @@ public class XdySdk implements SubjectListener{ @@ -547,9 +551,9 @@ public class XdySdk implements SubjectListener{
547 * 结束时调用 551 * 结束时调用
548 */ 552 */
549 public void onPlayDestroy(){ 553 public void onPlayDestroy(){
550 - if (mXdyPlayerCore != null) {  
551 - mXdyPlayerCore.onStopPlay();  
552 - mXdyPlayerCore = null; 554 + if (mXdyPlayer != null) {
  555 + mXdyPlayer.onStopPlay();
  556 + mXdyPlayer = null;
553 } 557 }
554 558
555 559
@@ -560,9 +564,9 @@ public class XdySdk implements SubjectListener{ @@ -560,9 +564,9 @@ public class XdySdk implements SubjectListener{
560 * @deprecated daniu sdk handle best 564 * @deprecated daniu sdk handle best
561 */ 565 */
562 public void onPublisherStop(){ 566 public void onPublisherStop(){
563 - if(mXdyPublisherCore!=null){  
564 - mXdyPublisherCore.onStopPublisher();  
565 - mXdyPublisherCore=null; 567 + if(mXdyPublisher !=null){
  568 + mXdyPublisher.onStopPublisher();
  569 + mXdyPublisher =null;
566 } 570 }
567 //如果正在推流,msurfaceView ,mActivity不清空 571 //如果正在推流,msurfaceView ,mActivity不清空
568 if(!isPublisher) { 572 if(!isPublisher) {
@@ -580,10 +584,11 @@ public class XdySdk implements SubjectListener{ @@ -580,10 +584,11 @@ public class XdySdk implements SubjectListener{
580 584
581 /** 585 /**
582 * onPause 方法时走的周期 586 * onPause 方法时走的周期
  587 + * 推送视频暂停调用,单独提出,不与play合并考虑到有后台继续推送的情况
583 */ 588 */
584 public void onPublisherPause(){ 589 public void onPublisherPause(){
585 - if(mXdyPublisherCore!=null){  
586 - mXdyPublisherCore.onPausePublisher(); 590 + if(mXdyPublisher !=null){
  591 + mXdyPublisher.onPausePublisher();
587 } 592 }
588 } 593 }
589 594
@@ -598,13 +603,13 @@ public class XdySdk implements SubjectListener{ @@ -598,13 +603,13 @@ public class XdySdk implements SubjectListener{
598 if(!isPublisher){ 603 if(!isPublisher){
599 return; 604 return;
600 } 605 }
601 - if(mXdyPublisherCore!=null) {  
602 - mXdyPublisherCore.onResumePublisher(); 606 + if(mXdyPublisher !=null) {
  607 + mXdyPublisher.onResumePublisher();
603 if (!TextUtils.isEmpty(publish_url)) { 608 if (!TextUtils.isEmpty(publish_url)) {
604 if(!isPublisherAudio){ 609 if(!isPublisherAudio){
605 - mXdyPublisherCore.publisher(publish_url, mSurfaceView_Publish, new EventHande_Publish()); 610 + mXdyPublisher.publisher(publish_url, mSurfaceView_Publish, new EventHande_Publish());
606 }else{ 611 }else{
607 - mXdyPublisherCore.publisherAudio(publish_url,new EventHande_Publish()); 612 + mXdyPublisher.publisherAudio(publish_url,new EventHande_Publish());
608 } 613 }
609 614
610 } 615 }
@@ -38,7 +38,7 @@ public class XdyStringUtils { @@ -38,7 +38,7 @@ public class XdyStringUtils {
38 } 38 }
39 return resString; 39 return resString;
40 } 40 }
41 - 41 + /*判断url*/
42 public static void judgeUrl(String url){ 42 public static void judgeUrl(String url){
43 if (url == null) 43 if (url == null)
44 return; 44 return;