Image、Audio 及 Video Extenders 管理與程式設計

編目快照

您可以將快照相關資訊儲存在快照型錄中。Video Extender 提供 API 來:

為 storyboard 將提供輸入的快照編入型錄:將快照資訊存入快照型錄 (此型錄位於資料庫或檔案中) 後, 您可以使用快照相關應用程式中的資訊。 例如,您可以建立應用程式來取得視訊中所有快照的代表框, 並在 storyboard 中顯示它們。

您僅需對資料庫建立快照型錄:只有在您要型錄常駐於資料庫時,才需要建立快照型錄。 當您儲存視訊中快照的資料並指示要檔案中的輸出時,Video Extender 會自動建立一個快照型錄檔。

在建立型錄之前 (僅適用於資料庫)

在資料庫中建立及使用型錄之前,您必須:

建立快照型錄 (僅適用於資料庫)

使用 DBvCreateShotCatalog API,在資料庫中建立快照型錄。 (當您儲存快照資料並指示要檔案中的輸出時,Video Extender 會自動建立一個快照型錄檔。). 此型錄是由儲存快照相關資訊的表格所組成。 您可以使用 SQL 來查詢表格的概略表。 下表顯示概略表中一些直欄。

表 12. 快照型錄概略表中一些直欄
直欄名稱 資料類型 說明
SHOTHANDLE CHAR(36) 快照 handle
VIDEOHANDLE VARCHAR(254) 視訊 handle。僅在視訊使用 DBvOpenHandle API 開啟時,此直欄中才含有值。
VIDEOTABLE VARCHAR(254) 包含視訊的表格。僅在視訊使用 DBvOpenHandle API 開啟時,此直欄中才含有值。
VIDEOCOLUMN VARCHAR(254) 包含視訊的表格直欄。僅在視訊使用 DBvOpenHandle API 開啟時,此直欄中才含有值。
VIDEOFILE VARCHAR(254) 視訊檔名。僅在視訊使用 DBvOpenFile API 開啟時,此直欄才含有值。
STARTFRAME INTEGER 起始框號
ENDFRAME INTEGER 結束框號
REPFRAME INTEGER 代表框號碼
REPFRAMEDATA DB2IMAGE 代表框資料
COMMENTS LONG VARCHAR 註解

您可以彈性地決定要在資料庫中建立多少個快照型錄, 以及哪些快照要儲存資訊在每一個快照型錄中。 您可以建立一個型錄來儲存許多視訊的快照資訊、 將每一個視訊的快照資訊儲存在分開的型錄內、或將視訊內多個快照的資訊儲存在多個型錄內。

在使用該 API 時,您必須指定型錄的名稱。大於 16 個字元的名稱會被截斷。 您也需要指定 SQLConnect 對資料庫呼叫後所傳回的資料庫連接 handle。例如,下列陳述式建立一個快照型錄,名為 hotshots:

SQLHDBC  hdbc;
 
rc = SQLConnect(hdbc,"hotshots",SQL_NTS,id,SQL_NTS,password,SQL_NTS);
 
rc=DBvCreateShotCatalog(
                "hotshots",           /* shot catalog name */
                hdbc);                /* database connection handle */

快照型錄概略表稱為 MMDBSYS.SVcatname,其中 catname 是指快照型錄的名稱。 例如,型錄 hotshots 的概略表名稱是 MMDBSYS.SVHOTSHOTS。

儲存有關單一快照的資訊 (僅適用於資料庫)

使用 DBvInsertShot API,在快照型錄中儲存有關單一快照的資訊。 只有在快照型錄位於資料庫中時,您才可以儲存視訊中單一快照的資訊。 型錄中儲存的資訊包括:

但是,並不儲存快照的註解。有關如何新增註解到快照儲存的資訊中,請參閱指定的快照的註解 (僅適用於資料庫)

使用 DBvInsertShot API 時,您必須指定快照型錄名稱和快照指標。 設定快照指標的一種方法,是取得下一個快照, 請參閱取得快照。 您 也需要指定 SQLConnect 對資料庫呼叫後所傳回的資料庫連接 handle。 例如,下列陳述式取 得框號 1 之後的下一個快照,然後將快照的資訊儲存在名為 hotshots 的快照型錄中:

