直播模块播放端后台前台切换处理
1.锁屏后如果被系统清理内存了.
您需要在应用销毁回调里面手动videoStop,并且Clean掉实例。这样做是防止下次登录时可能登录时间太久,因为服务器有退避机制。
@Override
protected void onDestroy() {
LiveLogout();
super.onDestroy();
}
private void LiveLogout() {
LiveDisconnect();
if (m_Wnd != null) {
m_View.removeView(m_Wnd);
pgLibLiveMultiView.Release(m_Wnd);
m_View = null;
m_Wnd = null;
m_Live.Clean();
}
}
2.如果程序没被系统清理强制退出.
在退出到后台时直接disConnect,videoStart。到前台时如果播放端还在线就直接Connect 并videostart,如果播放端不在线了就等待重新上线。此时如果想要马上登录上线,需要手动m_Live.Clean 并 重新调用初始化函数登录 ,登录成功后再打开视频。
public int count = 0;
@Override
protected void onResume() {
if (count == 0) {
//Log.v(TAG, “切到前台”);
Toast.makeText(MainActivity.this, “切到前台”, Toast.LENGTH_SHORT).show();
if(m_bLogin) {
m_Live.Connect(m_sDevID);
m_Live.VideoStart(m_sDevID, 0, “”, m_Wnd);
}else{
String sInfo = “因为后台放置太久导致掉线,请等待播放端重新上线”;
Toast.makeText(MainActivity.this, sInfo, Toast.LENGTH_SHORT).show();
}
}
count++;
super.onResume();
}
@Override
protected void onPause() {
count–;
if (count == 0) {
Toast.makeText(MainActivity.this, “切到后台”, Toast.LENGTH_SHORT).show();
m_Live.VideoStop(m_sDevID,0);
m_Live.Disconnect(m_sDevID);
}
super.onPause();
}
3. m_bLogin标志位设置
private boolean m_bLogin = false;
private pgLibLive.OnEventListener m_OnEvent = new pgLibLive.OnEventListener() {
@Override
public void event(String sAct, String sData, String sRender) {
// TODO Auto-generated method stub
if (sAct.equals(“VideoStatus”)) {
// Video status report
}
else if (sAct.equals(“Notify”)) {
// Receive the notify from capture side
String sInfo = “Receive notify: data=” + sData;
Toast.makeText(MainActivity.this, sInfo, Toast.LENGTH_SHORT).show();
}
else if (sAct.equals(“RenderJoin”)) {
// A render join
String sInfo = “Render join: render=” + sRender;
Toast.makeText(MainActivity.this, sInfo, Toast.LENGTH_SHORT).show();
}
else if (sAct.equals(“RenderLeave”)) {
// A render leave
String sInfo = “Render leave: render=” + sRender;
Toast.makeText(MainActivity.this, sInfo, Toast.LENGTH_SHORT).show();
}
else if (sAct.equals(“Message”)) {
// Receive the message from render or capture
String sInfo = “Receive msg: data=” + sData + “, render=” + sRender;
Toast.makeText(MainActivity.this, sInfo, Toast.LENGTH_SHORT).show();
}
else if (sAct.equals(“Login”)) {
// Login reply
if (sData.equals(“0”)) {
String sInfo = “Login success”;
Toast.makeText(MainActivity.this, sInfo, Toast.LENGTH_SHORT).show();
m_bLogin = true;
}
else {
String sInfo = “Login failed, error=” + sData;
Toast.makeText(MainActivity.this, sInfo, Toast.LENGTH_SHORT).show();
m_bLogin = false;
}
}
else if (sAct.equals(“Logout”)) {
// Logout
String sInfo = “Logout”;
Toast.makeText(MainActivity.this, sInfo, Toast.LENGTH_SHORT).show();
m_bLogin = false;
}
else if (sAct.equals(“Connect”)) {
// Connect to capture
String sInfo = “Connect to capture”;
Toast.makeText(MainActivity.this, sInfo, Toast.LENGTH_SHORT).show();
}
else if (sAct.equals(“Disconnect”)) {
// Disconnect from capture
String sInfo = “Disconnect from capture”;
Toast.makeText(MainActivity.this, sInfo, Toast.LENGTH_SHORT).show();
}
else if (sAct.equals(“Reject”)) {
String sInfo = “Reject by capture”;
Toast.makeText(MainActivity.this, sInfo, Toast.LENGTH_SHORT).show();
m_bLogin = false;
}
else if (sAct.equals(“Offline”)) {
// The capture is offline.
String sInfo = “Capture offline”;
Toast.makeText(MainActivity.this, sInfo, Toast.LENGTH_SHORT).show();
m_bLogin = false;
}
else if (sAct.equals(“LanScanResult”)) {
// Lan scan result.
String sInfo = “Lan scan result: ” + sData;
Toast.makeText(MainActivity.this, sInfo, Toast.LENGTH_SHORT).show();
m_sTransferInfo.setText(sData);
}
else if (sAct.equals(“ForwardAllocReply”)) {
String sInfo = “Forward alloc relpy: error=” + sData;
Toast.makeText(MainActivity.this, sInfo, Toast.LENGTH_SHORT).show();
}
else if (sAct.equals(“ForwardFreeReply”)) {
String sInfo = “Forward free relpy: error=” + sData;
Toast.makeText(MainActivity.this, sInfo, Toast.LENGTH_SHORT).show();
}
else if (sAct.equals(“VideoCamera”)) {
String sInfo = “The picture is save to: ” + sData;
Toast.makeText(MainActivity.this, sInfo, Toast.LENGTH_SHORT).show();
}
else if (sAct.equals(“FileAccept”)) {
String sInfo = “File accept: ” + sData;
Toast.makeText(MainActivity.this, sInfo, Toast.LENGTH_SHORT).show();
}
else if (sAct.equals(“FileReject”)) {
FileReject();
}
else if (sAct.equals(“FileAbort”)) {
// 取消 上传或 下载
FileAbort();
}
else if (sAct.equals(“FileFinish”)) {// 文件传输完毕
FileFinish();
}
else if (sAct.equals(“FileProgress”)) {
FileProgress(sData);
}
else if (sAct.equals(“SvrNotify”)) {
String sInfo = “Receive server notify: ” + sData;
Toast.makeText(MainActivity.this, sInfo, Toast.LENGTH_SHORT).show();
}
Log.d(“pgLiveRender”, “OnEvent: Act=” + sAct + “, Data=” + sData
+ “, Render=” + sRender);
}
};