GStreamer C代码给souphttpsrc加Authorization头报401错误如何解决
问题原因与解决方法
核心错误原因
你代码中extra-headers的GstStructure构造逻辑完全不符合souphttpsrc的API要求:你错误地把gst-launch命令行的结构化字符串语法整串作为了authorization头的值,其中(string)、双引号、前缀test,都是命令行特有的语法标识,C API调用时不需要传入这些标识。
souphttpsrc的extra-headers属性接受的GstStructure里,每个键对应一个HTTP请求头的名称,每个值直接对应请求头的实际内容即可。
修复后的代码示例
// Set the source location parameter on the souphttpsrc element GstElement* urisrc = gst_bin_get_by_name(GST_BIN(data->pipeline), "httphlssrc"); g_object_set(urisrc, "location", from.c_str(), NULL); // Add token to GET header if (!data->token.empty()) { // 拼接正确的Authorization头值:Bearer + 空格 + 实际token gchar* auth_header_value = g_strdup_printf("Bearer %s", data->token.c_str()); // 构造extra-headers结构,直接传入头名和对应实际值 GstStructure* extraHeaders = gst_structure_new("extra-headers", "Authorization", G_TYPE_STRING, auth_header_value, NULL); g_object_set(urisrc, "extra-headers", extraHeaders, NULL); g_free(auth_header_value); gst_structure_free(extraHeaders); } g_object_unref(urisrc);
可选检查点
- 如果你的服务器对请求头大小写敏感,确认头名拼写为
Authorization(首字母大写)而非全小写 - 如果你访问的是自签名证书的HTTPS服务,可额外添加配置
g_object_set(urisrc, "ssl-strict", FALSE, NULL);关闭证书校验,生产环境不推荐使用该配置
内容的提问来源于stack exchange,提问作者Keith
相关产品推荐
相关产品推荐

