天天看點

C# 視訊監控系列(10):伺服器端——驗證、設定畫面品質、字幕疊加、闆卡序列号

前言

     本章将伺服器端幾個非主要但常用的功能分享一下。

注意

     本系列文章限于學習交流,注重過程,由于涉及公司,是以不提供源代碼下載下傳,非常抱歉!!但是請大家放心,核心、實作以及其他能夠貼出來的代碼我都會貼出來,并且争取盡所能的回答留言裡的每一個問題,感謝大家關注,歡迎交流 :)

系列

正文

     一、驗證

          1.1     ip驗證

               vc++ code:

                    oninitdialog方法

mp4_servercheckip(checkip);

                    checkip委托

C# 視訊監控系列(10):伺服器端——驗證、設定畫面品質、字幕疊加、闆卡序列号

int callback checkip(dword nchannel,char* nip)

{

/*

    cstring ctemp;

    ctemp.format("%s",nip);

    if (ctemp == "192.0.0.215")

        return -1;

*/

    return 0;

}

C# 視訊監控系列(10):伺服器端——驗證、設定畫面品質、字幕疊加、闆卡序列号

                    代碼說明:

                         1.     自帶的例子ip驗證部分注釋掉了,但是可以看得出傳回-1表示錯誤,傳回0表示驗證通過,并且實際證明如果傳回-1的話用戶端是不出圖像的。

               c# code:

C# 視訊監控系列(10):伺服器端——驗證、設定畫面品質、字幕疊加、闆卡序列号

        /// <summary>

        /// 驗證ip

        /// </summary>

        /// <param name="nchannel">通道号</param>

        /// <param name="nip">ip位址</param>

        /// <returns></returns>

        public int checkip(int nchannel, string nip)

        {

            //驗證代碼

            return 0;

        }

C# 視訊監控系列(10):伺服器端——驗證、設定畫面品質、字幕疊加、闆卡序列号

                代碼說明:

                    1.     比較簡單,填寫自己的驗證代碼,正确傳回0,不正确反正-1就可以了。

          1.2     使用者名密碼驗證

mp4_servercheckpassword(checkpassword);

                    checkpassword委托

C# 視訊監控系列(10):伺服器端——驗證、設定畫面品質、字幕疊加、闆卡序列号

int callback checkpassword(char *username,word namelen,char *password,word passlen)

    if ((username[0] == '1') && (username[1] == '2') && (username[2] == '3') && (password[0] == 'w'))

        return 0;

    else

C# 視訊監控系列(10):伺服器端——驗證、設定畫面品質、字幕疊加、闆卡序列号
C# 視訊監控系列(10):伺服器端——驗證、設定畫面品質、字幕疊加、闆卡序列号

        /// 驗證使用者名密碼

        /// <param name="username">使用者名</param>

        /// <param name="namelen">使用者名長度</param>

        /// <param name="password">密碼</param>

        /// <param name="passlen">密碼長度</param>

        public int checkpassword(string username, ushort namelen, string password, ushort passlen)

C# 視訊監控系列(10):伺服器端——驗證、設定畫面品質、字幕疊加、闆卡序列号

               這部分和驗證ip差不多,唯一需要注意的是把委托寫成成員變量!!

     二、設定畫面采集品質 

           從vc++例子中settings中可以看到這個設定:

C# 視訊監控系列(10):伺服器端——驗證、設定畫面品質、字幕疊加、闆卡序列号

          vc++ code:

               方法onsettings()

C# 視訊監控系列(10):伺服器端——驗證、設定畫面品質、字幕疊加、闆卡序列号

switch(dlg.m_iencodetype)

            {

            case 0:

                encodetype = enc_4cif_format;

                break;

            case 1:

                encodetype = enc_2cif_format;

            case 2:

                encodetype = enc_dcif_format;

            case 3:

                encodetype = enc_cif_format;

            case 4:

                encodetype = enc_qcif_format;

            default:

            }

            for(i = 0; i < gettotaldsps(); i++)

                if(encodetype != enc_4cif_format)

                {                    

                    setencoderpictureformat(channelhandle[i],encodetype);

                }

                else if ((i%4==0)||(i%4==1))

C# 視訊監控系列(10):伺服器端——驗證、設定畫面品質、字幕疊加、闆卡序列号

          c# code:

C# 視訊監控系列(10):伺服器端——驗證、設定畫面品質、字幕疊加、闆卡序列号

        /// 設定目前所有攝頭錄制的畫面品質

        /// <param name="channelhandle"></param>

        /// <param name="t">編碼圖像分辨率</param>

        public static void setcurrentencoderpictureformat(intptr[] channelhandle, pictureformat_t t)

            for (int i = 0; i < channelhandle.length; i++)

                hikvisionsdk.setencoderpictureformat(channelhandle[i], t);

C# 視訊監控系列(10):伺服器端——驗證、設定畫面品質、字幕疊加、闆卡序列号

          代碼說明:

               1.     枚舉pictureformat_t說明:

                         pictureformat_t.enc_qcif_format          低品質

                         pictureformat_t.enc_cif_format            中品質

                         pictureformat_t.enc_dcif_format          中高品質

                         pictureformat_t.enc_4cif_format          高品質

               2.     設定後畫面效果能實時改變。

     三、設定字幕疊加

          一般用于顯示公司logo和日期,下圖黃色區域所示

