python - pyglet/avbin 错过了视频的开头和结尾

标签 python video pyglet

我有一个问题,当使用 pyglet 播放视频时,流的开始和结束显然没有得到正确处理。播放器忽略第一个关键帧并因此显示故障图像,直到它找到第二个关键帧。同样,on_eos 事件没有触发,而是 python 崩溃,因为它显然试图加载更多帧。

import pyglet

vidPath = "test.mp4"
window = pyglet.window.Window()
player = pyglet.media.Player()
source = pyglet.media.load(vidPath)

player.queue(source)
player.play()

@player.event
def on_eos():
    print('video end')

@window.event
def on_draw():
    window.clear()
    if player.source and player.source.video_format:
        player.get_texture().blit(0, 0)

pyglet.app.run()

我在 OSX 10.11.3 上使用 Python 3.4.3、pyglet 1.2.4 和 AVbin 10。

在 Ubuntu 上尝试相同的代码和视频,我遇到了同样的问题,并在启动时出现以下错误:

Non-reference picture received and no reference available
[h264 @ 0x3386700] decode_slice_header error
Non-reference picture received and no reference available
[h264 @ 0x33880e0] decode_slice_header error
Non-reference picture received and no reference available
[h264 @ 0x3388520] decode_slice_header error
[h264 @ 0x3388a80] illegal short term buffer state detected
Non-reference picture received and no reference available
[h264 @ 0x3388a80] decode_slice_header error
[h264 @ 0x338c2e0] reference picture missing during reorder
[h264 @ 0x338c2e0] reference picture missing during reorder
[h264 @ 0x338c2e0] reference picture missing during reorder

视频播放结束后:

[h264 @ 0x23bde00] no frame!
[h264 @ 0x23bf7e0] AVC: nal size 0
[h264 @ 0x23bf7e0] AVC: nal size 0
[h264 @ 0x23bf7e0] no frame!
[h264 @ 0x23bfc20] AVC: nal size 0
[h264 @ 0x23bfc20] AVC: nal size 0

任何想法这里的问题是什么?我有一些视频可以正确开始,但无法识别结尾。

最佳答案

我还遇到过通过 pyglet 播放文件开头时出现故障的问题。我通过重新编码并在文件开头强制添加一些额外的关键帧来“修复”它:

avconv -i glitchy-file.mp4 -force_key_frames 0.01,0.02,0.03 \
-c:v h264 -c:a copy not-glitchy-file.mp4

这种方法也适用于合适的最新版本的 ffmpeg(只需将 avconv 替换为 ffmpeg)。我只在 linux 上用 h264 编码的视频流测试过它,使用 avbin10 和从 their git master branch 本地构建的 libav .

这是一个 hack,而不是解决方案,因为它不会告诉您为什么 pyglet 在流的早期忽略关键帧,也不会导致 pyglet 正确读取它们。但它使问题消失了。

关于python - pyglet/avbin 错过了视频的开头和结尾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34922943/

相关文章:

Pythons platform.system() 给我 str object has no attribute system 但只在脚本中

android - 在 Android WebView 中播放 Youtube HTML5 嵌入视频

linux - X11没有模拟音频输出

python - Pyglet文字背景不透明

python - 使用请求模块未收到来自 HTTPS 站点的响应

python - 将连续的整数组合在一起

python - 将 CSV 加载到 Pandas MultiIndex DataFrame

javascript - Flash 支持哪些视频格式?

java - 如何在 Canvas 中添加按钮?

python - Trimesh show 方法返回 AttributeError