VLC媒体播放器中缺少初始关键帧问题

问题描述

我正在使用此管道创建h264视频。

udpsrc port={PORT} buffer-size=100000000 ! queue ! tsdemux parse-private-sections=TRUE ! h264parse ! avdec_h264 ! videoconvert ! x264enc key-int-max=20 ! capsfilter caps=video/x-h264,profile=(string)high-4:2:2 ! mpegtsmux ! udpsink host={DVR_IP} port={DVR_PORT} sync=FALSE

但是结果视频缺少初始关键帧。因此,当我使用VLC播放器打开视频文件时,在第一个关键帧之前,屏幕上什么都没有发生。

enter image description here

通常,它会在前10秒内遇到第一个关键帧,并且视频开始播放。然后我也可以倒带并观看前10秒。

使用ffprobe,我检查了关键帧之间的位置和时间。

ffprobe -loglevel error -skip_frame nokey -select_streams v:0 -show_entries frame=pkt_pts_time -of csv=print_section=0 5-1601984964095.ts

3610.187967
3620.185489
3630.193133
3640.187944
3650.185311
3660.182822
3670.188500
3680.184133
3690.185078
3700.182911
3710.183367
3720.182778
3730.184022
3740.184567
3750.182689
3760.185767
3770.184700
3780.190100
3790.189033
3800.184422
3810.195578
3820.184767
3830.189644
3840.191533
3850.200800
3860.189211
3870.186956
3880.182989
3890.187878
3900.180167
3910.179522
3920.181411
3930.182022
3940.186422
3950.185778
3960.189856
3970.192444
3980.182833
3990.182367
4000.181000
4010.184000
4020.183622
4030.184178
4040.186367
4050.180144
4060.177833
4070.194067
4080.197444
4090.197700
4100.178944
4110.185444
4120.180544
4130.186956
4140.184967
4150.188178
4160.202444
4170.193300

我失败的解决方案:

我通过向x264encoder添加key-int-max = 20更新了管道。

udpsrc port={PORT} buffer-size=100000000 ! queue ! tsdemux parse-private-sections=TRUE ! h264parse ! avdec_h264 ! videoconvert ! x264enc key-int-max=20 ! capsfilter caps=video/x-h264,profile=(string)high-4:2:2 ! mpegtsmux ! udpsink host={DVR_IP} port={DVR_PORT} sync=FALSE

现在,由于每秒有一个关键帧,因此在显示空白屏幕仅1秒钟后,视频仍继续播放。但是由于频繁使用关键帧,因此文件大小增加了一倍。因此,这种解决方案对我来说是不可持续的。

我的问题是如何解决此问题?我必须从一开始就观看该视频!是否可以通过某种方式更新gstreamer管道将初始(缺少一个)关键帧添加到视频的开头?

或者Vlc Player中是否有设置可以播放视频到第一个关键帧?我篡改了VLC的所有设置,但找不到任何有用的东西。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...