跳到正文
版本:3.2.x

与运行相关的常见故障

简介

如果你无法通过本页解决你的问题,请通过以下按钮提出问题:

提出问题

问与答

无法解码第一帧

  • : 为什么我无法正确解码第一帧?我得到的帧是全黑的。

  • : 这一问题一般在使用MpegClient时出现,特别是解那些RTSP流的时候。在一些编码算法里,存在I,P,B这三种帧。在解码其他两种帧的时候,必须先得到其对应的已经解码过的I帧。如果你接收到的第一帧不是一个I帧,那么你就没办法正确解码它了。如果你保持继续解码几帧同一个视频,这个问题应该会自然解决。

无法编码帧

  • : 为什么mpegCoder在编码视频帧的时候崩溃了?

  • : 你可能对MpegEncoder.EncodeFrame()传入了不正确的数据。输入数据必须是一个三维矩阵np.ndarray,且其大小需要与编码器的用户设置一致。

输出视频损坏

  • : 为什么我使用MpegEncoder输出的视频损坏了?

  • : 一般来说,视频损坏是由以下两种原因导致的。请检查你的情况是否和它们相符:

    • 视频文件尾没有正确写入。这一问题一般是由于强制中断正在运行的编码器程序引起的。
    • 某些输入帧没有被正确地写入。

推流、解流器卡住不动

  • : 为什么我在使用MpegClientMpegServer的时候,程序卡住不动了?

  • : 这一问题往往是由streamer.FFmpegSetup()引起的,特别是在远端的服务器程序没有启动的情况下,或者所用的协议被远端服务器拒绝的情况下。我不得不承认的是,现在关于这个问题的处理还不够好,在未来的版本里,我会试图添加一个超时(timeout)选项。

无法推流

  • : 我可以通过MpegServer.FFmpegSetup()连接到远端服务器。为什么在这种情况下,我没有办法利用MpegServer.ServeFrame()推送第一帧呢?

  • : 这种问题一般是由于使用了不合适的编码器(codec)引起的。并不是所有的编码都支持在线流服务的。建议用户使用libx264

设置日志级别

  • : 我不想在控制台看到一大堆状态信息,怎么把它们去掉?

  • : 可以通过以下方式进行全局设置

    mpegCoder.setGlobal(dumpLevel=0)

    该值可以是0(只显示错误),1(显示基本的日志),2(显示详细的日志)。

复用实例

  • : 我能复用mpegCoder的实例吗?例如,复用mpegCoder.MpegDecoder?

  • : 是的。但请记住在复用同一个实例前,要先调用clear()