如何在Python中读取持续的HTTP流数据?

4 投票
1 回答
3443 浏览
提问于 2025-04-15 15:14

如何在Python中从HTTP流媒体服务器读取二进制流。我搜索了一下,有人说urllib2可以做到,但有阻塞问题。还有人建议使用Twisted框架。

我有几个问题:

  1. 如果只是一个后台读取数据的流客户端,我可以忽略urllib2造成的阻塞问题吗?

  2. 如果urllib2跟不上流媒体服务器,会发生什么?数据会丢失吗?

  3. 如果流媒体服务器在获取数据之前需要通过GET或POST发送一些参数进行用户认证,urllib2能做到吗?

  4. 我在哪里可以找到一些关于urllib2和Twisted的流客户端示例?

谢谢。

杰克

1 个回答

6

为了克服urllib2自带的缓存问题,你可以这样做:

import socket
socket._fileobject.default_bufsize = 0

其实是socket._fileobject在底层进行缓存。虽然数据不会丢失,但如果使用默认的缓存设置(每次8192字节),数据可能会被分成很多小块,这样不太适合实时流媒体的需求(完全去掉缓存可能会影响性能,但你可以尝试使用更小的数据块)。

关于Twisted,可以查看twisted.web2.stream以及那里的许多链接。

撰写回答