CMSV6帮助文档
/
901 DOCS · 226 VIDEOSEN

设备直连播放视频功能

作者 谢周轩更新 2025-10-14 16:35:58文档 ID 2364约 4,653 字 · 阅读 11 分钟查看原文 ↗

1、功能说明

手机app对接直连设备播放视频功能

2、接口说明

2.1 Android设备查找接口

  • 说明: 打开查找对象
    原型:long SDOpenSearch()
    返回值:0表示失败,其它为成功
    备注:

  • 说明:获取查找结果
    原型:int SDGetSearchResult(long lSearchHandle, byte[] szDevInfo, int nLength)
    参数:lSearchHandle: SDOpenSearch的返回值
    szDevInfo: DevIDNO:NetType(0=Wifi, 1=Net):IP:DevType:chn
    返回值:0表示成功,其它为失败

  • 说明:开始查找
    原型:int SDStartSearch(long lSearchHandle)
    参数:lSearchHandle: SDOpenSearch的返回值
    返回值:0表示成功,其它为失败

  • 说明:停止查找
    原型:int SDStopSearch(long lSearchHandle)
    参数:lSearchHandle: SDOpenSearch的返回值
    返回值:0表示成功,其它为失败

  • 说明:关闭搜索
    原型:int SDCloseSearch (long lSearchHandle)
    参数:lSearchHandle: SDOpenSearch的返回值
    返回值:0表示成功,其它为失败

示例:

private long mSearchHandle = 0;
private Handler mHandler = new Handler();
private SearchRunnable mSearchRunnable = new SearchRunnable();

protected void startSearch() {
if (0 == mSearchHandle) {
mSearchHandle = NetClient.SDOpenSearch();
mSearchList.clear();
NetClient.SDStartSearch(mSearchHandle, NetClient.SEARCH_DEFAULT_PORT); //默认端口为6688
mHandler.postDelayed(mSearchRunnable, 200);
}
}

    protected void stopSearch() {
        if (0 != mSearchHandle) {
            NetClient.SDStopSearch(mSearchHandle);
            NetClient.SDCloseSearch(mSearchHandle);
            mHandler.removeCallbacks(mSearchRunnable);
            mSearchHandle = 0;
        }
    }
    final class SearchRunnable implements Runnable {
        public void run() {
            boolean isFinished = false;
            if (0 != mSearchHandle) {
                while (true) {
                    byte[] result = new byte[1024];
                    java.util.Arrays.fill(result, (byte)0);
                    int ret = NetClient.SDGetSearchResult(mSearchHandle, result, 1024);
                    if (ret == NetClient.NET_SUCCESS) {
                        int i = 0;
                        for (i = 0; i < result.length; ++ i) {
                            if (result[i] == 0) {
                                break;
                            }
                        }
                        byte[] temp = new byte[i];
                        System.arraycopy(result, 0, temp, 0, i);
                        //szDevInfo为DevIDNO:NetType(0=3G, 1=Wifi, 2=Net):NetName:IP:DevType:chn
                        String devInfo = new String(temp);
                        String[] info = devInfo.split(":");
                        DeviceSearch search = new DeviceSearch();
                        search.setDevIdno(info[0]);
                        search.setNetType(Integer.parseInt(info[1]));
                        search.setNetName(info[2]);
                        //设备局域网IP地址,直连播放视频时使用
                        search.setIpAddr(info[3]);
                        search.setDevType(Integer.parseInt(info[4]));
                        search.setChannel(Integer.parseInt(info[5]));
                        mSearchList.add(search);
                        continue;
                    }
                    else if (ret == NetClient.SEARCH_FINISHED) {
                        isFinished = true;
                        if (mSearchList.size() > 0) {
                            mAdapter.setData(mSearchList);
                            onListLoadSuccess(false);
                        } else {
                            setListNullTip(R.string.cam_search_null);
                            onListLoadSuccess(true);
                        }
                    } 
                    break;
                }
            }
            if (!isFinished) {
                mHandler.postDelayed(mSearchRunnable, 200);
            }
        }
    }

2.2 IOS设备查找接口

  • 说明:打开查找对象
    原型:NETMEDIA_API int API_CALL NETMEDIA_SDOpenSearch(long lpSearchHandle);
    参数:long lpSearchHandle 输出,搜索对象
    返回值:0表示成功,其它为失败

  • 说明:打开查找对象
    原型:NETMEDIA_API int API_CALL NETMEDIA_SDOpenSearch(long lpSearchHandle);
    参数:long lpSearchHandle 输出,搜索对象
    返回值:0表示成功,其它为失败

    (void)startSearch {
    if (0 == mSearchHandle) {

          //mHubLoading = [[MBProgressHUD showHUDAddedTo:self.view animated:YES] retain];
          //mHubLoading.labelText = NSLocalizedString(@"cam_search_tip", @"");
          //mHubLoading.delegate = self;
          if ([mLstDevice count] > 0) {
              [mLstDevice removeAllObjects];
              [_mListCamera reloadData];
          }
          _mLbLoadTip.text = NSLocalizedString(@"cam_search_tip", @"");
          _mLbLoadTip.hidden = NO;
          NETMEDIA_SDOpenSearch(&mSearchHandle);
          //mSearchList.clear();
          NETMEDIA_SDStartSearch(mSearchHandle, SEARCH_DEFAULT_PORT);
          mTimerSearch = [NSTimer scheduledTimerWithTimeInterval:0.04 target:self selector:@selector(onTimerSearch) userInfo:nil repeats:YES ];

    }
    }

    (void)stopSearch {
    if (0 != mSearchHandle) {

          NETMEDIA_SDStopSearch(mSearchHandle);
          NETMEDIA_SDCloseSearch(mSearchHandle);
          mSearchHandle = 0;
          _mLbLoadTip.text = @"";
          if( mTimerSearch != nil) {
              [mTimerSearch invalidate ];
              mTimerSearch = nil;
          }

    }
    }

    (void) onTimerSearch {
    char result[1024] = {0};
    int ret = NETMEDIA_SDGetSearchResult(mSearchHandle, result, 1024);
    if (ret == NETMEDIA_OK) {

          NSString *str = [NSString stringWithCString:result encoding:NSUTF8StringEncoding];
          //szDevInfo为DevIDNO:NetType(0=3G, 1=Wifi, 2=Net):NetName:IP:DevType:chn
          NSArray *aArray = [str componentsSeparatedByString:@":"];
          TTXDeviceSearch* search = [[TTXDeviceSearch alloc] init];
          search.devIdno = aArray[0];
          search.netType = [aArray[1] intValue];
          search.netName = aArray[2];
          search.ipAddr = aArray[3];
          search.devType  = [aArray[4] intValue];
          search.channel = [aArray[5] intValue];
          [mLstDevice addObject:search];
          [search release];

    } else if (ret == NETMEDIA_SEARCH_FINISHED) {

          if (mHubLoading != nil) {
              [mHubLoading hide:YES];
          }
          [self stopSearch];
          if ([mLstDevice count] > 0) {
              [_mListCamera reloadData];
          } else {
              [_mImgLoadTip setImage:[UIImage imageNamed:@"images/camlist_nodata.png"]];
              _mImgLoadTip.hidden = NO;
              _mLbLoadTip.text = NSLocalizedString(@"cam_search_null", @"");
              _mLbLoadTip.hidden = NO;
          }

    }
    }

数据来源 help.cmsv8.com
901 篇文档 · 226 个视频 · docs.alwaycare.com