将基本身份验证与gstreamer汤一起使用httpsrc

时间:2019-05-08 08:52:22

标签: c gstreamer basic-authentication

我们正在gstreamer管道中使用gstreamer souphttpsrc来访问和转发http流。要访问httpstream,我们必须使用BasicAuth。我们知道如何格式化基本的auth标头,但是我们很难通过souphttpsrc extra-headers参数将标头作为GstStructure传递。

当前我们正在使用下面的命令

gst-launch-1.0 spuphttsrc location="http://streamsource" extra-headers="Authorization: Basic base64hash" ! ...

管道的其余部分已被剔除,因为先前已对其进行了测试并正在运行。

我们收到的错误:canot set property extra-headers

gstreamer的源代码可以在这里找到:https://github.com/GStreamer/gst-plugins-good

GstStructure文档可在以下位置找到:http://web.mit.edu/ghudson/dev/nokrb/third/gstreamer/docs/gst/html/gstreamer-GstStructure.html

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

自己面对这个问题好几天了,我终于准确地降落在我开始的地方。我的错误是我没有正确地转义空格。

错误

gst-launch-1.0 souphttpsrc location="http://streamsource" extra-headers="test,Authorization=Bearer\ eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c"

WARNING: erroneous pipeline: could not set property "extra-headers" in element "souphttpsrc0"

请注意,我确实添加了 \ 来转义 Bearer <Token> 中的空格,但这还不够。

解决方案

gst-launch-1.0

解决方案是将 valuekey=value 部分包裹在 \"<value>\" 中,如下所示使用 \

gst-launch-1.0 souphttpsrc location="http://streamsource" extra-headers="test,Authorization=(string)\"Bearer\ eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c\""

提示:如果你想显式,你也可以在 value 前面添加它的类型,比如 (string)\"value\"

gstreamer-java/gst1-java-core

最初提示我的问题是我无法在 java 绑定中设置 set extra-headers,我想我不妨在这里添加它。

在 Java 中:

String token = "mytoken";
Element httpSrc = ElementFactory.make("souphttpsrc", "test_src");
httpSrc.setAsString("extra-headers", "test, Authorization=Bearer $authToken");

或在 Kotlin 中:

val token: String = "mytoken"
val httpSrc: Element = ElementFactory.make("souphttpsrc", "test_src")
httpSrc.setAsString("extra-headers", "test, Authorization=Bearer $authToken")

对我有帮助的进一步阅读: