我只是想讀取IP攝像機(Basler BIP-1280c)的視頻流。 我想要的流保存在攝像機的緩衝區中,長度爲40秒,並在MJPEG中解碼。MJPEG來自IP攝像機的視頻太快
現在,如果我通過我的瀏覽器訪問流,它顯示了40秒沒有任何問題。 但實際上我需要一個能夠自行下載和保存流的應用程序。
相機通過http訪問,所以我使用libcurl
來訪問它。這工作正常,我也可以下載流沒有任何麻煩。我選擇將流數據保存到* .avi文件中(希望這是正確的?)。
但現在的問題是:我可以打開視頻(嘗試使用圖騰視頻播放器和VLC),並查看所有已錄製的內容 - 但速度太快。整個視頻持續5秒(而不是40秒)。是否有MJPEG中的任何內容放置信息,如總視頻長度或fps?我的意思是視頻播放器必須缺少一些信息,以便他們能夠快速播放?
更新:
正如答案的建議,我打開該文件用16進制軟件,什麼我發現是這樣的:
--myboundary..Content-Type: image/jpeg..Content-Length: 39050.........*Exif..II*...............V...........................2...................0210................FrameNr=000398732 6.AOI=(0800x0720)@(0240,0060)/(1280x0720).Motion=00000 (no) [00000 | 00000 | 00000 | 00000 | 00000].Alarm=0000 (no) .IO =000.RtTrigger=0...Basler..BIP2-1280c..1970:01:05 23:08:10.8 98286......JFIF.....
。 ............................ ....&"((
該頭文件全部重新出現在文件中(後面跟着大量的二進制數據字節)。這實際上是可以的,因爲我在相機手冊中看過所有MJPEG圖片都能得到這個標題。
更有趣的是在最後一行JFIF
。正如在建議的答案這可能是文件格式的指標。但afaik JFIF是一種像JPG格式的單一圖片格式。那麼這也許意味着整個視頻文件只是一些「無腦的」鏈接圖片?我的播放器只是假設他應該一個接一個地顯示這些圖片,而沒有關於幀率的任何知識?
檢查您爲avi文件指定的幀速率值。計算您寫入avi的幀數,然後計算應該在40秒內全部播放它們的幀速率。 –
'AVI'容器壞了(圖像可能不錯,但時間戳不是),如果你有其他的文件格式選項,也許你會想嘗試一個替代方案。具有固定的每文件幀速率的AVI不適合IP攝像機流。 –
但我其實不能選擇文件格式。我只能訪問流數據,然後我需要將其轉儲到文件中。所以我對數據存儲方式沒有影響,我只能選擇文件擴展名。 – Toby