c - 使用 gstreamer souphttpsrc 的基本身份验证

标签 c gstreamer basic-authentication

我们在 gstreamer 管道中使用 gstreamer souphttpsrc 来访问和转发 http 流。要访问 httpstream,我们必须使用 BasicAuth。我们知道如何格式化基本身份验证 header ,但我们在通过 souphttpsrc extra-headers 参数作为 GstStructure 传递 header 时遇到困难。

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

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

管道的其余部分已被省略,因为它之前已经过测试并且正在工作。

我们收到的错误:无法设置属性额外 header

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

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

如有任何帮助,我们将不胜感激。

最佳答案

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

错误

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

解决方案是将 value 包装起来部分key=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

最初引发我问题的是我无法设置集 extra-headers在java绑定(bind)中,我想我不妨将它添加到这里。

在 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")

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

关于c - 使用 gstreamer souphttpsrc 的基本身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56036937/

相关文章:

字符数组在 UDP 客户端打印随机垃圾

c++ - 具有基本身份验证的 HTTPS 客户端的 C/C++ 库

REST 安全性,使用基本身份验证加上 jwt token 验证是一种不好的做法吗?

c - c中指针的声明

c - 错误: unable to handle kernel paging request at ffffffffffffffff

c - 使用 lex 检测 float

c++ - 如何从 qml webgl 获取麦克风到 c++?

linux - 交叉编译 gstreamer 失败 : x86-64 -> ARMv6 32-bit

c - Gstreamer:无法同时从 alsasrc 收听音频和录音?

java - 使用 HttpUrlConnection 的抢先式基本身份验证?