gstreamer playbin3 到 kinesis 管道:音频流丢失

问题描述

首先,非常感谢 gstreamer 社区提供的优秀软件。

我正在尝试使用 gstreamer 来使用 DASH/HLS/MSSS 流(使用 playbin3)并重新流式传输到 AWS Kinesis 视频:

gst-launch-1.0 -v -e \
playbin3 uri=https://dash.akamaized.net/dash264/TestCasesUHD/2b/2/MultiRate.mpd \
video-sink="videoconvert ! x264enc bframes=0 key-int-max=45 bitrate=2048 ! queue ! kvssink name=kvss stream-name=\"test_stream\" access-key=${AWS_ACCESS_KEY_ID} secret-key=${AWS_SECRET_ACCESS_KEY}" \
audio-sink="audioconvert ! audioresample ! avenc_aac ! kvss."

经过大量实验后,我决定不使用 uridecodebin3,因为它不能完全处理传入的流。

上述命令会在 KVS 上生成视频流,但缺少音频。我尝试将 kvssink 移出视频接收器管道并在两者中以 kvss. 的身份访问它,但无法链接

我可以为音频和视频创建单独的 kvs 流,但更希望将它们混合。

有谁知道这是否可能?我对此持开放态度。

解决方法

已解决 只是在这里发帖,以防其他人遇到这个问题。 我已经使用 streamlink 通过 http 本地重新流式传输:

streamlink <streamUrl> best --player-external-http --player-external-http-port <httpport>

然后使用 gstreamer 的 java JNI 绑定来运行这个管道:

kvssink name=kvs stream-name=<streamname> access-key=<awskey> secret-key=<awssecret> aws-region=<awsregion> uridecodebin3 uri=http://localhost:<port> name=d d. ! queue2 ! videoconvert ! videorate ! x264enc bframes=0 key-int-max=45 bitrate=2048 tune=zerolatency ! queue2 ! kvs. d. ! queue2 ! audioconvert ! audioresample ! avenc_aac ! queue2 ! kvs.

我需要使用 java 在缓冲中断时暂停和重新启动流,以免中断流。

以 kvs 格式到达的文件带有音频。