pyglet/avbin缺少vid的开头和结尾

2024-04-19 19:33:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个问题,当用pyglet播放视频时,流的开头和结尾显然处理不正确。播放器忽略第一个关键帧,因此显示出小故障图像,直到找到第二个关键帧。同样,on-eos-event不是fire而是python chrash,因为它显然试图加载更多的帧。在

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()

我在OSX10.11.3上使用了Python3.4.3、pyglet 1.2.4和Avbin10。在

在Ubuntu上尝试同样的代码和视频,我在start时遇到了同样的问题和以下错误:

^{pr2}$

当视频结束后:

[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

有什么问题吗?我有一些视频,开始正确,但结束永远无法识别。在


Tags: eventsourcesize视频ondefwindowmedia
1条回答
网友
1楼 · 发布于 2024-04-19 19:33:58

我也遇到了一个问题,当通过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。在

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

相关问题 更多 >