最近,我看到一个非常好的主意,放一个视频剪辑。这是关于“像滚石一样”,我们可以在这里看到:http: //video.bobdylan.com/desktop.html
如您所见,您可以与之交互,使用向上/向下键更改频道。
我下载了所有 16 个单独的子剪辑。
现在,挑战是制作一个程序,让单个玩家做同样的事情,并且做更多的事情。
我试图在另一个论坛上获得一些帮助,但现在我被困在了编程阶段。
请看这里:
已编辑:[链接已删除] 这是 Videohelp 论坛,与此问题标题相同的主题]
我写了一个小程序来加载视频并以马赛克的形式显示它们。这是迈向“换频道”功能的第一步。我在 Delphi 7 中使用 DSPack 组件,它使用 DirectShow 和 Direct9 库。
在这里,我到目前为止得到了什么:
如图所示,加载了 12 个视频。
我计划关闭所有其他视频的可见属性,当按时间观看一个视频时,在实现功能“更改频道”时,以缓解系统。但是在马赛克布局中,这是不可能的。
解决此步骤时,我将使用热键实现“更改频道”功能。
问题是我对 VideoWindow 和 FilterGraph 的 Visible 和 Active 属性感到困惑,因此我没有相应地使用它们。
到目前为止,这是代码:
procedure TFormPlayWin.FormActivate(Sender: TObject);
begin
BigScreen := true;
SmallScreen := false;
VideoWindow01.Width := 1425;
VideoWindow01.Height := 761;
VideoWindow01.Visible := true;
VideoWindow02.Visible := false;
VideoWindow03.Visible := false;
VideoWindow04.Visible := false;
VideoWindow05.Visible := false;
VideoWindow06.Visible := false;
VideoWindow07.Visible := false;
VideoWindow08.Visible := false;
VideoWindow09.Visible := false;
VideoWindow10.Visible := false;
VideoWindow11.Visible := false;
VideoWindow12.Visible := false;
if not FilterGraph01.Active then FilterGraph01.Active := true;
if not FilterGraph02.Active then FilterGraph02.Active := true;
if not FilterGraph03.Active then FilterGraph03.Active := true;
if not FilterGraph04.Active then FilterGraph04.Active := true;
{
if not FilterGraph05.Active then FilterGraph05.Active := true;
if not FilterGraph06.Active then FilterGraph06.Active := true;
if not FilterGraph07.Active then FilterGraph07.Active := true;
if not FilterGraph08.Active then FilterGraph08.Active := true;
if not FilterGraph09.Active then FilterGraph09.Active := true;
if not FilterGraph10.Active then FilterGraph10.Active := true;
if not FilterGraph11.Active then FilterGraph11.Active := true;
if not FilterGraph12.Active then FilterGraph12.Active := true;
}
FilterGraph01.ClearGraph;
FilterGraph02.ClearGraph;
FilterGraph03.ClearGraph;
FilterGraph04.ClearGraph;
{
FilterGraph05.ClearGraph;
FilterGraph06.ClearGraph;
FilterGraph07.ClearGraph;
FilterGraph08.ClearGraph;
FilterGraph09.ClearGraph;
FilterGraph10.ClearGraph;
FilterGraph11.ClearGraph;
FilterGraph12.ClearGraph;
}
FilterGraph01.RenderFile('D:\Meus documentos\Downloads\Bob Dylan\Joined01.flv');
FilterGraph02.RenderFile('D:\Meus documentos\Downloads\Bob Dylan\Joined02.flv');
FilterGraph03.RenderFile('D:\Meus documentos\Downloads\Bob Dylan\Joined03.flv');
FilterGraph04.RenderFile('D:\Meus documentos\Downloads\Bob Dylan\Joined04.flv');
{
FilterGraph05.RenderFile('D:\Meus documentos\Downloads\Bob Dylan\Joined05.flv');
FilterGraph06.RenderFile('D:\Meus documentos\Downloads\Bob Dylan\Joined06.flv');
FilterGraph07.RenderFile('D:\Meus documentos\Downloads\Bob Dylan\Joined07.flv');
FilterGraph08.RenderFile('D:\Meus documentos\Downloads\Bob Dylan\Joined08.flv');
FilterGraph09.RenderFile('D:\Meus documentos\Downloads\Bob Dylan\Joined09.flv');
FilterGraph10.RenderFile('D:\Meus documentos\Downloads\Bob Dylan\Joined10.flv');
FilterGraph11.RenderFile('D:\Meus documentos\Downloads\Bob Dylan\Joined11.flv');
FilterGraph12.RenderFile('D:\Meus documentos\Downloads\Bob Dylan\Joined12.flv');
}
VideoWindow01.PopupMenu := PopupMenu;
SoundLevel.Position := FilterGraph01.Volume;
FilterGraph01.Play;
FilterGraph02.Play;
FilterGraph03.Play;
FilterGraph04.Play;
{
FilterGraph05.Play;
FilterGraph06.Play;
FilterGraph07.Play;
FilterGraph08.Play;
FilterGraph09.Play;
FilterGraph10.Play;
FilterGraph11.Play;
FilterGraph12.Play;
FilterGraph02.Active := false;
FilterGraph03.Active := false;
FilterGraph04.Active := false;
FilterGraph05.Active := false;
FilterGraph06.Active := false;
FilterGraph07.Active := false;
FilterGraph08.Active := false;
FilterGraph09.Active := false;
FilterGraph10.Active := false;
FilterGraph11.Active := false;
FilterGraph12.Active := false;
VideoWindow02.Visible := false;
VideoWindow03.Visible := false;
VideoWindow04.Visible := false;
VideoWindow05.Visible := false;
VideoWindow06.Visible := false;
VideoWindow07.Visible := false;
VideoWindow08.Visible := false;
VideoWindow09.Visible := false;
VideoWindow10.Visible := false;
VideoWindow11.Visible := false;
VideoWindow12.Visible := false;
}
end;
上面,我正在尝试制作第一个覆盖整个区域的剪辑,并让其他视频不可见。但是事情变得很糟糕,因为我可以在大的 VideoWindow1 上看到 VideoWindow 2,3 和 4。
这个想法是使用热键来切换大小屏幕,并“改变频道”。
为了保持处理和同步,我只想运行一个音轨。如何将其与 DirectShow 过滤器分离?我需要它只播放一个音频。如果我只需要其中一个,则运行所有音轨是个坏主意。我必须让其他人静音。
说了这么多,我有两个问题:
1 - 如何使上面的代码更好地同时处理太多的视频。
2 - 如何使所有其他视频中的音轨静音,但第一个保持活跃。