package com.ycl.api.YS.playback.play; import com.sun.jna.Memory; import com.sun.jna.Native; import com.sun.jna.Pointer; import com.sun.jna.ptr.IntByReference; import com.sun.jna.ptr.LongByReference; import com.ycl.api.YS.NetDemo; import com.ycl.api.YS.util.Common; import com.ycl.api.YS.lib.NetDEVSDKLib.*; import javax.swing.*; import java.io.UnsupportedEncodingException; import java.math.BigDecimal; /** * * @introduction PlayBack * @description Support NVR/VMS */ public class Playback { /** * * @introduction Playback by URL * @description Calling the interface of NETDEV_PlayBackByUrl * */ public static void playByURL() { if(null == NetDemo.lpUserID) { JOptionPane.showMessageDialog(null, "Please Login device first. error code"+NetDemo.netdevsdk.NETDEV_GetLastError()); return; } if(NetDemo.ChannelID == 0) { JOptionPane.showMessageDialog(null, "Please select an online channel."); return; } if(NetDemo.RecordTable.getSelectedRow()<0) { JOptionPane.showMessageDialog(null, "No file,please choose a file"); return; } if(null != NetDemo.lpPlayHandle) { JOptionPane.showMessageDialog(null, "Please stop playing first."); return; } NetDemo.jButtonStopPlayback.setEnabled(true); NetDemo.jButtonMic.setVisible(false); NetDemo.jSliderLiveMicSound.setVisible(false); NetDemo.jLabelLiveSound2.setVisible(false); NetDemo.jLableLiveMicSound.setVisible(false); NetDemo.jLabelLiveViewStreamUrl.setText(null); Pointer ReplayUrl=new Memory(260); boolean bRet= NetDemo.netdevsdk.NETDEV_GetReplayUrl(NetDemo.lpUserID, NetDemo.ChannelID, 0, ReplayUrl); byte[] szReplayUrl=ReplayUrl.getByteArray(0, 260); String pszReplayUrl=null; try { pszReplayUrl=new String(szReplayUrl,"GB2312"); NetDemo.jLabelLiveViewStreamUrl.setText(pszReplayUrl); }catch(UnsupportedEncodingException e) { e.printStackTrace(); } if(NetDemo.RecordTable.getRowCount()<=0) { JOptionPane.showMessageDialog(null, "No file,please a file"); return; } int row=NetDemo.RecordTable.getSelectedRow(); String Beginstr=(String)NetDemo.RecordTable.getValueAt(row, 0); String Endstr=(String)NetDemo.RecordTable.getValueAt(row, 1); if(bRet) { NETDEV_PLAYBACKCOND_S pstPlayBackCond=new NETDEV_PLAYBACKCOND_S(); pstPlayBackCond.dwChannelID = NetDemo.ChannelID; pstPlayBackCond.hPlayWnd = Native.getComponentPointer(NetDemo.panelPlayLabel); pstPlayBackCond.tBeginTime = Common.date2TimeStamp(Beginstr, NetDemo.DateFormat); pstPlayBackCond.tEndTime = Common.date2TimeStamp(Endstr, NetDemo.DateFormat); pstPlayBackCond.dwLinkMode = NETDEV_TRANS_PROTOCAL_E.NETDEV_TRANS_PROTOCAL_TCP; NetDemo.lpPlayHandle=NetDemo.netdevsdk.NETDEV_PlayBackByUrl(NetDemo.lpUserID, pszReplayUrl, pstPlayBackCond); if(null != NetDemo.lpPlayHandle){ NetDemo.jSliderPlayBack.setMaximum((int)pstPlayBackCond.tEndTime); NetDemo.jSliderPlayBack.setMinimum((int)pstPlayBackCond.tBeginTime); NetDemo.jSliderPlayBack.setValue(50); NetDemo.lblPlaybackSpeed.setText("1X"); NetDemo.netdevsdk.NETDEV_SetMuteStatus(NetDemo.lpPlayHandle,1); NetDemo.netdevsdk.NETDEV_OpenSound(NetDemo.lpPlayHandle); Thread singlePlayBackByURLThread=new Thread(new Runnable() { @Override public void run() { int nCount = 0; while(true) { /* 获取窗口码率 */ IntByReference pdwBitRate = new IntByReference(); boolean bRetBit = NetDemo.netdevsdk.NETDEV_GetBitRate(NetDemo.lpPlayHandle,pdwBitRate); if(bRetBit != true) { System.out.printf("NETDEV_GetBitRate failed:%d\n", NetDemo.netdevsdk.NETDEV_GetLastError()); return; } NetDemo.jLabelBitRateParam.setText(String.valueOf(pdwBitRate.getValue())); /* 获取窗口帧率 */ IntByReference pdwFrameRate = new IntByReference(); boolean bRet2 = NetDemo.netdevsdk.NETDEV_GetFrameRate(NetDemo.lpPlayHandle,pdwFrameRate); if(bRet2 != true) { System.out.printf("NETDEV_GetFrameRate failed:%d\n", NetDemo.netdevsdk.NETDEV_GetLastError()); return; } NetDemo.jLabelFrameRate.setText(String.valueOf(pdwFrameRate.getValue())); /* 获取窗口编码格式 */ IntByReference pdwVideoEncFmt = new IntByReference(); boolean bRet3 = NetDemo.netdevsdk.NETDEV_GetVideoEncodeFmt(NetDemo.lpPlayHandle,pdwVideoEncFmt); if(bRet3 != true) { System.out.printf("NETDEV_GetVideoEncodeFmt failed:%d\n", NetDemo.netdevsdk.NETDEV_GetLastError()); return; } String showEncodeFmt=null; if(pdwVideoEncFmt.getValue()==NETDEV_VIDEO_CODE_TYPE_E.NETDEV_VIDEO_CODE_MJPEG){ showEncodeFmt="MJPEG"; }else if(pdwVideoEncFmt.getValue()==NETDEV_VIDEO_CODE_TYPE_E.NETDEV_VIDEO_CODE_H264) { showEncodeFmt="H.264"; }else if(pdwVideoEncFmt.getValue()==NETDEV_VIDEO_CODE_TYPE_E.NETDEV_VIDEO_CODE_H265) { showEncodeFmt="H.265"; } NetDemo.jLabelVideoEncodeFmt.setText(showEncodeFmt); /* 获取视频分辨率 */ IntByReference pdwWidth = new IntByReference(); IntByReference pdwHeight = new IntByReference(); boolean bRet4 = NetDemo.netdevsdk.NETDEV_GetResolution(NetDemo.lpPlayHandle,pdwWidth,pdwHeight); if(bRet4 != true) { System.out.printf("NETDEV_GetResolution failed:%d\n", NetDemo.netdevsdk.NETDEV_GetLastError()); return; } NetDemo.jLabelGetpdwWidth.setText(String.valueOf(pdwWidth.getValue())+"x"); NetDemo.jLabelGetpdwHeight.setText(String.valueOf(pdwHeight.getValue())); /* 获取窗口丢包率 */ IntByReference pURLReceivePacketNum = new IntByReference(); IntByReference pURLLostPktNum = new IntByReference(); boolean bRet5 = NetDemo.netdevsdk.NETDEV_GetLostPacketRate(NetDemo.lpPlayHandle,pURLReceivePacketNum,pURLLostPktNum); if(bRet5 != true) { System.out.printf("NETDEV_GetLostPacketRate failed:%d\n", NetDemo.netdevsdk.NETDEV_GetLastError()); return; } double lostPacketRate=0.0; if(pURLLostPktNum.getValue()==0) { lostPacketRate=0.0; }else { BigDecimal receive=new BigDecimal(pURLReceivePacketNum.getValue()); BigDecimal lost=new BigDecimal(pURLLostPktNum.getValue()); BigDecimal sum=receive.add(lost); try { BigDecimal result=receive.divide(sum,2,BigDecimal.ROUND_HALF_UP); lostPacketRate=result.doubleValue(); } catch (Exception e) { return; } } NetDemo.jLabelGetpulRecvPktNum.setText(String.valueOf(lostPacketRate)); /* 获取静音状态 */ IntByReference pbMute=new IntByReference(); boolean bRet6= NetDemo.netdevsdk.NETDEV_GetMuteStatus(NetDemo.lpPlayHandle, pbMute); if(!bRet6) { System.out.printf("NETDEV_GetMuteStatus failed:%d\n", NetDemo.netdevsdk.NETDEV_GetLastError()); return; } NetDemo.getMute=pbMute.getValue(); /* 控制录像回放的状态 */ LongByReference PlayTime = new LongByReference(); boolean bRet = NetDemo.netdevsdk.NETDEV_PlayBackControl(NetDemo.lpPlayHandle, NETDEV_VOD_PLAY_CTRL_E.NETDEV_PLAY_CTRL_GETPLAYTIME, PlayTime); if(bRet){ long lTime = PlayTime.getValue(); NetDemo.jSliderPlayBack.setValue((int)lTime); long lRemainTime = (long)NetDemo.jSliderPlayBack.getMaximum() - lTime; String strRemainTime = String.valueOf(lRemainTime/60/60) + ":" + String.valueOf((lRemainTime/60)%60) + ":"+ String.valueOf(lRemainTime%60); String strInfo = Common.timeStamp2Date(String.valueOf(lTime), NetDemo.DateFormat); strInfo += " / "; strInfo += strRemainTime; NetDemo.lblProgressLabel.setText(strInfo); nCount = 0; } else{ nCount++; System.out.println("Get playback time failed"); } if((long)NetDemo.jSliderPlayBack.getMaximum() == PlayTime.getValue() || PlayTime.getValue() > (long)NetDemo.jSliderPlayBack.getMaximum() || nCount>3){ NetDemo.netdevsdk.NETDEV_StopPlayBack(NetDemo.lpPlayHandle); NetDemo.lpPlayHandle = null; break; } try{ Thread.sleep(700); }catch(InterruptedException e){ e.printStackTrace(); } } } }); NetDemo.singleLiveThread.execute(singlePlayBackByURLThread); } }else { System.out.println("NETDEV_GetReplayUrl, error:" + NetDemo.netdevsdk.NETDEV_GetLastError()); return; } } /** * * @introduction Playback by name * @description Calling the interface of NETDEV_PlayBackByName * */ public static void playByName() { if(null == NetDemo.lpUserID) { JOptionPane.showMessageDialog(null, "Please Login device first. error code"+NetDemo.netdevsdk.NETDEV_GetLastError()); return; } if(NetDemo.ChannelID == 0) { JOptionPane.showMessageDialog(null, "Please select an online channel."); return; } if(NetDemo.RecordTable.getSelectedRow()<0) { JOptionPane.showMessageDialog(null, "No file,please choose a file"); return; } if(null != NetDemo.lpPlayHandle) { JOptionPane.showMessageDialog(null, "Please stop playing first."); return; } NetDemo.jButtonStopPlayback.setEnabled(true); NetDemo.jButtonMic.setVisible(false); NetDemo.jSliderLiveMicSound.setVisible(false); NetDemo.jLabelLiveSound2.setVisible(false); NetDemo.jLableLiveMicSound.setVisible(false); NetDemo.jLabelLiveViewStreamUrl.setText(null); NETDEV_PLAYBACKINFO_S pstPlayBackInfo = new NETDEV_PLAYBACKINFO_S(); int row=NetDemo.RecordTable.getSelectedRow(); /* 获取文件名 */ String str=(String)NetDemo.RecordTable.getValueAt(row, 2); System.arraycopy(str.getBytes(), 0, pstPlayBackInfo.szName, 0, str.getBytes().length); String Beginstr=(String)NetDemo.RecordTable.getValueAt(row, 0); String Endstr=(String)NetDemo.RecordTable.getValueAt(row, 1); pstPlayBackInfo.tBeginTime =Common.date2TimeStamp(Beginstr, NetDemo.DateFormat); pstPlayBackInfo.tEndTime = Common.date2TimeStamp(Endstr, NetDemo.DateFormat); pstPlayBackInfo.dwLinkMode = NETDEV_TRANS_PROTOCAL_E.NETDEV_TRANS_PROTOCAL_TCP; pstPlayBackInfo.hPlayWnd = Native.getComponentPointer(NetDemo.panelPlayLabel); NetDemo.lpPlayHandle = NetDemo.netdevsdk.NETDEV_PlayBackByName(NetDemo.lpUserID, pstPlayBackInfo); if(null != NetDemo.lpPlayHandle){ NetDemo.jSliderPlayBack.setMinimum((int)pstPlayBackInfo.tBeginTime); NetDemo.jSliderPlayBack.setMaximum((int)pstPlayBackInfo.tEndTime); NetDemo.jSliderPlayBack.setValue(50); NetDemo.lblPlaybackSpeed.setText("1X"); NetDemo.netdevsdk.NETDEV_SetMuteStatus(NetDemo.lpPlayHandle,1); NetDemo.netdevsdk.NETDEV_OpenSound(NetDemo.lpPlayHandle); Thread singleRecordPlayByNameThread=new Thread(new Runnable() { @Override public void run() { int nCount = 0; while(true) { IntByReference pdwBitRate = new IntByReference(); boolean bRetBit = NetDemo.netdevsdk.NETDEV_GetBitRate(NetDemo.lpPlayHandle,pdwBitRate); if(bRetBit != true) { System.out.printf("NETDEV_GetBitRate failed:%d\n", NetDemo.netdevsdk.NETDEV_GetLastError()); return; } NetDemo.jLabelBitRateParam.setText(String.valueOf(pdwBitRate.getValue())); IntByReference pdwFrameRate = new IntByReference(); boolean bRet2 = NetDemo.netdevsdk.NETDEV_GetFrameRate(NetDemo.lpPlayHandle,pdwFrameRate); if(bRet2 != true) { System.out.printf("NETDEV_GetFrameRate failed:%d\n", NetDemo.netdevsdk.NETDEV_GetLastError()); return; } NetDemo.jLabelFrameRate.setText(String.valueOf(pdwFrameRate.getValue())); IntByReference pdwVideoEncFmt = new IntByReference(); boolean bRet3 = NetDemo.netdevsdk.NETDEV_GetVideoEncodeFmt(NetDemo.lpPlayHandle,pdwVideoEncFmt); if(bRet3 != true) { System.out.printf("NETDEV_GetVideoEncodeFmt failed:%d\n", NetDemo.netdevsdk.NETDEV_GetLastError()); return; } String showEncodeFmt=null; if(pdwVideoEncFmt.getValue()==NETDEV_VIDEO_CODE_TYPE_E.NETDEV_VIDEO_CODE_MJPEG){ showEncodeFmt="MJPEG"; }else if(pdwVideoEncFmt.getValue()==NETDEV_VIDEO_CODE_TYPE_E.NETDEV_VIDEO_CODE_H264) { showEncodeFmt="H.264"; }else if(pdwVideoEncFmt.getValue()==NETDEV_VIDEO_CODE_TYPE_E.NETDEV_VIDEO_CODE_H265) { showEncodeFmt="H.265"; } NetDemo.jLabelVideoEncodeFmt.setText(showEncodeFmt); IntByReference pdwWidth = new IntByReference(); IntByReference pdwHeight = new IntByReference(); boolean bRet4 = NetDemo.netdevsdk.NETDEV_GetResolution(NetDemo.lpPlayHandle,pdwWidth,pdwHeight); if(bRet4 != true) { System.out.printf("NETDEV_GetResolution failed:%d\n", NetDemo.netdevsdk.NETDEV_GetLastError()); return; } NetDemo.jLabelGetpdwWidth.setText(String.valueOf(pdwWidth.getValue())+"x"); NetDemo.jLabelGetpdwHeight.setText(String.valueOf(pdwHeight.getValue())); IntByReference pURLReceivePacketNum = new IntByReference(); IntByReference pURLLostPktNum = new IntByReference(); boolean bRet5 = NetDemo.netdevsdk.NETDEV_GetLostPacketRate(NetDemo.lpPlayHandle,pURLReceivePacketNum,pURLLostPktNum); if(bRet5 != true) { System.out.printf("NETDEV_GetLostPacketRate failed:%d\n", NetDemo.netdevsdk.NETDEV_GetLastError()); return; } double lostPacketRate=0.0; if(pURLLostPktNum.getValue()==0) { lostPacketRate=0.0; }else { BigDecimal receive=new BigDecimal(pURLReceivePacketNum.getValue()); BigDecimal lost=new BigDecimal(pURLLostPktNum.getValue()); BigDecimal sum=receive.add(lost); try { BigDecimal result=receive.divide(sum,2,BigDecimal.ROUND_HALF_UP); lostPacketRate=result.doubleValue(); } catch (Exception e) { return; } } NetDemo.jLabelGetpulRecvPktNum.setText(String.valueOf(lostPacketRate)); IntByReference pbMute=new IntByReference(); boolean bRet6= NetDemo.netdevsdk.NETDEV_GetMuteStatus(NetDemo.lpPlayHandle, pbMute); if(!bRet6) { System.out.printf("NETDEV_GetMuteStatus failed:%d\n", NetDemo.netdevsdk.NETDEV_GetLastError()); return; } NetDemo.getMute=pbMute.getValue(); LongByReference PlayTime = new LongByReference(); boolean bRet = NetDemo.netdevsdk.NETDEV_PlayBackControl(NetDemo.lpPlayHandle, NETDEV_VOD_PLAY_CTRL_E.NETDEV_PLAY_CTRL_GETPLAYTIME, PlayTime); if(bRet){ long lTime = PlayTime.getValue(); NetDemo.jSliderPlayBack.setValue((int)lTime); long lRemainTime = (long)NetDemo.jSliderPlayBack.getMaximum() - lTime; String strRemainTime = String.valueOf(lRemainTime/60/60) + ":" + String.valueOf((lRemainTime/60)%60) + ":"+ String.valueOf(lRemainTime%60); String strInfo = Common.timeStamp2Date(String.valueOf(lTime), NetDemo.DateFormat); strInfo += " / "; strInfo += strRemainTime; NetDemo.lblProgressLabel.setText(strInfo); nCount = 0; } else{ nCount++; System.out.println("Get playback time failed"); } if((long)NetDemo.jSliderPlayBack.getMaximum() == PlayTime.getValue() || PlayTime.getValue() > (long)NetDemo.jSliderPlayBack.getMaximum() || nCount>3){ NetDemo.netdevsdk.NETDEV_StopPlayBack(NetDemo.lpPlayHandle); NetDemo.lpPlayHandle = null; break; } try{ Thread.sleep(700); }catch(InterruptedException e){ e.printStackTrace(); } } } }); NetDemo.singleLiveThread.execute(singleRecordPlayByNameThread); } } /** * * @introduction Playback by time * @description Calling the interface of NETDEV_PlayBackByTime * */ public static void playByTime() { if(null == NetDemo.lpUserID) { JOptionPane.showMessageDialog(null, "Please Login device first. error code"+NetDemo.netdevsdk.NETDEV_GetLastError()); return; } if(NetDemo.ChannelID == 0) { JOptionPane.showMessageDialog(null, "Please select an online channel."); return; } if(null != NetDemo.lpPlayHandle) { JOptionPane.showMessageDialog(null, "Please stop playing first."); return; } if(NetDemo.RecordTable.getSelectedRow()<0) { JOptionPane.showMessageDialog(null, "No file,please choose a file"); return; } NetDemo.jButtonStopPlayback.setEnabled(true); NetDemo.jButtonMic.setVisible(false); NetDemo.jSliderLiveMicSound.setVisible(false); NetDemo.jLabelLiveSound2.setVisible(false); NetDemo.jLableLiveMicSound.setVisible(false); NetDemo.jLabelLiveViewStreamUrl.setText(null); //获取选中行 int row=NetDemo.RecordTable.getSelectedRow(); String Beginstr=(String)NetDemo.RecordTable.getValueAt(row, 0); String Endstr=(String)NetDemo.RecordTable.getValueAt(row, 1); NETDEV_PLAYBACKCOND_S pstPlayBackInfo = new NETDEV_PLAYBACKCOND_S(); pstPlayBackInfo.dwChannelID = NetDemo.ChannelID; pstPlayBackInfo.hPlayWnd = Native.getComponentPointer(NetDemo.panelPlayLabel); pstPlayBackInfo.tBeginTime = Common.date2TimeStamp(Beginstr, NetDemo.DateFormat); pstPlayBackInfo.tEndTime = Common.date2TimeStamp(Endstr, NetDemo.DateFormat); pstPlayBackInfo.dwLinkMode = NETDEV_TRANS_PROTOCAL_E.NETDEV_TRANS_PROTOCAL_TCP; NetDemo.lpPlayHandle = NetDemo.netdevsdk.NETDEV_PlayBackByTime(NetDemo.lpUserID, pstPlayBackInfo); if(null != NetDemo.lpPlayHandle){ NetDemo.jSliderPlayBack.setMaximum((int)pstPlayBackInfo.tEndTime); NetDemo.jSliderPlayBack.setMinimum((int)pstPlayBackInfo.tBeginTime); NetDemo.jSliderPlayBack.setValue(50); NetDemo.lblPlaybackSpeed.setText("1X"); NetDemo.netdevsdk.NETDEV_SetMuteStatus(NetDemo.lpPlayHandle,1); NetDemo.netdevsdk.NETDEV_OpenSound(NetDemo.lpPlayHandle); Thread singleRecordPlayThread=new Thread(new Runnable() { @Override public void run() { int nCount = 0; while(null!=NetDemo.lpPlayHandle) { IntByReference pdwBitRate = new IntByReference(); boolean bRetBit = NetDemo.netdevsdk.NETDEV_GetBitRate(NetDemo.lpPlayHandle,pdwBitRate); if(bRetBit != true) { System.out.printf("NETDEV_GetBitRate failed:%d\n", NetDemo.netdevsdk.NETDEV_GetLastError()); return; } NetDemo.jLabelBitRateParam.setText(String.valueOf(pdwBitRate.getValue())); IntByReference pdwFrameRate = new IntByReference(); boolean bRet2 = NetDemo.netdevsdk.NETDEV_GetFrameRate(NetDemo.lpPlayHandle,pdwFrameRate); if(bRet2 != true) { System.out.printf("NETDEV_GetFrameRate failed:%d\n", NetDemo.netdevsdk.NETDEV_GetLastError()); return; } NetDemo.jLabelFrameRate.setText(String.valueOf(pdwFrameRate.getValue())); IntByReference pdwVideoEncFmt = new IntByReference(); boolean bRet3 = NetDemo.netdevsdk.NETDEV_GetVideoEncodeFmt(NetDemo.lpPlayHandle,pdwVideoEncFmt); if(bRet3 != true) { System.out.printf("NETDEV_GetVideoEncodeFmt failed:%d\n", NetDemo.netdevsdk.NETDEV_GetLastError()); return; } String showEncodeFmt=null; if(pdwVideoEncFmt.getValue()==NETDEV_VIDEO_CODE_TYPE_E.NETDEV_VIDEO_CODE_MJPEG){ showEncodeFmt="MJPEG"; }else if(pdwVideoEncFmt.getValue()==NETDEV_VIDEO_CODE_TYPE_E.NETDEV_VIDEO_CODE_H264) { showEncodeFmt="H.264"; }else if(pdwVideoEncFmt.getValue()==NETDEV_VIDEO_CODE_TYPE_E.NETDEV_VIDEO_CODE_H265) { showEncodeFmt="H.265"; } NetDemo.jLabelVideoEncodeFmt.setText(showEncodeFmt); IntByReference pdwWidth = new IntByReference(); IntByReference pdwHeight = new IntByReference(); boolean bRet4 = NetDemo.netdevsdk.NETDEV_GetResolution(NetDemo.lpPlayHandle,pdwWidth,pdwHeight); if(bRet4 != true) { System.out.printf("NETDEV_GetResolution failed:%d\n", NetDemo.netdevsdk.NETDEV_GetLastError()); return; } NetDemo.jLabelGetpdwWidth.setText(String.valueOf(pdwWidth.getValue())+"x"); NetDemo.jLabelGetpdwHeight.setText(String.valueOf(pdwHeight.getValue())); IntByReference pURLReceivePacketNum = new IntByReference(); IntByReference pURLLostPktNum = new IntByReference(); boolean bRet5 = NetDemo.netdevsdk.NETDEV_GetLostPacketRate(NetDemo.lpPlayHandle,pURLReceivePacketNum,pURLLostPktNum); if(bRet5 != true) { System.out.printf("NETDEV_GetLostPacketRate failed:%d\n", NetDemo.netdevsdk.NETDEV_GetLastError()); return; } double lostPacketRate=0.0; if(pURLLostPktNum.getValue()==0) { lostPacketRate=0.0; }else { BigDecimal receive=new BigDecimal(pURLReceivePacketNum.getValue()); BigDecimal lost=new BigDecimal(pURLLostPktNum.getValue()); BigDecimal sum=receive.add(lost); try { BigDecimal result=receive.divide(sum,2,BigDecimal.ROUND_HALF_UP); lostPacketRate=result.doubleValue(); } catch (Exception e) { return; } } NetDemo.jLabelGetpulRecvPktNum.setText(String.valueOf(lostPacketRate)); IntByReference pbMute=new IntByReference(); boolean bRet6= NetDemo.netdevsdk.NETDEV_GetMuteStatus(NetDemo.lpPlayHandle, pbMute); if(!bRet6) { System.out.printf("NETDEV_GetMuteStatus failed:%d\n", NetDemo.netdevsdk.NETDEV_GetLastError()); return; } NetDemo.getMute=pbMute.getValue(); LongByReference PlayTime = new LongByReference(); boolean bRet = NetDemo.netdevsdk.NETDEV_PlayBackControl(NetDemo.lpPlayHandle, NETDEV_VOD_PLAY_CTRL_E.NETDEV_PLAY_CTRL_GETPLAYTIME, PlayTime); if(bRet){ long lTime = PlayTime.getValue(); NetDemo.jSliderPlayBack.setValue((int)lTime); long lRemainTime = (long)NetDemo.jSliderPlayBack.getMaximum() - lTime; String strRemainTime = String.valueOf(lRemainTime/60/60) + ":" + String.valueOf((lRemainTime/60)%60) + ":"+ String.valueOf(lRemainTime%60); String strInfo = Common.timeStamp2Date(String.valueOf(lTime), NetDemo.DateFormat); strInfo += " / "; strInfo += strRemainTime; NetDemo.lblProgressLabel.setText(strInfo); nCount = 0; } else{ nCount++; System.out.println("Get playback time failed"); } if((long)NetDemo.jSliderPlayBack.getMaximum() == PlayTime.getValue() || PlayTime.getValue() > (long)NetDemo.jSliderPlayBack.getMaximum() || nCount>3){ NetDemo.netdevsdk.NETDEV_StopPlayBack(NetDemo.lpPlayHandle); NetDemo.lpPlayHandle = null; break; } try{ Thread.sleep(700); }catch(InterruptedException e){ e.printStackTrace(); } } } }); NetDemo.singleLiveThread.execute(singleRecordPlayThread); } } /** * * @introduction Stop playback * @description Calling the interface of NETDEV_StopPlayBack * */ public static void stopPlay() { if(null != NetDemo.lpPlayHandle){ NetDemo.netdevsdk.NETDEV_StopPlayBack(NetDemo.lpPlayHandle); NetDemo.lpPlayHandle = null; } NetDemo.jButtonStopPlayback.setEnabled(false); NetDemo.panelPlayLabel.repaint(); NetDemo.jSliderPlayBack.setValue(0); NetDemo.jButtonMic.setVisible(true); NetDemo.jSliderLiveMicSound.setVisible(true); NetDemo.jLabelFrameRate.setText(null); NetDemo.jLabelBitRateParam.setText(null); NetDemo.jLabelVideoEncodeFmt.setText(null); NetDemo.jLabelGetpdwWidth.setText(null); NetDemo.jLabelGetpdwHeight.setText(null); NetDemo.jLabelGetpulRecvPktNum.setText(null); NetDemo.jLabelLiveViewStreamUrl.setText(null); NetDemo.lblProgressLabel.setText(null); NetDemo.lblPlaybackSpeed.setText("1X"); } /** * * @introduction Pause or Resume * @description Calling the interface of NETDEV_PlayBackControl * */ public static void pauseOrResume() { if(null == NetDemo.lpUserID) { JOptionPane.showMessageDialog(null, "Please Login device first. error code"+NetDemo.netdevsdk.NETDEV_GetLastError()); return; } if(NETDEV_VOD_PLAY_CTRL_E.NETDEV_PLAY_CTRL_PAUSE == NetDemo.PlayBackControlCmd){ boolean bRet = NetDemo.netdevsdk.NETDEV_PlayBackControl(NetDemo.lpPlayHandle, NETDEV_VOD_PLAY_CTRL_E.NETDEV_PLAY_CTRL_RESUME, null); if(bRet){ NetDemo.PlayBackControlCmd = NETDEV_VOD_PLAY_CTRL_E.NETDEV_PLAY_CTRL_RESUME; NetDemo.jButtonPauseOrResume.setText("pause"); } } else{ boolean bRet = NetDemo.netdevsdk.NETDEV_PlayBackControl(NetDemo.lpPlayHandle, NETDEV_VOD_PLAY_CTRL_E.NETDEV_PLAY_CTRL_PAUSE, null); if(bRet){ NetDemo.PlayBackControlCmd = NETDEV_VOD_PLAY_CTRL_E.NETDEV_PLAY_CTRL_PAUSE; NetDemo.jButtonPauseOrResume.setText("Resume"); } } } /** * * @introduction Drag playback progress bar to change play time * @description * */ public static void dragPlaybackSlider() { /* 保持拖动进度条前后播放状态相同 */ if(NETDEV_VOD_PLAY_CTRL_E.NETDEV_PLAY_CTRL_PAUSE == NetDemo.PlayBackControlCmd) { LongByReference PlayTime = new LongByReference(); PlayTime.setValue((long)NetDemo.jSliderPlayBack.getValue()); boolean bRet = NetDemo.netdevsdk.NETDEV_PlayBackControl(NetDemo.lpPlayHandle, NETDEV_VOD_PLAY_CTRL_E.NETDEV_PLAY_CTRL_SETPLAYTIME, PlayTime); if(!bRet){ System.out.println("Set playback time failed:" + Common.timeStamp2Date(Long.toString(PlayTime.getValue()), NetDemo.DateFormat)); } boolean bRet1 = NetDemo.netdevsdk.NETDEV_PlayBackControl(NetDemo.lpPlayHandle, NETDEV_VOD_PLAY_CTRL_E.NETDEV_PLAY_CTRL_PAUSE, null); if(bRet1){ NetDemo.PlayBackControlCmd = NETDEV_VOD_PLAY_CTRL_E.NETDEV_PLAY_CTRL_PAUSE; NetDemo.jButtonPauseOrResume.setText("Resume"); } }else { LongByReference PlayTime = new LongByReference(); PlayTime.setValue((long)NetDemo.jSliderPlayBack.getValue()); boolean bRet = NetDemo.netdevsdk.NETDEV_PlayBackControl(NetDemo.lpPlayHandle, NETDEV_VOD_PLAY_CTRL_E.NETDEV_PLAY_CTRL_SETPLAYTIME, PlayTime); if(!bRet){ System.out.println("Set playback time failed:" + Common.timeStamp2Date(Long.toString(PlayTime.getValue()), NetDemo.DateFormat)); } } } /** * * @introduction Slow the speed of playing playback * @description Calling the interface of NETDEV_PlayBackControl * */ public static void slowPlaySpeed() { if(null == NetDemo.lpUserID) { JOptionPane.showMessageDialog(null, "Please Login device first. error code"+NetDemo.netdevsdk.NETDEV_GetLastError()); return; } LongByReference PlaySpeed = new LongByReference(); boolean bRet = NetDemo.netdevsdk.NETDEV_PlayBackControl(NetDemo.lpPlayHandle, NETDEV_VOD_PLAY_CTRL_E.NETDEV_PLAY_CTRL_GETPLAYSPEED, PlaySpeed); if(!bRet){ System.out.println("Get playback speed failed"); return; } long value = PlaySpeed.getValue(); if(value <= NETDEV_VOD_PLAY_STATUS_E.NETDEV_PLAY_STATUS_16_BACKWARD){ JOptionPane.showMessageDialog(null, "It's already minimum playback speed."); return; } value -= 1; if((value==NETDEV_VOD_PLAY_STATUS_E.NETDEV_PLAY_STATUS_HALF_BACKWARD)||(value==NETDEV_VOD_PLAY_STATUS_E.NETDEV_PLAY_STATUS_QUARTER_BACKWARD)) { value-=2; } PlaySpeed.setValue(value); bRet = NetDemo.netdevsdk.NETDEV_PlayBackControl(NetDemo.lpPlayHandle, NETDEV_VOD_PLAY_CTRL_E.NETDEV_PLAY_CTRL_SETPLAYSPEED, PlaySpeed); if(!bRet){ System.out.println("Set playback speed failed:" + value); } else{ NetDemo.lblPlaybackSpeed.setText(Common.PlaybackSpeedToLong((int)value)); System.out.println("Set playback speed success:" + value); } if(NETDEV_VOD_PLAY_CTRL_E.NETDEV_PLAY_CTRL_PAUSE == NetDemo.PlayBackControlCmd) { NetDemo.jButtonPauseOrResume.doClick(); } } /** * * @introduction Fast the speed of playing playback * @description Calling the interface of NETDEV_PlayBackControl * */ public static void fastPlaySpeed() { if(null == NetDemo.lpUserID) { JOptionPane.showMessageDialog(null, "Please Login device first. error code"+NetDemo.netdevsdk.NETDEV_GetLastError()); return; } LongByReference PlaySpeed = new LongByReference(); boolean bRet = NetDemo.netdevsdk.NETDEV_PlayBackControl(NetDemo.lpPlayHandle, NETDEV_VOD_PLAY_CTRL_E.NETDEV_PLAY_CTRL_GETPLAYSPEED, PlaySpeed); if(!bRet){ System.out.println("Get playback speed failed"); return; } long value = PlaySpeed.getValue(); if(value >= NETDEV_VOD_PLAY_STATUS_E.NETDEV_PLAY_STATUS_16_FORWARD){ JOptionPane.showMessageDialog(null, "It's already maximum playback speed."); return; } value += 1; if((value==NETDEV_VOD_PLAY_STATUS_E.NETDEV_PLAY_STATUS_HALF_BACKWARD)||(value==NETDEV_VOD_PLAY_STATUS_E.NETDEV_PLAY_STATUS_QUARTER_BACKWARD)) { value+=2; } PlaySpeed.setValue(value); bRet = NetDemo.netdevsdk.NETDEV_PlayBackControl(NetDemo.lpPlayHandle, NETDEV_VOD_PLAY_CTRL_E.NETDEV_PLAY_CTRL_SETPLAYSPEED, PlaySpeed); if(!bRet){ System.out.println("Set playback speed failed:" + value); } else{ NetDemo.lblPlaybackSpeed.setText(Common.PlaybackSpeedToLong((int)value)); System.out.println("Set playback speed success:" + value); } if(NETDEV_VOD_PLAY_CTRL_E.NETDEV_PLAY_CTRL_PAUSE == NetDemo.PlayBackControlCmd) { NetDemo.jButtonPauseOrResume.doClick(); } } }