【问题标题】:UnicodeDecodeError while streaming video流式传输视频时出现 UnicodeDecodeError
【发布时间】:2016-05-23 06:54:41
【问题描述】:

我正在编写一个 python 脚本来通过 socketio 将视频数据从 ip 摄像机流式传输到 Web 应用程序。问题出在这里:

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

这是引发的 UnicodeDecodeError,因为 camera_buffer 表示 ffmpeg 格式的二进制数据。我的问题是,我如何告诉 Python 这是二进制数据而不是字符串?或者只是如何防止解码?

到目前为止唯一有效的方法是使用 binascii.hexlify(camera_buffer),但我想避免这种情况,因为它会给我带来不必要的开销。 我还尝试将数据作为字节数组发送。 我的操作系统是 Ubuntu 15.10。

编辑:有没有办法从管道中读取数据而不是字符串,而是二进制形式?我想这会有所帮助。我试过io=open('name_of_pipe','rb'),但从中读取仍然返回'str'。有什么想法吗?

【问题讨论】:

    标签: python python-2.7 encoding socket.io


    【解决方案1】:

    编辑: 你可以试试:

    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)
    

    data – 发送给客户端的数据。数据可以是 str、bytes、list 或 dict

    类型

    【讨论】:

    • 这不起作用,因为“数据”是emit 函数的命名参数。而且我认为我的问题出现得早一点,当我从管道读取数据时 - 如果可能的话,我只需要 Python 将其视为二进制而不是字符串。
    • 感谢您的评论,我提出了另一个想法 - 使用 os.fdopen 将打开设置为 'rb'
    • 已解决 - 我使用 Python 3 而不是 Python 2 和纯 websockets 而不是 socketio。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-07
    • 1970-01-01
    相关资源
    最近更新 更多