早在20世纪初,我就是个DVR迷。我的TiVO和ReplayTV收藏还有我在《纽约时报》的一篇关于DVR用户的文章中被提到过。
2003年ReplayTV 5000系列DVR发布。除了早期型号的自动商业跳跃功能外,这种新型号还可以将节目发送到另一个房间或世界上任何地方的ReplayTV上。
尽管新产品的销量有所增加,2003年对该公司来说仍是糟糕的一年。TiVO是最大的DVR品牌,广播公司就商业跳过和节目共享功能提起诉讼。不久,诉讼费用就超过了申请破产保护的母公司SONICBlue。
虽然该品牌被DNNA品牌下的Denon & Marantz Holdings收购,但ReplayTV仍在苦苦挣扎。
在ReplayTV 5000的第一年,用户报告说一些录音失去了音频同步。视频会暂时冻结,恢复后的音频会慢几秒钟。我也会遇到同样的问题,这只是时间问题。
在与技术支持交谈后,我了解到已经没有开发人员来解决这个问题了。我是一个失业的软件开发人员,要照顾两个年幼的孩子。我在音频和视频压缩方面有空闲时间和经验,所以我决定看看我是否能找到原因并修复它。
ReplayTV的录音格式是黑客发现磁盘分区表和文件系统后才知道的。开发人员创建了访问这些文件的工具,这些应用程序在www.avsforum.com等网站上共享。
这意味着,通过将DVR驱动器连接到计算机上,技术用户就可以使用命令行工具提取录音。
DVArchive是一个Java应用程序,它巧妙地模仿了ReplayTV网络协议。一台运行DVArchive的电脑看起来就像一台DVR,而ReplayTV则允许两者共享节目。
录制的节目是一个大型MPEG2文件。我认为这个问题可能是由硬件问题引起的,比如坏磁盘或MPEG编码器/解码器问题;一个软件缺陷;或者是错误的数据流。
MPEG视频被设计成在数据丢失时优雅地播放和完全恢复。因为回放无法恢复,所以不像是解码错误。这可以简单到一个坏键位、字节或以gb为单位的数据值。从哪里开始呢?
我的聪明之处是让录音质量不好的用户把他们的录音发给我的dvr。在将文件移动到带有DVArchive的PC上后,我有15+GB的文件需要检查!
MPEG文件是音频、视频和专有系统数据的交错流。我把每段录音压缩到故障发生前后的几秒钟,希望问题就在附近。我只能希望是这样,因为这些剪辑好的视频在我的DVD播放器和Cyberlink的PowerDVD上播放得很好。
我编写了一个程序来解析MPEG流,这样我就可以检查所有的数据包。经过几周的工作,我几乎没有取得任何进展,解码的数据看起来很好。
因为这些记录是在一个封闭的系统中生成的,所以我忽略了除数据类型和大小字段外的大部分数据帧头。我忽略了嵌入在每个数据帧中的解码时间戳(DTS)和演示时间戳(PTS),它们告诉解码器何时解码和演示数据。我发现这些值可能会被MPEG解码器(包括上面提到的那些)忽略,而MPEG解码器可以正确地播放这些片段。
我的想法用尽了,我决定检查时间戳,尽管我完全不知道什么是“坏”值。因为编码和播放速率是一致的,所以我决定检查连续数据块中PTS和DTS值之间的偏移量。
我非常幸运,在显示的数千个值中,有一个负PTS偏移脱颖而出。这可能是原因吗?
我确认了在之前的PTS之前设置了一个坏PTS。在所有共享记录中都发现了向后跳转。因为PTS是从之前的PTS派生而来的,所以任何错误都会一直传播到最后。
解决方法很简单;我需要重新计算坏音频PTS,然后更新剩余的时间。我在avsforum.com上与用户分享了我的流修正工具。用户开始用我的工具修复他们的录音。
这个故障排除的恶作剧花了我很多时间,但它被证明是非常值得的努力,因为我喜欢帮助ReplayTV社区!
我与ReplayTV分享了我的发现,但不幸的是,他们从未解决他们的问题。
Jeff Davies是一名消费电子硬件和软件设计师和开发者,目前致力于智能照明产品。他喜欢把东西拆了再重建,让它们比新东西表现得更好。
注:这篇文章是提交给电子设计2018年万圣节“Double, Double辛劳和疑难解答”竞赛。