2011-01-26 221 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'); 
    } 
);