2010-12-16 43 views
1

我从正在生产约20 MB的专用设备读取数据/秒值太大定义的数据类型

/dev/dvb/adapter0/dvr0 

我需要阅读的内容,并复制到其他的FIFO

device_fd = os.open(video_device_file, os.O_RDONLY) 
    while True: 
     if jobm.has_jobs(): 
      chunk = os.read(device_fd, 1024 * 1000 ) 
      fifom.write2all(chunk) 
     jobm.idle() 

运行它为整个晚上后,我收到以下错误:

[错误75]值过大,定义数据类型

在os.read行中。

从谷歌似乎是有关的C库和32位指针,但我不知道这是如何影响我的Python版本是64位之一。

有什么建议吗?

+1

您的Python是否为64位操作系统编译? – nmichaels 2010-12-16 18:12:59

+2

http://www.google.com/search?q=eoverflow+dvb – 2010-12-16 18:15:08

+0

@nmichaels是的它是 @Ignacio +1好指针 – fabrizioM 2010-12-16 18:18:08

回答

1

我不知道你的jobm对象是什么,我认为它是由你创建的,因为这是类似对象的唯一谷歌结果,所以如果我错了,请纠正我。

您似乎正在打开视频设备进行阅读,视频设备不断生成视频数据,而不是阅读它,你是空转。你似乎没有将device_fd发送给你的工作,所以它不知道fd上是否有活动,所以它应该在你正在读的时候睡觉,这会造成缓冲区溢出。

如果有任何可用的情况,您需要始终从device_fd读取数据。将fd发送给作业,并使其利用pollselect来查找作业。

编辑:对不起,我错过了你的问题的细节。我所说的仍然适用,但不是直接的 - 因为我已经说过了,所以你需要注意你的输入和输出,不仅仅是你的输出。

如果fifos无法处理输出,并因此错过了读取设备的信息,则会出现问题。您需要1)创建一个缓冲区,以便在管道延迟写入时保存高达几百MB的数据,2)丢弃数据包。如果部分数据丢失,DVB应用程序应该处理它。您也可以简单地捕捉并忽略异常,尽管它会导致轻微的损坏并在输出中丢失数据。

相关问题