簡體   English   中英

如何從字節流確定圖像格式?

[英]How can image format be determined from a byte stream?

我正在嘗試編寫一個python腳本,該腳本加入網絡攝像頭多播並將接收到的每個幀作為圖像存儲在本地硬盤驅動器上。 通常,可以單擊指向流的鏈接,然后在瀏覽器或VLC媒體播放器中播放流。

該流作為UDP多播提​​供,我可以使用以下代碼(Python33,Windows 7)進行訂閱:

import socket
import struct

MCAST_GRP = '(the ip)'
MCAST_PORT = (the port)

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
sock.bind(('', MCAST_PORT))
mreq = struct.pack("4sl", socket.inet_aton(MCAST_GRP), socket.INADDR_ANY)

sock.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mreq)


while True:
    data = sock.recv(1316)

    print(data)

這就是我卡住的地方。 數據似乎是一個字節流,我希望在其中對圖像進行編碼,但是在不知道圖片采用哪種格式的情況下,我無法繼續對該流進行解碼並將其轉換為實際圖像。 打印數據顯示此類輸出:

b'G \\ x01 \\ x00 \\ x1c \\ xc4 ...'b'G \\ x01 \\ x00 \\ x18 \\ x87 ...'b'GA \\ x015p \\ x00 \\ xff \\ xff ...'

如何將這些字節流轉換為實際圖像? 是否需要尋找和隔離與jpg / png格式相關的標記?

我在這里先向您的幫助表示感謝!

如果在流中也是文件(圖像)的標題,則它包含有關格式的信息,例如, 有關BMP文件格式的信息,請參閱Wiki。

我不是python方面的專家,而是一些視頻流專家,並且我懷疑您可能從一開始就以錯誤的方式想到它。 當您加入多播並接收流時,它與靜態圖片無關。 視頻通常將根據H.264標准進行編碼,並且幀以所謂的圖片組(GOP)進行結構化。 GOP由I,P和B幀組成,例如IPBBPBBPBBPBBPI,其中靜態圖片僅是I幀。 通常,人們會將I幀存儲為縮小圖像,以便在FF或RW操作期間顯示它們。 要從視頻流中提取I幀,通常會使用獨立的庫,而我所知道的最有用的庫是-https: //www.ffmpeg.org/

如果您真的想將每個圖片存儲在視頻中,它將允許您將流解碼為所有24,25或每秒的幀數,無論如何...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM