2011-01-26 269 views

回答

1

据我所知,你需要开发自己的“分割”。这与您创建HTTP Live流式文件所需的类似。可能有一个更简单的解决方案,但这里是我会做的:

你可以使用multifilesink下一个文件=缓冲区(或下一个文件标记,如果段不能适合一个相对较小的程序(在Python中)在记忆中)。

你需要编码或解复用器的输入流,和MUX流回来。当达到所需持续时间时,剪切关键帧上的多路复用流并推送聚合缓冲区(或标记虚假关键帧,例如,强制接收器以创建新文件)。重新初始化muxer(或附加muxer streamheader)以获取具有正确标题的文件,而不是单独播放(取决于muxer)。

+0

我甩的GStreamer和使用FFmpeg的库,而不是写了分割。不得不为此编写一个丑陋的C程序;-) – Saideira 2011-03-03 20:04:17

0

我能做到使用Perl用的GStreamer和GLib的绑定类似的东西。我的黑客滥用GStreamer Pipeline状态以重置文件链接的位置。我使用流源,因此在set_state('null')可接受之后重置为零行为。您需要管理源元素中的搜索位置以支持正确的分段。

my $g_pipeline = GStreamer::Pipeline->new('pipeline'); 
.... 
my $g_filesink = GStreamer::ElementFactory->make(filesink => "filesink"); 
$g_filesink->set(location => $file_name); 
... 
$g_pipeline->add(..., $g_filesink); 

my $delay = 5000; # switch output file at this interval 
my $timer = Glib::Timeout->add($delay, 
    sub { 
    $g_pipeline->set_state('null'); 
    ... 
    $g_filesink->set(location=> $next_file_name); 
    $g_pipeline->set_state('playing'); 
    } 
);