4

この APIを使用してストリーム データをダウンロードすることはできましたが、解析方法がわかりません。RMTP 形式を調べましたが、一致していないようです。

from livestreamer import Livestreamer

livestreamer = Livestreamer()

# set to a stream that is actually online
plugin = livestreamer.resolve_url("http://twitch.tv/froggen")
streams = plugin.get_streams()
stream = streams['mobile_High']
fd = stream.open()
data = fd.read()

ここにデータの例をアップロードしました。

理想的には、ビデオとして解析する必要はありません。最初のキーフレームのみが画像として必要です。どんな助けでも大歓迎です!

更新: OK、OpenCV が動作するようになりました。これは、私が持っていたランダムなビデオ ファイルの最初のフレームを取得するために動作します。ただし、ストリーム データを含むファイルで同じコードを使用すると、ナンセンスなイメージが生成されました。

4

1 に答える 1

5

わかりました。必ずバイナリ データとして書き込んでください。OpenCV は最初のビデオ フレームをデコードできます。結果の画像は R チャンネルと B チャンネルが入れ替わっていましたが、簡単に修正できました。完全なイメージがあることを確認するには、約 300 kB をダウンロードするだけで十分なようです。

import time, Image

import cv2
from livestreamer import Livestreamer

# change to a stream that is actually online
livestreamer = Livestreamer()
plugin = livestreamer.resolve_url("http://twitch.tv/flosd")
streams = plugin.get_streams()
stream = streams['mobile_High']

# download enough data to make sure the first frame is there
fd = stream.open()
data = ''
while len(data) < 3e5:
    data += fd.read()
    time.sleep(0.1)
fd.close()

fname = 'stream.bin'
open(fname, 'wb').write(data)
capture = cv2.VideoCapture(fname)
imgdata = capture.read()[1]
imgdata = imgdata[...,::-1] # BGR -> RGB
img = Image.fromarray(imgdata)
img.save('frame.png')
# img.show()
于 2013-09-28T15:56:01.830 に答える