SQLHDBC  hdbc;
SQLHENV  henv;
DBvIOType      *video;
long start_frame = 1;
char shotDetected = 0;
DBvShotControl    shotCtrl;
DBvShotType    shot;
 
shotCtrl>method=DETECT_CORRHIST
shotCtrl>normalCorrValue=60;
shotCtrl>sceneCutSkipXY=1;
shotCtrl>CorrHistThresh=10;
shotCtrl>DissThresh=10;
shotCtrl>DissCacheSize=4;
shotCtrl>DissNumCaches=7;
shotCtrl>minShotSize=0;
 
SQLAllocConnect(henv,&hdbc)
 
rc = SQLConnect(hdbc,"hotshots",SQL_NTS,id,SQL_NTS,password,SQL_NTS);
 
rc=DBvDetectShot(
                video,
       start_frame,
       &shotDetected,
       &shotCtrl,
       &shot)
        
rc=DBvInsertShot (
       "hotshots",              /*shot catalog name*/
       shot,                      /*pointer to shot*/
        hdbc);                  /*database connection handle*/

儲存視訊中所有快照的有關資訊

使用 DBvBuildStoryboardTable API 或 DBvBuildStoryboardFile API, 來將視訊中所有快照的資訊儲存在快照型錄中。DBvBuildStoryboardTable API 將資訊儲存在資料庫的快照型錄中。DBvBuildStoryboardFile API 會建立快照型錄檔, 並在該檔中儲存快照資訊。

對任一個 API 而言,來源視訊可以位於資料庫表格或檔案中。

使用任一個 API 時,您必須:

對 DBvBuildStoryboardTable API 而言,您還需要指定 SQLConnect 對資料庫呼叫後所傳 回的資料庫連接 handle。

例如,下列陳述式將視訊中所有快照的資訊儲存在快照型錄中:該快照型錄位於資料庫中。

SQLHDBC  hdbc;
SQLHENV  henv;
DBvIOType      *video;
DBvShotControl    shotCtrl;
DBvStoryBoardCtrl    sbCtrl;
 
sbCtrl>thresh1=50
sbCtrl>thresh2=500;
sbCtrl>delta=20;
 
SQLAllocConnect(henv,&hdbc)
 
rc = SQLConnect(hdbc,"hotshots",SQL_NTS,id,SQL_NTS,password,SQL_NTS);
 
rc=DBvBuildStoryboardTable (
       "hotshots",              /*shot catalog name*/
       video,                     /*pointer to video structure*/ 
       shotCtrl,                  /*pointer to shot control structure*/
       sbctrl,                    /*pointer to storyboard control structure*/
        hdbc);                  /*database connection handle*/

下列陳述式建立一個快照型錄檔,並將視訊中所有快照的資訊儲存在該檔案:

DBvIOType      *video;
DBvShotControl    shotCtrl;
DBvStoryBoardCtrl    sbCtrl;
 
sbCtrl>thresh1=50
sbCtrl>thresh2=500;
sbCtrl>delta=20;
 
rc=DBvBuildStoryboardFile (
       "hotshots",                /*shot catalog file name*/
       video,                     /*pointer to video structure*/ 
       shotCtrl,                  /*pointer to shot control structure*/
       sbctrl);                   /*pointer to storyboard control structure*/

建置 storyboard

顧名思義,DBvBuildStoryboardTable API 和 DBvBuildStoryboardFile API, 特別適合來儲存 storyboard 中所用的資訊。storyboard 是視訊的視覺摘要。您可以藉由顯示快照型錄中某視訊所儲存 的代表框,來建立一個 storyboard。

DBvBuildStoryboardTable API 和 DBvBuildStoryboardFile API, 儲存快照的一個或多個代表框。在 DBvStoryboardCtrl 結構中指定的值,控制某快照所儲存的 代表框數,以及要使用哪些框。有關 DBvStoryboardCtrl 結構的定義,請參閱快照偵測資料結構。下列圖表說明如何使用 DBvStoryboardCtrl 欄位中的值。

圖 23. 如何使用 DBvStoryboardCtrl 結構中的值


REQTEXT


如圖表所示:

若 thresh1 或 thresh2 值設為 -1,則任何快照皆可當做小型快照來處理。 此時,只有一個代表框,亦即中間框,會被儲存在快照型錄內。

