首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何为双向音频发送音频API HIKVISION?

如何为双向音频发送音频API HIKVISION?
EN

Stack Overflow用户
提问于 2016-07-12 18:06:28
回答 2查看 1.8K关注 0票数 6

我需要帮助,以理解为什么当你发送音频给相机,你听到丑陋,非常快。摄像机配置为音频编解码器G711Ulaw。

我正在做的工作如下:

  • 我下载了一个wav音频,并将其转换为摄像机配置的编解码器,这些都是证据转换。 ffmpeg -i padrino.wav -acodec pcm_mulaw -ar 8000 -ac 1 -b:a 32k output.wav -i padrino.wav -acodec pcm_mulaw -ar 8000-ac 2 -b:a 32000 output.wav -i -i mulaw en29 20 en22# ffmpeg en24 8000 1 en28# -ar
  • 打开双向音频,在"data.xml“中是支持双向音频的xml: curl -H "application/xml“-X PUT -d @data.xml @data.xml
  • 我发了个卷发 curl -H“应用程序/二进制”-X PUT -d @output.ulaw 或 curl -H“应用程序/二进制”-X PUT -d @output.wav

这是在非公开场合听到的,但正如我一开始解释的那样,我听错了,我扭曲了,非常快。我做错了什么?

问候

EN

回答 2

Stack Overflow用户

发布于 2018-05-24 18:03:26

我已经找到了为什么-这与编码无关。我已经编写了一个C#应用程序来测试这一点,如果你以预期的速度发送数据(每秒8000个样本),那么它将正确运行。

我以数据包的形式发送音频数据(目前有160个字节,但是试验了最优值,但只要延迟是正确的,就不会有多大影响),并在再次发送之前延迟适当的时间,以便在一秒钟内发送正确的样本数量。

票数 1
EN

Stack Overflow用户

发布于 2022-09-29 18:03:38

我在github上发现了一个有趣的项目,它帮助我创建了一个简单的应用程序,可以使用python将音频发送到摄像机:

代码语言:javascript
复制
import urllib.request
import requests
import socket
import time


class SocketGrabber:
    """ A horrible hack, so as to allow us to recover
        the socket we still need from urllib """

    def __init__(self):
        self.sock = None

    def __enter__(self):
        self._temp = socket.socket.close
        socket.socket.close = lambda sock: self._close(sock)
        return self

    def __exit__(self, type, value, tb):
        socket.socket.close = self._temp
        if tb is not None:
            self.sock = None

    def _close(self, sock):
        if sock._closed:
            return
        if self.sock == sock:
            return
        if self.sock is not None:
            self._temp(self.sock)
        self.sock = sock


audio_file = "output.ulaw"
ip = "IPCAM"
username = "USER"
password = "PASS"
index = 1
base = f"http://{ip}"
chunksize = 128
sleep_time = 1.0 / 64

base_url = f"http://{username}:{password}@{ip}"
req = requests.put(
    f"{base_url}/ISAPI/System/TwoWayAudio/channels/{index}/open")

mgr = urllib.request.HTTPPasswordMgrWithDefaultRealm()
mgr.add_password(None, [base], username, password)
auth = urllib.request.HTTPDigestAuthHandler(mgr)
opener = urllib.request.build_opener(auth)
audiopath = f"{base}/ISAPI/System/TwoWayAudio/channels/{index}/audioData"

with SocketGrabber() as sockgrab:
    req = urllib.request.Request(audiopath, method='PUT')
    resp = opener.open(req)
    output = sockgrab.sock


def frames_yield(ulaw_data, chunksize=128):
    for i in range(0, len(ulaw_data), chunksize):
        for x in [ulaw_data[i:i + chunksize]]:
            tosend = x + (b'\xff' * (chunksize - len(x)))
            time.sleep(sleep_time)
            yield tosend


with open(audio_file, 'rb') as file_obj:
    ulaw_data = file_obj.read()
    for dataframe in frames_yield(ulaw_data, chunksize):
        output.send(dataframe)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38336063

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档