2011-10-17 92 views
4

我搜索了互聯網和堆棧溢出,但找不到解決方案或對我的問題有幫助的提示。使用MATLAB同時播放多個視頻

我需要在MATLAB中編寫一個專門的視頻註釋軟件,它必須能夠在GUI上同時播放多個視頻(至少2個)。視頻文件是XVID編碼的。到目前爲止,我基本上只是調整了mathworks.com視頻播放示例(xylophon.avi,請參閱movie()說明)。

我熟悉的mmreader,VideoReader,電影和implay功能,但還是我面臨兩個問題:

  1. 即使我讀了只有少數幀(像xylophon.avi例如),我的程序很快超出了可用內存。而且,即使相對較少的幀(例如100)也需要相當長的時間才能閱讀。

  2. movie()函數是synehronous的,所以第二個視頻在第一個視頻完成之前不會啓動。我怎樣才能同時調用兩個movie()函數?或者有另一種方式同時顯示兩個(或更多)視頻?

有什麼建議嗎?謝謝!

回答

2

首先,MATLAB不是多線程的。平行做兩件事情會很困難。嘗試突破Java。 Matlab使用JIDE作爲其基於Swing構建的圖形前端。使用MATLAB Builder JA爲了將您的MATLAB代碼編譯爲Java,或將您自己的「面板」添加到IDE中,如this question中所示。

+0

我在想是否可以用Parallel Toolbox完成多線程處理。但是,我總結以另一種語言實施該工具。不管怎麼說,還是要謝謝你! – Erich

0

原則上,您可以將每個視頻幀顯示爲圖像,並交替更新每個視頻,但要使其以完全正確的幀速播放可能很困難。

嘗試如下所示。這可能不會按原樣工作,但您應該可以更新它。

v1 = VideoReader(firstVideo) 
v2 = VideoReader(secondVideo) 

i1 = 0; 
i2 = 0; 
while i1 < v1.NumberOfFrames && i2 < v2.NumberOfFrames 
    if i1 < v1.NumberOfFrames 
     i1 = i1+1; 
     subplot(1,2,1) 
     image(v1.read(i1)) 
    end 

    if i2 < v2.NumberOfFrames 
     i2 = i2+1; 
     subplot(1,2,2) 
     image(v2.read(i2)) 
    end 

    drawnow 
end 
1

您可以在兩個不同的窗口中顯示視頻,並通過爲視頻提供句柄並調用其未記錄的播放功能來同時開始播放。這可以消除您對視頻長度不等的任何爭議。

handle1 = implay('file1.mp4'); 
handle2 = implay('file2.mp4'); 

handle1.Parent.Position = [100 100 640 480]; 
handle2.Parent.Position = [740 100 640 480]; 

play(handle1.DataSource.Controls) 
play(handle2.DataSource.Controls)