package com.ycl.api.YS.playback.play;
|
|
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.File;
|
|
/**
|
*
|
* @introduction Download Record
|
* @description Support NVR/VMS
|
*/
|
public class DownloadRecord {
|
/**
|
*
|
* @introduction Download Record
|
* @description Calling the interface of NETDEV_GetFileByTime to download the record by time
|
*
|
*/
|
public static void startDownload() {
|
if(null == NetDemo.lpUserID)
|
{
|
JOptionPane.showMessageDialog(null, "Please Login device first. error code"+NetDemo.netdevsdk.NETDEV_GetLastError());
|
return;
|
}
|
if(NetDemo.RecordTable.getSelectedRow()<0) {
|
JOptionPane.showMessageDialog(null, "No file,please choose a file");
|
return;
|
}
|
|
NetDemo.jButtonStartdownload.setEnabled(false);
|
int row=NetDemo.RecordTable.getSelectedRow();
|
String Beginstr=(String)NetDemo.RecordTable.getValueAt(row, 0);
|
String Endstr=(String)NetDemo.RecordTable.getValueAt(row, 1);
|
String strSeparator = File.separator;
|
NetDemo.strRecordPath = System.getProperty("user.dir").replaceAll("%20"," ") + strSeparator+"Record"+strSeparator+"DownloadFile" + Common.timeStamp()+ "_D"+NetDemo.ChannelID;
|
NETDEV_PLAYBACKCOND_S pstPlayBackCond = new NETDEV_PLAYBACKCOND_S();
|
pstPlayBackCond.dwChannelID = NetDemo.ChannelID;
|
pstPlayBackCond.dwDownloadSpeed = NETDEV_E_DOWNLOAD_SPEED_E.NETDEV_DOWNLOAD_SPEED_EIGHT;
|
pstPlayBackCond.tBeginTime = Common.date2TimeStamp(Beginstr, NetDemo.DateFormat);
|
pstPlayBackCond.tEndTime = Common.date2TimeStamp(Endstr, NetDemo.DateFormat);
|
|
NetDemo.lpDownloadHandle = NetDemo.netdevsdk.NETDEV_GetFileByTime(NetDemo.lpUserID, pstPlayBackCond, NetDemo.strRecordPath, NETDEV_MEDIA_FILE_FORMAT_E.NETDEV_MEDIA_FILE_MP4);
|
if(null != NetDemo.lpDownloadHandle){
|
NetDemo.DownloadProgress.setMaximum((int)pstPlayBackCond.tEndTime);
|
NetDemo.DownloadProgress.setMinimum((int)pstPlayBackCond.tBeginTime);
|
Thread singledownloadThread=new Thread(new Runnable() {
|
@Override
|
public void run() {
|
int nCount = 0;
|
long getFileTime=0;
|
int failCount=0;
|
while(true)
|
{
|
LongByReference PlayTime = new LongByReference();
|
boolean bRet = NetDemo.netdevsdk.NETDEV_PlayBackControl(NetDemo.lpDownloadHandle, NETDEV_VOD_PLAY_CTRL_E.NETDEV_PLAY_CTRL_GETPLAYTIME, PlayTime);
|
if(bRet){
|
long lTime = PlayTime.getValue();
|
NetDemo.DownloadProgress.setValue((int)lTime);
|
if(lTime!=getFileTime) {
|
getFileTime=lTime;
|
failCount=0;
|
}else {
|
failCount++;
|
if(failCount==5) {
|
NetDemo.netdevsdk.NETDEV_StopGetFile(NetDemo.lpDownloadHandle);
|
NetDemo.DownloadProgress.setValue(NetDemo.DownloadProgress.getMaximum());
|
NetDemo.lpDownloadHandle = null;
|
break;
|
}
|
}
|
}
|
else{
|
nCount++;
|
System.out.println("Get playback time failed");
|
}
|
if((long)NetDemo.DownloadProgress.getMaximum() == PlayTime.getValue() || PlayTime.getValue() > (long)NetDemo.DownloadProgress.getMaximum()
|
|| nCount>3){
|
NetDemo.netdevsdk.NETDEV_StopGetFile(NetDemo.lpDownloadHandle);
|
NetDemo.DownloadProgress.setValue(NetDemo.DownloadProgress.getMaximum());
|
NetDemo.lpDownloadHandle = null;
|
NetDemo.jButtonStartdownload.setEnabled(true);
|
break;
|
}
|
try{
|
Thread.sleep(700);
|
}catch(InterruptedException e){
|
e.printStackTrace();
|
}
|
}
|
}
|
});
|
NetDemo.singleLiveThread.execute(singledownloadThread);
|
}
|
}
|
|
/**
|
*
|
* @introduction Download Record by name
|
* @description Calling the interface of NETDEV_GetFileByName to download the record by time
|
*
|
*/
|
public static void startDownloadByName() {
|
if(null == NetDemo.lpUserID)
|
{
|
JOptionPane.showMessageDialog(null, "Please Login device first. error code"+NetDemo.netdevsdk.NETDEV_GetLastError());
|
return;
|
}
|
if(NetDemo.RecordTable.getSelectedRow()<0) {
|
JOptionPane.showMessageDialog(null, "No file,please choose a file");
|
return;
|
}
|
|
NetDemo.jButtonStartdownloadByName.setEnabled(false);
|
String strSeparator = File.separator;
|
NetDemo.strRecordPath = System.getProperty("user.dir").replaceAll("%20"," ") + strSeparator +"Record"+strSeparator+"DownloadFile" + String.valueOf(Common.timeStamp())+ "_D"+NetDemo.ChannelID;
|
NETDEV_PLAYBACKINFO_S pstPlayBackCond = new NETDEV_PLAYBACKINFO_S();
|
int row=NetDemo.RecordTable.getSelectedRow();
|
/* 获取文件名 */
|
String str=(String)NetDemo.RecordTable.getValueAt(row, 2);
|
System.arraycopy(str.getBytes(), 0, pstPlayBackCond.szName, 0, str.getBytes().length);
|
String Beginstr=(String)NetDemo.RecordTable.getValueAt(row, 0);
|
String Endstr=(String)NetDemo.RecordTable.getValueAt(row, 1);
|
pstPlayBackCond.dwDownloadSpeed = NETDEV_E_DOWNLOAD_SPEED_E.NETDEV_DOWNLOAD_SPEED_EIGHT;
|
pstPlayBackCond.tBeginTime =Common.date2TimeStamp(Beginstr, NetDemo.DateFormat);
|
pstPlayBackCond.tEndTime = Common.date2TimeStamp(Endstr, NetDemo.DateFormat);
|
NetDemo.lpDownloadHandleByName = NetDemo.netdevsdk.NETDEV_GetFileByName(NetDemo.lpUserID, pstPlayBackCond, NetDemo.strRecordPath, NETDEV_MEDIA_FILE_FORMAT_E.NETDEV_MEDIA_FILE_MP4);
|
|
if(null != NetDemo.lpDownloadHandleByName){
|
NetDemo.DownloadProgress.setMaximum((int)pstPlayBackCond.tEndTime);
|
NetDemo.DownloadProgress.setMinimum((int)pstPlayBackCond.tBeginTime);
|
Thread singledownloadByNameThread=new Thread(new Runnable() {
|
@Override
|
public void run() {
|
int nCount = 0;
|
long getFileTime=0;
|
int failCount=0;
|
while(true)
|
{
|
LongByReference PlayTime = new LongByReference();
|
boolean bRet = NetDemo.netdevsdk.NETDEV_PlayBackControl(NetDemo.lpDownloadHandleByName, NETDEV_VOD_PLAY_CTRL_E.NETDEV_PLAY_CTRL_GETPLAYTIME, PlayTime);
|
if(bRet){
|
long lTime = PlayTime.getValue();
|
NetDemo.DownloadProgress.setValue((int)lTime);
|
if(lTime!=getFileTime) {
|
getFileTime=lTime;
|
failCount=0;
|
}else {
|
failCount++;
|
if(failCount==5) {
|
NetDemo.netdevsdk.NETDEV_StopGetFile(NetDemo.lpDownloadHandleByName);
|
NetDemo.DownloadProgress.setValue(NetDemo.DownloadProgress.getMaximum());
|
NetDemo.lpDownloadHandleByName = null;
|
break;
|
}
|
}
|
}
|
else{
|
nCount++;
|
System.out.println("Get playback time failed");
|
}
|
if((long)NetDemo.DownloadProgress.getMaximum() == PlayTime.getValue() || PlayTime.getValue() > (long)NetDemo.DownloadProgress.getMaximum()
|
|| nCount>3){
|
NetDemo.netdevsdk.NETDEV_StopGetFile(NetDemo.lpDownloadHandleByName);
|
NetDemo.DownloadProgress.setValue(NetDemo.DownloadProgress.getMaximum());
|
NetDemo.lpDownloadHandleByName = null;
|
NetDemo.jButtonStartdownloadByName.setEnabled(true);
|
break;
|
}
|
try{
|
Thread.sleep(700);
|
}catch(InterruptedException e){
|
e.printStackTrace();
|
}
|
}
|
|
}
|
});
|
NetDemo.singleLiveThread.execute(singledownloadByNameThread);
|
}
|
}
|
|
/**
|
*
|
* @introduction Stop download
|
* @description Calling the interface of NETDEV_StopGetFile
|
*
|
*/
|
public static void stopDownload() {
|
NetDemo.jButtonStartdownload.setEnabled(true);
|
if(null != NetDemo.lpDownloadHandle){
|
NetDemo.netdevsdk.NETDEV_StopGetFile(NetDemo.lpDownloadHandle);
|
NetDemo.lpDownloadHandle = null;
|
NetDemo.DownloadProgress.setValue(NetDemo.DownloadProgress.getMaximum());
|
}else {
|
JOptionPane.showMessageDialog(null, "No file is downloading,or you use wrong button.");
|
}
|
|
}
|
|
/**
|
*
|
* @introduction Stop download by name
|
* @description Calling the interface of NETDEV_StopGetFile
|
*
|
*/
|
public static void stopDownloadByName() {
|
NetDemo.jButtonStartdownloadByName.setEnabled(true);
|
if(null != NetDemo.lpDownloadHandleByName){
|
NetDemo.netdevsdk.NETDEV_StopGetFile(NetDemo.lpDownloadHandleByName);
|
NetDemo.lpDownloadHandleByName = null;
|
NetDemo.DownloadProgress.setValue(NetDemo.DownloadProgress.getMaximum());
|
}else {
|
JOptionPane.showMessageDialog(null, "No file is downloading,or you use wrong button.");
|
}
|
|
}
|
|
}
|