视频推流
# 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
说明视频加载成功,可以进行编解码操作。点击[开始]
按钮进行编解码操作,并将解码的视频按钮格式输出推流至指定地址。如果预览
被勾选则会显示视频预览界面。在编解码的过程中可以选择[暂停]
、[恢复]
、[结束]
按钮进行对应操作。