gpt4 book ai didi

bash - curl 发布带有速率限制的音频数据

转载 作者:行者123 更新时间:2023-12-02 22:10:45 27 4
gpt4 key购买 nike

我正在尝试使用 curl 为允许传输/接收音频文件的 HTTP-API 发布音频数据。

首先我试过这个:

curl -vv --http1.0 -H "Content-Type: audio/basic" -H "Content-Length: 9999999" -H "Connection: Keep-Alive" -H "Cache-Control: no-cache" --data-binary @- 'http://IP/API-Endpoint.cgi'

这似乎有效:
*   Trying [IP]...
* TCP_NODELAY set
* Connected to [IP] ([IP]) port 80 (#0)
> POST /API-Endpoint.cgi HTTP/1.0
> Host: [IP]
> User-Agent: curl/7.54.0
> Accept: */*
> Content-Type: audio/basic
> Content-Length: 9999999
> Connection: Keep-Alive
> Cache-Control: no-cache
>
* upload completely sent off: 17456 out of 17456 bytes
* HTTP 1.0, assume close after body
< HTTP/1.0 200 OK
< Content-Type: text/plain
< Content-Length: 0
* HTTP/1.0 connection set to keep alive!
< Connection: keep-alive
< Date: Wed, 06 Jun 2018 19:38:37 GMT
< Server: lighttpd/1.4.45

但我只能听到音频文件的最后一部分。 (该文件具有适用于 API 的正确音频格式:G.711 μ-law,频率为 8000 Hz)我的下一个猜测是,音频传输速度太快,必须实时发送到 API 端点。于是尝试了curl的 --limit-rate参数,没有效果。然后我尝试将具有速率限制的数据传输到 curl 中:
cat myfile.wav | pv -L 10k | curl -vv --http1.0 -H "Content-Type: audio/basic" -H "Content-Length: 9999999" -H "Connection: Keep-Alive" -H "Cache-Control: no-cache" --data-binary @- 'http://IP/API-Endpoint.cgi'

但结果总是一样:我只能听到音频文件的最后一部分。似乎 curl 正在等待管道输入完成,然后像以前一样发送请求。

是否可以选择“实时”从 bash 将音频发布到 HTTP-API?

更新:
在不强制使用 HTTP 1.0 的情况下,我得到以下结果:
curl -vv -H "Content-Type: audio/basic" --data-binary '@myfile.wav' 'http://[IP]/API-Endpoint.cgi'
* Trying [IP]...
* TCP_NODELAY set
* Connected to [IP] ([IP]) port 80 (#0)
> POST /API-Endpoint.cgi HTTP/1.1
> Host: [IP]
> User-Agent: curl/7.54.0
> Accept: */*
> Content-Type: audio/basic
> Content-Length: 15087
> Expect: 100-continue
>
< HTTP/1.1 417 Expectation Failed
< Content-Type: text/html
< Content-Length: 363
< Connection: close
< Date: Wed, 06 Jun 2018 20:34:22 GMT
< Server: lighttpd/1.4.45
<
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>417 - Expectation Failed</title>
</head>
<body>
<h1>417 - Expectation Failed</h1>
</body>
</html>
* Closing connection 0

最佳答案

使用 -H "Content-Length: 9999999" 你说你的音频文件正好是 9999999 字节长(大约 10 兆字节),但是 curl 报告你的文件是 17456 字节:

* upload completely sent off: 17456 out of 17456 bytes

(大约 0.02 兆字节),所以要么您的 Content-Length header 错误(这是我最好的猜测),要么将您的音频文件提供给 curl 的程序有问题,导致过早关闭 stdin。

要么修复您的 Content-Length header ,要么修复提供 curl 标准输入的程序,希望这应该完整地发送整个文件。

编辑:哦,似乎服务器无法处理 Expect: 100-continue ,要禁用该 header ,请添加参数 -H 'Expect:'
(空的 Expect header 将使 curl 完全省略 header ,而不是将 header 发送为空)

...但要回答标题中的问题,是的,这就是 --limit-rate 参数。

关于bash - curl 发布带有速率限制的音频数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50728628/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com