除了 DBvStoryboardCtrl 資料結構中的值以外,DBvShotControl 資料結構中的許多欄位, 會影響後來用以顯示於 storyboard 中的代表框。 例如,DBvShotControl 資料結構中的 CorrHistThresh、normalcorrValue 及 minShotSize 欄位, 指定快照偵測的臨界值,因此會影響哪些框要顯示於視訊的 storyboard 內。 使用 DBvBuildStoryBoardTable API 和 DBvBuildStoryBoardFile API 來儲存 storyboard 中所用的快照資訊時, 您可以先試著使用 DBvStoryBoardCtrl 和 DBvShotControl 資料結構的起始設定值。 然後,您可以在這些資料結構中變更各種欄位值,以調整您的結果。

顯示 storyboard

您可以建立程式來顯示 storyboard。作法是存取視訊中快照型錄內所儲存的代表框。若使用 DBvBuildStoryboardFile API 來儲存視訊的快照,則快照型錄檔會指向代表框的 GIF 檔案。 您可以使用瀏覽程式或顯示程式,來顯示這些 GIF 檔案。

若使用 DBvBuildStorybBoardTable API 來儲存視訊的快照, 則快照型錄 (儲存於資料庫中) 會包含代表框的資料。您可以在快照型錄概略表中, 存取代表框資料 (有關概略表的說明,請參閱表 12)。代表框資料是 YUV 格式; 這種格式不是大多數顯示程式所能顯示的。 若要顯示代表框,您可使用DBvFrameDatato24BitRGB API 來轉換框資料,其有關資訊請參閱顯示擷取框。 然後,即可使用瀏覽程式或顯示程式來顯示代表框。

Storyboard 範例程式

SAMPLES 次目錄包含兩個範例程式,用以展示建置和顯示視訊的 storyboard。 其中一個範例程式 makesf.exe 檔,使用 DBvBuildStoryBoardFile API 來建立快照型錄檔, 並將快照資料儲存於檔案中。另一個範例程式 makehtml.exe, 存取快照型錄檔,並建立 Web 瀏覽程式所顯示的 HTML 網頁。

指定的快照的註解 (僅適用於資料庫)

對於快照型錄中的快照,您可以指定註解來與其它資訊儲存在一起。 使用 DBvSetShotComment API 來指定註解。

使用該 API 時,您必須指定要儲存註解的快照型錄名稱、要新增註解的快照 handle、 以及該註解。 您 也需要指定 SQLConnect 對資料庫呼叫後所傳回的資料庫連接 handle。 例如,下列陳述式在 名為 hotshots 的快照型錄中新增一個快照 (從框號 85 開始) 的註解:

SQLHDBC  hdbc;
SQLHENV  henv;
char shothandle[37];
 
SQLAllocConnect(henv,&hdbc)
 
rc = SQLConnect(hdbc,"hotshots",SQL_NTS,id,SQL_NTS,password,SQL_NTS);
 
EXEC SQL SELECT SHOTHANDLE INTO :shothandle
  FROM MMDBSYS.SVHOTSHOTS
  WHERE STARTFRAME=85;
 
rc=DBvSetShotComment (
        "hotshots",             /*shot catalog name*/
        shothandle,                    /*shot handle*/
        "shot of beach at sunset",       /*comment*/
        hdbc);                  /*database connection handle*/

變更快照所儲存的資訊 (僅適用於資料庫)

您可以變更快照型錄中某個快照所儲存的資訊。 作法是使用 DBvUpdateShot API。將取代資訊放入 DBvShotType 結構中。 您也需要指定其餘欄位的資訊,即使維持不變。 當您使用 DBvUpdateShot API 時,請指定型錄名稱和一個指向 DBvShotType 結構的指標。您 也需要指定 SQLConnect 對資料庫呼叫後所傳回的資料庫連接 handle。

變更快照的資訊時,您可以變更資訊中儲存的任何註解。 若您想變更註解,請在 DBvShotType 結構中指定。若您想保留以前的註解, 請在 DBvShotType 結構中指定 NULL 值。

例如,下列陳述式在一個名為 hotshots 的型錄內,變更快照所儲存的資訊;該快照從框號 85 開始:

