我正在尝试实现类型安全的事件总线.我坚持使用该EventBus::subscribe函数,因为它不接受我的具体事件处理程序.在早期版本中,我只将其AbstractEventHandler实现为抽象类,而不是模板.我对该实现没有任何问题.这就是为什么我认为实际问题是抽象模板.
下面的代码是我的实现的精简版本.第一个块由事件总线的"骨架"及其所需的类组成,而第二个块显示事件,事件处理程序和主要的实际实现.
在enum拥有各种不同的事件可用.抽象事件是所有具体事件的基础.事件处理程序是一个抽象模板,其中事件作为模板类以确保类型安全.事件总线负责将所有已发布的事件分发给其各自的处理程序.
enum EVENT_TYPE
{
ON_EVENT_1,
ON_EVENT_2
};
class AbstractEvent
{
public:
AbstractEvent() {};
virtual ~AbstractEvent() {};
virtual EVENT_TYPE type() = 0;
};
template<class T>
class AbstractEventHandler
{
public:
AbstractEventHandler() {};
virtual ~AbstractEventHandler() {};
virtual void on_event(T *event) = 0;
};
class EventBus
{
public:
EventBus() {};
virtual ~EventBus() {};
void subscribe(EVENT_TYPE type,
AbstractEventHandler<AbstractEvent> *eventHandler) {
// Add handler to vector for further use
}
void publish(AbstractEvent *event) {
// send event to …Run Code Online (Sandbox Code Playgroud) 我有两个webm文件,包含视频会议的音频和视频录制.这两个文件只包含会话的一面.它们的长度不同(有人在另一个之前加入),但我有每个视频文件开始时间毫秒的unix时间戳.
在时间轴上,它们看起来像这样:
webm 1: -----------------------------------------------
webm 2: -----------------------------
Run Code Online (Sandbox Code Playgroud)
或者像这样:
webm 1: -----------------------------------------------
webm 2: -----------------------------
Run Code Online (Sandbox Code Playgroud)
我想将这两个视频文件合并为一个文件,以便:
目标结果:-------------- =========================== ----
新视频的开头和结尾将显示视频文件的黑色占位符,此时此混合流中没有数据.
目前我使用此命令:
ffmpeg -i 1463408731413703.webm -i 1463408880317860.webm -filter_complex \
"[0:v][1:v]hstack=inputs=2[v]; \
[0:a][1:a]amerge[a]" \
-map "[v]" -map "[a]" -ac 2 -c:v libvpx output.webm
Run Code Online (Sandbox Code Playgroud)
这会创建一个这样的视频:
不好结果:===================== ------------------
对话不同步.
如何使用ffmpeg组合两个不同长度和不同开始时间的视频流,这样我最终会得到"目标结果"?
非常感谢!