C# 視訊監控系列(10):伺服器端——驗證、設定畫面品質、字幕疊加、闆卡序列号

           vc ++ code:

C# 視訊監控系列(10):伺服器端——驗證、設定畫面品質、字幕疊加、闆卡序列号

ushort format1[40] = {48, 16, 'h','i','k','v', 'i','s','i','o','n', '\0'};

ushort format2[40] = {24, 50, _osd_year4, '-',_osd_month2,'-',_osd_day,'-',  _osd_hour24, ':', _osd_minute,':', _osd_second, '\0'};

//

C# 視訊監控系列(10):伺服器端——驗證、設定畫面品質、字幕疊加、闆卡序列号

其他代碼

for(i = 0; i < gettotaldsps(); i++){

    setosddisplaymode(channelhandle[i], 255, true, 0, format1, format2);

    setosd(channelhandle[i], true);

C# 視訊監控系列(10):伺服器端——驗證、設定畫面品質、字幕疊加、闆卡序列号

          c# code:          

C# 視訊監控系列(10):伺服器端——驗證、設定畫面品質、字幕疊加、闆卡序列号

        private const ushort _osd_base = 0x9000;

        private const ushort _osd_year4 = _osd_base + 0;

        private const ushort _osd_year2 = _osd_base + 1;

        private const ushort _osd_month3 = _osd_base + 2;

        private const ushort _osd_month2 = _osd_base + 3;

        private const ushort _osd_day = _osd_base + 4;

        private const ushort _osd_week3 = _osd_base + 5;

        private const ushort _osd_cweek1 = _osd_base + 6;

        private const ushort _osd_hour24 = _osd_base + 7;

        private const ushort _osd_hour12 = _osd_base + 8;

        private const ushort _osd_minute = _osd_base + 9;

        private const ushort _osd_second = _osd_base + 10;

        /// 設定osd

        /// <param name="setvalue"></param>

        public void setosd(intptr[] channelhandle, bool setvalue)

            if (setvalue)

                ushort[] format1 = new ushort[]{ 48, 16, 'h', 'i', 'k', 'v', 'i', 's', 'i', 'o', 'n', '\0' };

                ushort[] format2 = new ushort[]{ 24, 50, _osd_year4, '-', _osd_month2, '-', _osd_day, '-', _osd_hour24, ':', _osd_minute, ':', _osd_second, '\0' };

                for (int i = 0; i < channelhandle.length; i++)

                {

                    hikvisionsdk.setosddisplaymode(channelhandle[i], 255, true, 0, format1, format2);

                    hikvisionsdk.setosd(channelhandle[i], true);

            else

                    hikvisionsdk.setosd(channelhandle[i], false);

C# 視訊監控系列(10):伺服器端——驗證、設定畫面品質、字幕疊加、闆卡序列号

               代碼說明:

                    1.     注意設定中文字元有問題,暫時沒有解決。

                    2.     關于時間顯示可以翻閱api文檔,說明得很詳細。

     四、擷取闆卡序列号

          vc++ code: 這段代碼并不在net server demo項目裡面,而是在system demo(src\sysdemosource)項目裡。

          boardlist.cpp

C# 視訊監控系列(10):伺服器端——驗證、設定畫面品質、字幕疊加、闆卡序列号

    char str[100];

    char sn[12+1];

    m_list.deleteallitems();

    boardcount=getboardcount();

    for(uint board=0;board<boardcount;board++)

    {

        getboarddetail(board,&boarddetail);

        for(uint i=0;i<12;i++)

            sn[i]=boarddetail.sn[i]+0x30;

        sn[12]=0;

        sprintf(str,"board:%2u type:%s,sn:%s",

            board,boardtype[boarddetail.type],sn);

C# 視訊監控系列(10):伺服器端——驗證、設定畫面品質、字幕疊加、闆卡序列号
C# 視訊監控系列(10):伺服器端——驗證、設定畫面品質、字幕疊加、闆卡序列号

        /// 擷取闆卡序号

        public static string getboardsn()

            uint boardcount = hikvisionsdk.getboardcount();

            stringbuilder sn = new stringbuilder();

            for (uint i = 0; i < boardcount; )

                ds_board_detail boarddetail = new ds_board_detail();

                hikvisionsdk.getboarddetail(i, ref boarddetail);

                for (int j = 0; j < 12; j++)

                    sn.append((char)(boarddetail.sn[j] + 0x30));

            return sn.tostring();

C# 視訊監控系列(10):伺服器端——驗證、設定畫面品質、字幕疊加、闆卡序列号

                    1.     注意結構體用ref;以及boarddetail.sn[j]的類型轉換。

  五、文章後期維護

    5.1  2010-10-9  osd顯示漢字辦法

      漢字"保"的機器内碼是"b1a3h",将如下代碼替換:

      替換前:new ushort[]{ 48, 16, 'h', 'i', 'k', 'v', 'i', 's', 'i', 'o', 'n', '\0' };

      替換後:new ushort[]{ 48, 16, 0xb1a3, 'i', 'k', 'v', 'i', 's', 'i', 'o', 'n', '\0' };

      這樣就能顯示漢字了,這裡再次感謝,也歡迎大家分享和交流!

結束

      伺服器端和用戶端一樣三篇文章,至此結束,接下來是播放器。感謝大家繼續關注該系列文章!!

轉載:http://www.cnblogs.com/over140/archive/2009/03/22/1415041.html

繼續閱讀