SQLHDBC  hdbc;
SQLHENV  henv;
char shothandle[37];
DBvShotType    shot;
DBvFrameData  fd110;
 
/* get shot handle */
 
EXEC SQL SELECT SHOTHANDLE INTO :shothandle
  FROM MMDBSYS.SVHOTSHOTS
  WHERE STARTFRAME=85;
 
/* change shot attribute */
 
shot.startFrame=110;
shot.endFrame=200;
shot.repframe=110;
shot.fd=fd110;
shot.comment=NULL;
 
/* update shot information */
 
SQLAllocConnect(henv,&hdbc)
 
rc = SQLConnect(hdbc,"hotshots",SQL_NTS,id,SQL_NTS,password,SQL_NTS);
 
rc=DBvUpdateShot (
        "hotshots",             /*shot catalog name*/
        shot,                           /*shot information*/
        hdbc);                  /*database connection handle*/

在快照型錄中合併快照資訊 (僅適用於資料庫)

您可以在一個快照型錄中,合併兩個快照所儲存的資訊。 合併快照資訊時,您需指定合併次序,來識別第一個快照和第二個快照。第一個快照的起始框號,儲存為被合併快照的起始框號。 第一個和第二個快照之間的最大框號,儲存為被合併快照的結束框號。 合併動作會以被合併快照的資訊來取代第一個快照的資訊; 第二個快照所儲存的資訊會從快照型錄中刪除。

使用 DBvMergeShots API 來合併快照型錄中兩個快照的資訊。 使用該 API 時,請指定快照型錄名稱,之後接著要合併之第一個和第二個快照的 handle。 您 也需要指定 SQLConnect 對資料庫呼叫後所傳回的資料庫連接 handle。 例如,下列陳述式在一個稱為 hotshots 的型錄內,合併兩個快照所儲存的資訊; 第一個快照從框號 85 開始,第二個快照從框號 210 開始:

SQLHDBC  hdbc;
SQLHENV  henv;
char shothandle1[37];
char shothandle2[37];
 
EXEC SQL SELECT SHOTHANDLE INTO :shothandle1
  FROM MMDBSYS.SVHOTSHOTS1
  WHERE STARTFRAME=85;
 
EXEC SQL SELECT SHOTHANDLE INTO :shothandle2
  FROM MMDBSYS.SVHOTSHOTS2
  WHERE STARTFRAME=210;
 
SQLAllocConnect(henv,&hdbc)
 
rc = SQLConnect(hdbc,"hotshots",SQL_NTS,id,SQL_NTS,password,SQL_NTS);
 
rc=DBvMergeShots (
        "hotshots",             /*shot catalog name*/
        shothandle1,                   /*shot handle for first shot*/
        shothandle2,                   /*shot handle for second shot*/
        hdbc);                  /*database connection handle*/

刪除快照型錄中的快照資訊 (僅適用於資料庫)

使用 DBvDeleteShot API 來刪除快照型錄中有關某快照的資訊。 使用該 API 時,請指定快照型錄名稱,再接著快照 handle。 您 也需要指定 SQLConnect 對資料庫呼叫後所傳回的資料庫連接 handle。 例如,下列陳述式在 名為 hotshots 的快照型錄中,刪除一個快照 (從框號 85 開始) 的相關資訊:

SQLHDBC  hdbc;
SQLHENV  henv;
char shothandle[37];
 
EXEC SQL SELECT shothandle INTO :shothandle
  FROM mmdbsys.svhotshots
  WHERE startframe=85;
 
rc=DBvDeleteShot (
        "hotshots",             /*shot catalog name*/
        shothandle,                    /*shot handle*/
        hdbc);                  /*database connection handle*/

刪除快照型錄 (僅適用於資料庫)

使用 DBvDeleteShotCatalog API 來刪除快照型錄。使用該 API 時,請指定要刪除的快照型錄 名稱,以及 SQLConnect 對資料庫呼叫後所傳回的資料庫連接 handle。 例如,下列陳述式刪除一個快照型錄,稱為 hotshots:

SQLHDBC  hdbc;
SQLHENV  henv;
 
rc=DBvDeleteShotCatalog (
        "hotshots",             /*shot catalog name*/
        hdbc);                  /*database connection handle*/


[ 頁面頂端 | 前一頁 | 下一頁 | 目錄 | 索引 ]