【发布时间】:2019-04-22 19:29:25
【问题描述】:
我正在尝试将 mkv 文件(请参阅下面的属性)发送到 Kinesis Video Stream。我想要每秒 10-15 帧的 FPS。
> ffprobe testvideo02.mkv
...
Input #0, matroska,webm, from 'testvideo02.mkv':
Metadata:
ENCODER : Lavf57.56.101
Duration: 02:37:57.02, start: -0.007000, bitrate: 457 kb/s
Stream #0:0: Video: h264 (Main), yuv420p(progressive), 488x360 [SAR 1:1 DAR 61:45], 25 fps, 25 tbr, 1k tbn, 50 tbc (default)
Metadata:
HANDLER_NAME : VideoHandler
DURATION : 02:37:57.000000000
Stream #0:1(eng): Audio: opus, 48000 Hz, stereo, fltp (default)
Metadata:
DURATION : 02:37:57.021000000
要将流推送到 KVS,我使用来自 amazon-kinesis-video-streams-producer-sdk-cpp 的 GStreamer 命令行。我使用了不同的密钥,这是我最终拥有的,但它不起作用:
gst-launch-1.0 filesrc location=testvideo02.mkv do-timestamp=TRUE \
! matroskademux ! decodebin \
! videorate drop-only=true ! video/x-raw,framerate=15/1,max-rate=15/1 \
! videoconvert \
! x264enc bframes=0 key-int-max=45 bitrate=2048 \
! video/x-h264,framerate=15/1 \
! kvssink stream-name=$STREAM_NAME framerate=15 \
access-key=$AWS_ACCESS_KEY secret-key=$AWS_SECRET_KEY
[DEBUG][2019-04-22 19:22:44] Kinesis Video client and stream metrics
>> Overall storage byte size: 134217728
>> Available storage byte size: 133001418
>> Allocated storage byte size: 1216310
>> Total view allocation byte size: 86472
>> Total streams frame rate (fps): 163
>> Total streams transfer rate (bps): 25683152 (25081 Kbps)
>> Current view duration (ms): 720
>> Overall view duration (ms): 6000
>> Current view byte size: 187371
>> Overall view byte size: 1211851
>> Current frame rate (fps): 163.493
>> Current transfer rate (bps): 25683152 (25081 Kbps)
[DEBUG][2019-04-22 19:22:44] Curl post body write function for stream: bc-test1 and upload handle: 0 returned: {"EventType":"PERSISTED","FragmentTimecode":21600,"FragmentNumber":"91343852333182571337132286426569376608263492193"}
在另一台服务器的客户端(KVS 消费者)上,我的 FPS 超过 80。
问题:如何获得 15 的 FPS?
最糟糕的问题是:在消费者端,我每 1-1.5 秒就有大约 1 秒的数据接收“冻结”。之后,它接收该时间的全部数据并继续处理。无法理解根本原因。一些缓冲区?
【问题讨论】:
标签: video-streaming amazon-kinesis gstreamer-1.0