□ 楊超
廣西廣播電視臺于2018年對播出系統進行文件化送播改造后,改變了傳統的節目送播方式。原來是從媒資系統中通過安全網關將節目傳給播出系統,改造后的播出系統優先上載文件化節目,所有節目直接進入播出系統,然后回傳給媒資系統保存。這兩個相互獨立的系統一般可以通過兩種方式進行節目交換,一是通過安全網關傳輸,二是移動介質交換。后者需要人工介入,因為人力成本較高,所以一般不采用。廣西廣播電視臺利用安全網關進行播出系統和媒資系統之間的節目傳遞。
一般在電視臺的內部系統的操作界面中,可以看到節目名稱。但在后臺,真正的實體文件其實都有內部的系統命名方式,通常為一串數字和字母的組合,這個名稱叫做“節目ID”。廣西廣播電視臺播出系統的上載系統進行文件化上載改造后,系統會在節目上傳到播出二級緩沖和播出服務器后,將節目通過遷移策略拷貝到安全網關的源路徑下,然后媒資系統將節目通過安全網關回傳到媒資系統進行編目保存。這里就出現了一個問題:播出系統回傳給媒資系統的節目是按照播出系統中的節目ID來命名的,那么媒資系統如何識別這個節目ID呢?
本文針對這次播出系統改造后引發的新問題進行探究。
在不做緊密耦合系統接口的前提下,可以通過安全網關來識別節目ID,但是安全網關的廠家難以提供這樣的技術改造服務,最終我們選擇通過安全網關傳輸保存節目ID和正常節目名稱的表單。這個表單是通過播出系統的數據庫保存的,以XLS的形式傳遞給媒資系統。圖1就是安全網關從播出系統中傳輸回來的XLS表單。

圖1
如此一來,我們的工作目標就清晰了。例如,我們并不知道4JD3DA26.mxf的節目名稱,根據上面的表單可查找到對應的名稱是“《超級點子王》3月6日(高清)”,我們把這個節目名字復制下來,在Windows資源管理器中重命名4JD3DA26.mxf這個文件,把剛才復制下來的節目名稱賦予這條節目,然后將這個文件移動到一個叫做20200307(當天日期)的文件夾中。到這里,我們的工作就完成了,后續僅需要媒資系統對這條節目進行入庫操作即可。
上面的操作只解決了一條節目,但每天需要處理大量條目。如果全靠手工,工作量巨大,因此我們專門設計開發了一款能夠完美解決這個問題的Windows程序,將這些以節目ID命名的節目重新命名為具體的節目名。
(一)通過Windows的API函數調用打開XLS表格,取得里面的數據。
(二)定義一個循環,每一次循環,將更改一個文件的名稱,循環的總數量為打開的表單的節目數。
(三)定義兩個數組,MyArray1和MyArray2分別用于存放節目ID和節目名稱。
(四)新建一個以當天日期命名的文件夾,將此文件夾路徑保存為零時變量Path,然后根據MyArray1中的節目ID判斷素材文件的狀態,如果存在,則調用Name函數重新命名這個素材文件:Name name1 As name2。
(一)用vb建立EXE工程,設計軟件節目。這一軟件比較簡單,我們在主窗體上添加一個“打開表格”的按鈕和一個軟件功能使用說明文本框。見圖2。

圖2
(二)主程序代碼
Private Sub Command1_Click() Dim ofn As OPENFILENAME Dim rtn As String
ofn.lStructSize=Len(ofn) ofn.hwndOwner=Me.hWnd ofn.hInstance=App.hInstance
ofn.lpstrFilter="文件類型(*.*)"&Chr(0)&"*.*"&Chr(0)
ofn.lpstrFile=Space(254) ofn.nMaxFile=255 ofn.lpstrFileTitle=Space(254)
ofn.nMaxFileTitle = 255 ofn.lpstrInitialDir = App.Path ofn.lpstrTitle="打開文件"
ofn.flags=6148 rtn=GetOpenFileName(ofn)If rtn>=1 Then
Workbooks.Open(ofn.lpstrFile)
Dim MyArray1() As String Dim MyArray2() As String Dim iNum As Integer
iNum = Workbooks(ofn.lpstrFile).Sheets(Worksheets(1).Name).[A65536].End(xlUp).Row
ReDim Preserve MyArray1(iNum) As String ReDim Preserve MyArray2(iNum)As String
For i=2 To iNum
MyArray1(i-1) = Workbooks(ofn.lpstrFile).Sheets(Worksheets(1).Name).Range("C"&i).Value
MyArray2(i-1) = Workbooks(ofn.lpstrFile).Sheets(Worksheets(1).Name).Range("D"&i).Value
Next i Dim Path As String Dim my_path As String d=Format(Now(),"yyyymmdd")
Path="W:播出回傳目錄傳出" my_path=Path
MkDir Path&d Path=Path&d&"" MsgBox Path-Dim name1 As String Dim name2 As String
Set fso=CreateObject("Scripting.Filesystemobject")
For i=2 To iNum name1=my_path&MyArray1(i-1)& ".mxf" name2 = Path & MyArray2(i-1) & ".mxf" If fso.FileExists(name1)Then Name name1 As name2
Workbooks(ofn.lpstrFile).Sheets(Worksheets(1).Name).Range("E"&i).Value="已改名"
Else Workbooks(ofn.lpstrFile).Sheets(Worksheets(1).Name).Range("E"&i).Value="文件不存在"
End If Next i Else MsgBox"Cancel Was Pressed" End If End Sub
經過調試,最終的軟件界面如圖3。

圖3
運行軟件后,將把此根目錄下以節目ID命名的MXF節目重新命名為表單中的節目名稱,然后新建當天日期文件夾,將改名后的節目移動到該文件夾中。
這次開發完全是自主進行的軟件開發,成本為零,解決了我們工作中遇到的問題,同時鍛煉了我們的技術創新能力,收獲非常大。