视频推流
# Smart之视频推流
# 1. 说明
范例通过视频解码的相关组件实现视频直播推流的操作。
通过范例学习,可以掌握FSEnCoder进行直播推流的方式,并将其用作视频直播推流工具。
# 2. 设计明细
开启Smart智慧控制平台,分别加入下插图之控件。或者通过点击菜单栏[文件]-[打开项目]选择项目打开该范例。

①:TButton组件,控件名称为btnLoad。
②:TButton组件,控件名称为btnStart。
③:TButton组件,控件名称为btnPause。
④:TButton组件,控件名称为btnResume。
⑤:TButton组件,控件名称为btnStop。
⑥:TCheckBox组件,控件名称为ckbPreview。
⑦:TEdit组件,控件名称为edtInputOptions。
⑧:TEdit组件,控件名称为edtInFileName。
⑨:TComboBox组件,控件名称为cbDeviceType。
⑩:TButton组件,控件名称为btnInputFile。
(11):TButton组件,控件名称为FileInfo。
(12):TEdit组件,控件名称为edtOutputOptions。
(13):TEdit组件,控件名称为edtOutFileName。
(14):TSaveDialog组件,控件名称为SaveDialog1。
(15):TOpenDialog组件,控件名称为OpenDialog1。
(16):TFSEnCoder组件,控件名称为FSEnCoder1。
(17):TTimer组件,控件名称为Timer1。
(18):TMemo组件,控件名称为memoLog。
(19):TButton组件,控件名称为btnOutputFile。
Main窗体属性设置
ClientHeight:窗体客户区高度=427。ClientWidth:窗体客户区宽度=627。
①btnLoad属性设置
Height:设置控件高度=25。Width:设置控件宽度=73。Name:设置控件名称=btnLoad。Caption:设置按钮显示的文字内容=加载。
②btnStart属性设置
Height:设置控件高度=25。Width:设置控件宽度=63。Name:设置控件名称=btnStart。Caption:设置按钮显示的文字内容=开始。
③btnPause属性设置
Height:设置控件高度=25。Width:设置控件宽度=53。Name:设置控件名称=btnPause。Caption:设置按钮显示的文字内容=暂停。
④btnResume属性设置
Height:设置控件高度=25。Width:设置控件宽度=51。Name:设置控件名称=btnResume。Caption:设置按钮显示的文字内容=恢复。
⑤btnStop属性设置
Height:设置控件高度=25。Width:设置控件宽度=59。Name:设置控件名称=btnStop。Caption:设置按钮显示的文字内容=结束。
⑥ckbPreview属性设置
Caption:设置选择框显示的文字内容=预览。Name:设置控件名称=ckbPreview。Checked:设置是否显示勾选,设置为True。
⑦edtInputOptions属性设置
Height:设置控件高度=21。Width:设置控件宽度=316。Name:设置控件名称=edtInputOptions。
⑧edtInFileName属性设置
Height:设置控件高度=21。Width:设置控件宽度=393。Name:设置控件名称=edtInFileName。
⑨cbDeviceType属性设置
Name:设置控件名称=cbDeviceType。Height:设置控件高度=21。Width:设置控件宽度=151。Items:设置下拉框的选项,双击该属性或者点击属性右侧的[...]打开编辑器,输入选项。
⑩btnInputFile属性设置
Height:设置控件高度=25。Width:设置控件宽度=75。Name:设置控件名称=btnInputFile。Caption:设置按钮显示的文字内容=Browse...。
(11)FileInfo属性设置
Height:设置控件高度=25。Width:设置控件宽度=75。Name:设置控件名称=FileInfo。Caption:设置按钮显示的文字内容=FileInfo。
(12)edtOutputOptions属性设置
Height:设置控件高度=21。Width:设置控件宽度=547。Name:设置控件名称=edtOutputOptions。
(13)edtOutFileName属性设置
Height:设置控件高度=21。Width:设置控件宽度=467。Name:设置控件名称=edtOutFileName。
(14)SaveDialog1属性设置
Filter:设置文件过滤选项=全部文件|*.*。
(16)FSEnCoder1属性设置
PushFlow:是否开启推流模式,设置为True。
(18)memoLog属性设置
Height:设置图片高度=251。Width:设置图片宽度=618。
(19)btnOutputFile属性设置
Height:设置图片高度=25。Width:设置图片宽度=75。Name:设置控件名称=btnOutputFile。Caption:设置按钮显示的文字内容=Browse...。
# 3. 程序设计
# 3.1. 程序初始设置
设置解码器的初始模式。
constructor TMyHandler.Create(AOwner: TComponent);
begin
FThis :=TBaseForm(AOwner);
FThis.FSEncoder1.DeviceType := dtCamera;
FThis.edtInputOptions.Text := FThis.FSEncoder1.InputOptions.Text;
FThis.edtOutputOptions.Text := FThis.FSEncoder1.OutPutOptions.Text;
end;
2
3
4
5
6
7
# 3.2. 事件设置
- ①btnLoad-OnClick事件
点击[加载]按钮,设置输入输出选项,并加载视频。
procedure TMyHandler.btnLoadClick;
begin
FThis.FSEncoder1.PreviewVideo := FThis.ckbPreview.Checked;
FThis.FSEncoder1.InFileName := FThis.edtInFileName.Text;
FThis.FSEncoder1.OutFileName := FThis.edtOutFileName.Text;
FThis.FSEncoder1.InPutOptions.Text := FThis.edtInPutOptions.Text;
FThis.FSEncoder1.OutPutOptions.Text := FThis.edtOutPutOptions.Text;
FThis.FSEncoder1.Load;
end;
2
3
4
5
6
7
8
9
- ②btnStart-OnClick事件
点击[开始]按钮,开始进行视频播放并进行推流操作。
procedure TMyHandler.btnStartClick;
begin
FThis.FSEncoder1.Start(1);
end;
2
3
4
- ③btnPause-OnClick事件
点击[暂停]按钮,暂停视频的推流操作。
procedure TMyHandler.btnPauseClick;
begin
FThis.FSEncoder1.Pause;
end;
2
3
4
- ④btnResume-OnClick事件
点击[恢复]按钮,恢复视频的推流操作。
procedure TMyHandler.btnResumeClick;
begin
FThis.FSEncoder1.Resume;
end;
2
3
4
- ⑤btnStop-OnClick事件
点击[停止]按钮,停止视频的推流。
procedure TMyHandler.btnStopClick;
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;
FThis.edtInputOptions.Text := FThis.FSEncoder1.InputOptions.Text;
FThis.edtOutputOptions.Text := FThis.FSEncoder1.OutPutOptions.Text;
end
else if FThis.cbDeviceType.Text = 'dtDesktop' then
begin
FThis.FSEncoder1.DeviceType := dtdesktop;
FThis.edtInputOptions.Text := FThis.FSEncoder1.InputOptions.Text;
FThis.edtOutputOptions.Text := FThis.FSEncoder1.OutPutOptions.Text;
end
else if FThis.cbDeviceType.Text = 'dtFile' then
begin
FThis.FSEncoder1.DeviceType := dtFile;
FThis.edtInputOptions.Text := FThis.FSEncoder1.InputOptions.Text;
FThis.edtOutputOptions.Text := FThis.FSEncoder1.OutPutOptions.Text;
end
else if FThis.cbDeviceType.Text = 'dtWeb' then
begin
FThis.FSEncoder1.DeviceType := dtWeb;
FThis.edtInputOptions.Text := FThis.FSEncoder1.InputOptions.Text;
FThis.edtOutputOptions.Text := FThis.FSEncoder1.OutPutOptions.Text;
end;
end;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
- ⑩btnInputFile-OnClick事件
点击[Browse...]按钮,打开浏览界面,选择输入的文件目录。
procedure TMyHandler.btnInputFileClick;
begin
if FThis.OpenDialog1.Execute(0) then
begin
FThis.edtInFileName.Text := FThis.OpenDialog1.FileName;
FThis.FSEncoder1.InFileName := FThis.edtInFileName.Text;
end;
end;
2
3
4
5
6
7
8
- (17)Timer1-OnTimer事件
计时器触发事件,定时更新日志信息。
procedure TMyHandler.Timer1Timer;
begin
FThis.memoLog.Lines.Assign(FThis.FSEncoder1.Log);
end;
2
3
4
- (19)btnOutputFile-OnClick事件
点击[Browse..]按钮,打开浏览界面,选择输出的文件目录。
procedure TMyHandler.btnOutputFileClick;
begin
if FThis.SaveDialog1.Execute(0) then
begin
FThis.edtOutFileName.Text := FThis.SaveDialog1.FileName;
FThis.FSEncoder1.OutFileName := FThis.edtOutFileName.Text;
end;
end;
2
3
4
5
6
7
8
# 4. 运行结果
通过工具栏保存,将程序保存为 sdb 项目文件。
使用鼠标点击工具栏运行(Run),测试运行结果。

程序运行后,在Device Types处选择输入视频源的类型,如果是本地视频则选择dtFile,并点击Input file/URL处的[Browse...]按钮以选择视频文件;如果是网络视频则选择dtWeb,并在Input file/URL文本框中输入地址。
dtCamera表示视频源来自于相机,dtDesktop表示视频源来自于桌面。选择完成后,点击[加载]按钮,在日志栏中如果出现Can do convert说明视频加载成功,可以进行编解码操作。点击[开始]按钮进行编解码操作,并将解码的视频按钮格式输出推流至指定地址。如果预览被勾选则会显示视频预览界面。在编解码的过程中可以选择[暂停]、[恢复]、[结束]按钮进行对应操作。