視訊錄影
# Smart之視訊錄影
# 1. 說明
範例通過視訊解碼的相關元件實現對視訊的錄製以及轉碼操作,可輸出視訊檔案。
通過範例學習,可以掌握FSEnCoder錄製視訊的方式,並將其用作錄製工具。
# 2. 設計明細
開啟Smart智慧控制平臺,分別加入下插圖之控制元件。或者通過點選功能表欄[檔案]
-[打開專案]
選擇專案打開該範例。
①:TMemo元件,控制元件名稱為memoLog
。
②:TSaveDialog元件,控制元件名稱為SaveDialog1
。
③:TOpenDialog元件,控制元件名稱為OpenDialog1
。
④:TFSEnCoder元件,控制元件名稱為FSEnCoder1
。
⑤:TTimer元件,控制元件名稱為Timer1
。
⑥:TButton元件,控制元件名稱為Button1
。
⑦:TButton元件,控制元件名稱為Button2
。
⑧:TComboBox元件,控制元件名稱為cbDeviceType
。
⑨:TButton元件,控制元件名稱為Button7
。
⑩:TButton元件,控制元件名稱為Button3
。
(11):TButton元件,控制元件名稱為Button4
。
(12):TButton元件,控制元件名稱為Button6
。
(13):TButton元件,控制元件名稱為Button5
。
(14):TEdit元件,控制元件名稱為edtFOutFileName
。
(15):TButton元件,控制元件名稱為Button9
。
(16):TCheckBox元件,控制元件名稱為CheckBox1
。
(17):TButton元件,控制元件名稱為Button8
。
Main窗體屬性設定
ClientHeight
:窗體客戶區高度=427
。ClientWidth
:窗體客戶區寬度=627
。
①memoLog屬性設定
Height
:設定圖片高度=355
。Width
:設定圖片寬度=618
。
②SaveDialog1屬性設定
Filter
:設定檔案過濾選項=全部檔案|*.*
。
⑥Button1屬性設定、
Height
:設定控制元件高度=25
。Width
:設定控制元件寬度=63
。Caption
:設定按鈕顯示的文字內容=打開檔案
。
⑦Button2屬性設定
Height
:設定控制元件高度=25
。Width
:設定控制元件寬度=63
。Caption
:設定按鈕顯示的文字內容=打開URL
。
⑧cbDeviceType屬性設定
Name
:設定控制元件名稱=cbDeviceType
。Height
:設定控制元件高度=21
。Width
:設定控制元件寬度=97
。Items
:設定下拉框的選項,雙擊該屬性或者點選屬性右側的[...]
打開編輯器,輸入選項。
ItemIndex
:設定預設選擇的選項索引值=0
。
⑨Button7屬性設定
Height
:設定控制元件高度=25
。Width
:設定控制元件寬度=63
。Caption
:設定按鈕顯示的文字內容=載入
。
⑩Button3屬性設定
Height
:設定控制元件高度=25
。Width
:設定控制元件寬度=63
。Caption
:設定按鈕顯示的文字內容=開始
。
(11)Button4屬性設定
Height
:設定控制元件高度=25
。Width
:設定控制元件寬度=55
。Caption
:設定按鈕顯示的文字內容=暫停
。
(12)Button6屬性設定
Height
:設定控制元件高度=25
。Width
:設定控制元件寬度=51
。Caption
:設定按鈕顯示的文字內容=恢復
。
(13)Button5屬性設定
Height
:設定控制元件高度=25
。Width
:設定控制元件寬度=59
。Caption
:設定按鈕顯示的文字內容=結束
。
(14)edtFOutFileName屬性設定
Height
:設定控制元件高度=21
。Width
:設定控制元件寬度=331
。
(15)Button9屬性設定
Height
:設定控制元件高度=25
。Width
:設定控制元件寬度=75
。Caption
:設定按鈕顯示的文字內容=播放錄像
。
(16)CheckBox1屬性設定
Caption
:設定選擇框顯示的文字內容=預覽
。
(17)Button8屬性設定
Height
:設定控制元件高度=25
。Width
:設定控制元件寬度=43
。Caption
:設定按鈕顯示的文字內容=選擇
。
# 3. 程式設計
# 3.1. 程式初始設定
該程式無初始設定。
# 3.2. 事件設定
- ⑥Button1-OnClick事件
點選[打開檔案]
按鈕,彈出選擇檔案對話方塊,選擇檔案后,將輸入檔案的地址回傳給編碼器控制元件。
procedure TMyHandler.Button1Click;
begin
if FThis.OpenDialog1.Execute(0) then
begin
FThis.FSEncoder1.InFileName := FTHis.OpenDialog1.FileName;
end;
end;
2
3
4
5
6
7
- ⑦Button2-OnClick事件
點選[打開URL]
按鈕,打開輸入URL的對話方塊,選擇後進行URL視訊流的解碼。
procedure TMyHandler.Button2Click;
var
URL:string;
begin
if FThis.FSEncoder1.InFileName = '' then
URL := 'rtmp://58.200.131.2:1935/livetv/dftv'
else
URL := FThis.FSEncoder1.InFileName;
if not InputQuery('Open', 'URL(or Filename)', URL) then
// cancel open url
Exit;
FThis.FSEncoder1.InFileName := URL;
end;
2
3
4
5
6
7
8
9
10
11
12
13
14
- ⑨Button7-OnClick事件
點選[載入]
按鈕,載入視訊。
procedure TMyHandler.Button7Click;
begin
FThis.FSEncoder1.Load;
end;
2
3
4
- ⑩Button3-OnClick事件
點選[開始]
按鈕,開始進行視訊編碼,如果預覽
選項被勾選,則打開界面顯示視訊。
procedure TMyHandler.Button3Click;
begin
FThis.FSEncoder1.PreviewVideo := FThis.CheckBox1.Checked;
FThis.FSEncoder1.Start(1);
end;
2
3
4
5
- (11)Button4-OnClick事件
點選[暫停]
按鈕,暫停視訊的編碼播放。
procedure TMyHandler.Button4Click;
begin
FThis.FSEncoder1.Pause;
end;
2
3
4
- (12)Button6-OnClick事件
點選[恢復]
按鈕,恢復視訊的編碼播放。
procedure TMyHandler.Button6Click;
begin
FThis.FSEncoder1.Resume;
end;
2
3
4
- (13)Button5-OnClick事件
點選[結束]
按鈕,停止視訊的編碼播放。
procedure TMyHandler.Button5Click;
begin
FThis.FSEncoder1.Stop;
end;
2
3
4
- ⑧cbDeviceType-OnChange事件
點選設備型別
下拉框,選擇對應的設備型別。
procedure TMyHandler.cbDeviceTypeChange;
begin
if FThis.cbDeviceType.Text = 'dtCamera' then
begin
FThis.FSEncoder1.DeviceType := dtCamera;
end
else if FThis.cbDeviceType.Text = 'dtDesktop' then
begin
FThis.FSEncoder1.DeviceType := dtdesktop;
end
else if FThis.cbDeviceType.Text = 'dtFile' then
begin
FThis.FSEncoder1.DeviceType := dtFile;
end
else if FThis.cbDeviceType.Text = 'dtWeb' then
begin
FThis.FSEncoder1.DeviceType := dtWeb;
end;
end;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
- ⑤Timer1-OnTimer事件
計時器觸發事件,每隔一秒更新日誌內容至日誌編輯框中。
procedure TMyHandler.Timer1Timer;
begin
FThis.memoLog.Lines.Assign(FThis.FSEncoder1.Log);
end;
2
3
4
- (17)Button8-OnClick事件
點選[選擇]
按鈕,打開檔案儲存選項的對話方塊,在其中選擇目錄后確認返回,將輸出的檔案目錄傳遞至檔案輸出
文字框中。
procedure TMyHandler.Button8Click;
begin
if FThis.SaveDialog1.Execute(0) then
begin
FThis.edtFOutFileName.Text := FThis.SaveDialog1.FileName;
FThis.FSEncoder1.OutFileName := FThis.edtFOutFileName.Text;
end;
end;
2
3
4
5
6
7
8
- (15)Button9-OnClick事件
點選[播放錄像]
按鈕,打開檔案輸出
目錄中的檔案以進行視訊播放。
procedure TMyHandler.Button9Click;
var
T:TForm;
F:TFSPlayer;
P:TPanel;
begin
T := TForm.Create(nil);
try
T.Position := poScreenCenter;
T.BorderStyle := bsDialog;
T.Caption := FThis.FSEncoder1.OutFileName;
F:=TFSPlayer.Create(T);
P:=TPanel.Create(T);
P.Parent := T;
P.Align := alClient;
F.VideoPanel := P.Name;
F.Open(FThis.FSEncoder1.OutFileName,false);
T.ShowModal;
finally
T.Free;
end;
end;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 4. 運行結果
通過工具欄儲存,將程式儲存為 sdb 專案檔案。
使用滑鼠點選工具欄運行(Run),測試運行結果。
程式運行后,在設備型別
處選擇輸入視訊源的型別,如果是本地視訊則選擇dtFile
,並點選[打開檔案]
按鈕以選擇視訊檔案;如果是網路視訊則選擇dtWeb
,並點選[打開URL]
,在對話方塊中輸入地址。
dtCamera
表示視訊源來自於相機,dtDesktop
表示視訊源來自於桌面。選擇完成後,點選[載入]
按鈕,在日誌欄中如果出現Can do convert
說明視訊載入成功,可以進行編解碼操作。點選[開始]
按鈕進行編解碼操作,並將解碼的視訊按鈕格式重新進行編碼輸出至指定的目錄。如果預覽
被勾選則會顯示視訊預覽界面。在編解碼的過程中可以選擇[暫停]
、[恢復]
、[結束]
按鈕進行對應操作。在視訊編解碼操作結束后,可點選[播放錄像]
打開對話方塊檢視錄製的視訊。