2016-05-23 2 views
2

をストリーミングしながら、私はsocketioを経由してWebアプリケーションにIPカメラからの映像データをストリーミングするPythonスクリプトを書いています。問題はここにある:camera_bufferはffmpegの形式のバイナリデータを表してここUnicodeDecodeErrorがビデオ

sio.emit('my response', {'data': camera_buffer}, 
       namespace='/test') 

は、上げUnicodeDecodeErrorです。私の質問は、これはバイナリデータであり、文字列ではないことをPythonにどのように伝えることができますか?または、それを復号化するのを防ぐ方法は?

(camera_buffer)をbinascii.hexlify使用されてきた、これまで働いていた唯一の事、私はそれが私に不要なオーバーヘッドが発生すると、この問題を回避したいと思います。 私もbytearrayとしてデータを送信しようとしました。 私のOSはUbuntu 15.10です。

EDIT:ない文字列としてではなく、バイナリ形式でパイプからデータを読み取る方法はありますか?私はこれが助けることができると思います。私はio=open('name_of_pipe','rb')を試しましたが、これを読むと 'str'が返されます。何か案は?

答えて

0

編集:

name_of_pipe_binary = os.fdopen('name_of_pipe', 'rb', 0) 

をして、 "name_of_pipe_binary" ではなく "name_of_pipe" の使用: はあなたが試すことができますか? - データがクライアントまたはクライアントに送信するhttp://python-socketio.readthedocs.io/en/latest/#socketio.Server.emit

emit(event, data=None, room=None, skip_sid=None, namespace=None, callback=None) 

データを:


は、詳しくはをご覧ください。データはstr、bytes、listまたはdictのいずれかになります

+0

'data'はemit関数の名前付き引数であるため、これは機能しません。そして、私は私の問題は少し早く、私はパイプからデータを読み込む際に表示されていることを考える - 私はちょうどそれが可能である場合、バイナリではなく、文字列として扱うためにはPythonを必要としています。コメントを – JochoM

+0

おかげで、私は別のアイデアを提案してきた - os.fdopenを使用しては「rb」 – Yaron

+1

が解決すべきオープンを設定するであろう - 私は、Python 3の代わりに、Pythonの2と純粋なWebSocketを代わりにsocketioを使用しています。 – JochoM