我正在尝试配置Websocket与Asterisk 11一起使用.但是存在一些问题. 我遵循的步骤是: 在http.conf中启用了以下 enabled=yes bindaddr=0.0.0.0 bindport=8088 我还配置了具有DTLS支持的星号. 但是,当我尝试连接到Websocket新Websocket(" ws://myseverip:8088/ws"); .它引发了一个错误 WebSocket connection failed: Error during WebSocket handshake: Unexpected response code: 400 任何人请帮助. 谢谢 解决方案 这是一个完整的安装指南.请让我知道这是否解决了您的问题. Asterisk还提供 Wiki post 安装SRTP: cd ~ git clone https://github.com/cisco/libsrtp.git cd l
以下是关于 rtp 的编程技术问答
webrtc除其他外,用于实时浏览器浏览媒体通信的目的是,但就我而言,它将用于浏览器可用于服务器音频通信. 从我收集的信息中,使用RTP在UDP上转移了介质. 这将至少需要两个额外的端口,除了用于信号的协议,我想避免的. 在WEBRTC中,是否有可能在Websocket上使用RTP,而不是在UDP上使用RTP,以便我只需要使用端口80或443? 解决方案 否,使用webrtc. 是不可能的 WebRTC的建造是为浏览器提供的三个主要功能: 能够访问设备的摄像机和麦克风的能力; 能够建立SRTP会话以发送/接收音频和视频; 能力在浏览器之间建立对等数据渠道; Web应用程序可以通过JavaScript API定义您必须向浏览器请求媒体SDP优惠,并使用任何协议(例如Websockets)将其发送给另一方.当另一方收到您的SDP报价时,它可以将其注入浏览器,请求SDP答案并将其发送回.一旦两个浏览器都有报价,他们就会使用ICE开始进行SRTP谈判
我使用WEBRTC向GSTREAMER发送视频流.我可以从GSTREAMER中的RTCP SR数据包中获取数据包的RTP时间和NTP时间.在接收器的接收器我想计算该数据包在发件人处创建的时间. 我目前正在计算延迟为 delay =发送的数据包 - 接收数据包的时间 (所有客户端都没有相同的NTP时间) 时间差=(接收器的ntp -ntp of发件人) 我将每个RTP数据包的RTP时间转换为NTP值 90000是时钟速率 发送packet =(RTP数据包中的RTP时间)-RTCP数据包中的RTP时间)/90000) * 1000000000 + rtcp中的NTP(转换为NS) delay =(ns中的接收器NTP - 时间差) - ns中的数据包发送时间(在NTP值中) 延迟显示了本地网络中的12046392纳米sec,我认为我在计算中做错了什么. 解决方案 RTCP SR可以帮助映射RTP(基于样本时钟的相对)时间戳到NT
我有一个流媒体服务器,该服务器在RTP数据包中接收RTMP视频,并将这些数据包发布到Web浏览器中.建立了连接,但没有显示视频. 我的服务器看起来像这样: func main() { http.HandleFunc("/createPeerConnection", createPeerConnection) panic(http.ListenAndServe(":8080", nil)) } func createPeerConnection(w http.ResponseWriter, r *http.Request) { peerConnection, err := webrtc.NewPeerConnection(webrtc.Configuration{}) if err != nil { panic(err) } // Create a video track videoTrack, err :=
现在我测试WebRTC与SIP客户端(SX20) 进行通信 我使用WEBRTC SDP发送邀请消息.但是sip客户的答案没有手指打印, sip客户端答案不只是rtp. 所以我需要关闭WebRTC中的SRTP.我可以做吗? 还有一个问题...我认为,手指打印是加密的, 那么,发送者和接收器需要每个键吗?我们需要两个钥匙吗?发件人的钥匙,接收钥匙? 否则我们只需要发件人'键? 解决方案 您无法关闭SRTP.它是标准的一部分,可能永远不会删除. 钥匙在指纹不是密钥本身,钥匙是通过DTLS交换的,如果您在其中一台机器上收听Wireshark,则实际上可以看到DTLS交换P> 您将需要实现一个断路器才能与WEBRTC客户端和SIP客户端接口. 其他解决方案 用于测试目的,Chrome Canary和Chrome Developer都有一个标志,可以关闭SRTP,例如: cd /Applications/Google\ Chrome\ Canary.a
来自Mozilla网站: en-us/docs/web/api/media_streams_api " mediastream由零或更多的介质流动对象组成,代表各种音频或视频轨道.每个MediaStreamTrack可能具有一个或多个频道.该通道代表媒体流的最小单元,例如与给定的音频信号相关的音频信号扬声器,就像立体声音轨中的左右扬声器一样." 阐明了什么是通道. 最近的几个RFC(例如8108)是指在一个RTP会话中发送多个流的需要.每个流将在RTP级别具有自己的SSRC. 在统一计划的RFC中,参考始终是流作为最低级别(不是跟踪或通道)的流.在RFC 3550,基本RTP RFC中,没有引用通道. 在这些RFC中引用的RTP流是将流作为最低介质来源的,与WEBRTC中使用的术语相同,并如上所述? 轨道(WEBRTC)和SSRC的RTP流之间是否有一对一的映射? 例如, 网络摄像头会生成一个媒体流,该媒体流可以具有音频媒体轨道和视频媒体轨道,每个轨道都使用单
我正在使用Kurento的主git将WEBRTC送到RTP桥. MediaPipeline pipeline = kurento.createMediaPipeline(); WebRtcEndpoint webRtcEndpoint = new WebRtcEndpoint.Builder(pipeline).build(); HttpGetEndpoint httpEndpoint=new HttpGetEndpoint.Builder(pipeline).build(); org.kurento.client.Fraction fr= new org.kurento.client.Fraction(1, 30); VideoCaps vc= new VideoCaps(VideoCodec.H264,fr); httpEndpoint.setVideoFormat(vc); AudioCaps ac= new AudioCaps(AudioCodec.P
我有一台服务器,可以从Web浏览器中接收优惠,回答,候选人,用于WEBRTC会话,并传递给其同行.后来数据也从同一服务器传递. 现在要实现我们自己的SFU式机制,我正在考虑,如果我可以将这些数据解密到实际的原始字节,然后使用自己的加密传递给多个同行.为此,我考虑使用开源 libsrtp 库.这是它的示例代码. 它主要具有2个函数srtp_protect(),并解密srtp_unprotect(). 问题:如何在WEBRTC SDP标头的上述连词中使用此库(VIZ提供,答案,候选人)以获取RAW RTP字节并再次加密它们? [注意:" MediaSoup"," Janus"等其他开源解决方案不在此帖子的范围内.] 解决方案 如果您有要约,答案和候选人,则有足够的信息来建立WEBRTC会话.在您担心加密/解密之前,您需要建立对于ICE,您需要每个代理商用户碎片和密码.您可以通过要约/答案来交换这些价值.我将从 ice-lite .您需要接受Stun请求数据包,断言
我正在尝试开发一个应用程序,其中建立了SIP调用,然后捕获RTP音频数据包.当它们编码时,我需要对其进行解码并保存它具有.wav文件.尝试使用Naudio,但没有起作用.是否有使用Naudio或任何其他来源解决此问题的解决方案... 我使用的代码如下.数据是RTP数据包数据的字节数组. System.IO.MemoryStream stream = new System.IO.MemoryStream(data); RawSourceWaveStream rsws = new RawSourceWaveStream(stream, WaveFormat.CreateMuLawFormat(8000,1)); WaveStream conversionStream = WaveFormatConversionStream.CreatePcmStream(rsws); WaveStream blockAlignedStream = new BlockAlignReducti
我想使用反向字节订单来制作自定义的sipdroid客户端.我认为这使其他VoIP客户端无法解码这些数据. 所以我阅读了sipdroid的代码.我发现RTP数据是这样的: 1. AudioreCord.Read(OriginalPCM) 2.编码(OriginalPCM,EncodedData) 3. rtp_socket.send(rtp_packet)//encodedata是rtp_packet的数据部分 另一面是: 1. rtp_receive(rtp_packet) 2.解码(encodedata,pcmdata)//encodedata是rtp_packet的数据部分 3. audiotrack.write(PCMDATA) 所以我修改了sipdroidsocket类.在发送方法中,我在开始时添加以下代码. byte[] b = pack.getData(); reverse(b); pack.setData(b); 并在接收方法结束时添加以下代码.
我实施了一个使用android.net.rtp库的voip的Android应用程序. 它只会从设备麦克风中获取语音,然后将其发送到VoIP中(到另一个Android或PC接收器). 问题在于,在某些设备上,VoIP trasserion在2-3秒后开始.我的意思不是要在交付数据包中延迟2-3秒,我的意思是没有发送前2-3秒的声音.在这2-3秒之后,一切都可以正常工作. 奇怪的是,它仅发生在某些Android设备上,而不是设备性能或Android版本的问题.例如,它发生在一个非常旧的设备上,而在新设备中则发生在另一个非常旧的设备中,而在另一个新设备中不会发生…… 我想到了一些延迟麦克风捕获的Android服务/功能,但目前我没有发现任何东西…… 在以下内容中,我用来发送VoIP的代码是一个经典的代码: myAudioStream = new AudioStream(myIPAddress); myAudioStream.setCodec(AudioCodec.PCMU); my
我正在尝试通过使用nodejs来播放谁打电话给我. 他正在使用SIP并启动呼叫.我能够接到电话并记录他的音频. 现在我正在尝试使用RTP协议向他播放音频. 所以我尝试的是保存每个RTP数据包,然后按原样发送回. 但是我不透气,为什么他什么也没听到. 邀请命令 INVITE sip:1@104.154.78.142 SIP/2.0 Via: SIP/2.0/UDP 31.168.3.211:5060;branch=z9hG4bK071d7c26 Max-Forwards: 70 From: "0555042354" ;tag=as710f47f3 To: Contact: Call-ID: 36bde5b72f7a67956f7559a8581ea010@31.168.3.211:5060
目前,我发现一个可以通过一个RTP流(一个连接)从多个来源流传输视频的LIB.一个人有Sugesstion? 实际上,我发现Opal 3.8是VoIP Lib,支持RTP/H264.但是我不知道它是否可以从一个流中支持MUX/Demux RTP媒体?如果没有,你能给我一些建议吗? 谢谢, 解决方案 周围有一些RTP堆栈,您使用哪一种取决于您要在哪种语言中开发的语言, pjmedia 是一个很好的跨平台. RTP流只能从单个来源携带媒体,因此您将无法将多个视频流乘以单个RTP流,请参见 rtp rfc .您可以做的是有两个单独的RTP流(不同的SSRC)从同一套接字发送,这意味着就网络而言,您将它们默许它们.如果您实际上想将多个视频流组合到单个RTP流中,那么您需要将它们混合在一起,这是完全不同的鱼类.
我有以下GSTREAMER命令行: gst-launch alsasrc ! mulawenc ! rtppcmupay ! udpsink host= 127.0.0.1 port=5555 它记录了单声音,如果我在5555端口上听(使用了Echo IP),我可以听到它.但是我需要传输立体声. 我还使用以下命令尝试了我的麦克风进行立体录制功能: arecord -vv -fdat voiceFile.wav 它有效. 有人知道如何在gstreamer命令中指定立体声? 解决方案 问题是rtppcmupay不支持立体声: $ gst-inspect rtppcmupay ... Capabilities: audio/x-mulaw channels: 1 rate: 8000 .... 您可以尝试其他编解码器(例如Vorbis): $ gst-launc
我将在Android上进行PTT项目.您能告诉我,Android对开发人员的语音和多媒体API(例如RTP,RTSP,VoIP)的支持吗? 解决方案 MediaPlayer在内部自动处理RTSP和RTP,因此您无需处理太多. OTOH它不会对此过程给予任何低级控制. 关于VoIP:Android仅消耗RTSP/RTP流,但不会创建/发布它们.所以这仅是单向. android 2.3(姜饼)据说支持基于sip sip voip . 其他解决方案 使用Audiotrack \ Audiorecord API进行录音和播放.它们允许您处理原始音频帧. RTP数据包非常简单 - 它只是一个包含一些最小标头数据和原始音频框架的数据包.它易于实现 - 查看sipdroid以获取RTP数据包的参考实现.
我正在寻找用于Android和iPhone的SIP堆栈.我发现了很多类似的问题,有时很旧...如果解决方案是商业化(但这是首选)或开源的不太在意. 到目前为止,我找到了 Android Radvision的商业解决方案 iPhone的开源Siphone 覆盖两个平台的林电话. gingerbreadhas内置sip堆栈 - 但似乎有一定的局限性 Mno可能会删除... 我的问题是: 有人在上述解决方案上有好/不好的经验吗? 您是否使用上述解决方案来开发和发布应用程序? iPhone/iPad的任何商业SIP堆栈提供商? 非常感谢 Sten 解决方案 Radvision,我工作的公司,您提到的公司也为iOS提供了SIP堆栈(转化为iPhone和iPad). 不能说它有多好(我可以,但我认为对我们的解决方案的看法不重要),而且我们确实有客户在这些设备上成功使用了我们的产品. 其他解决方案 查看 pjsip .它非常便携,由Android
我正在为Android编写一个RTP视频流媒体,该视频流从Android Local插座读取H264编码的数据并将其化.问题是我做到了,但是我一直在客户端获得黑色框架(VoIP). 交流是这样的:android-> atterisk-> jitsi(osx)(和反向) 有一些我尚未理解的事情: 1)Android的Mediarecorder为我提供了原始的H264流,我怎么知道NAL何时基于该流进行/结束?它没有任何0x000001模式,但确实有0x0000(我假设是分隔符) 编辑: 添加更多信息.这些是2( first , second )输入缓冲区的不同读取(按顺序).如果我正确地知道,则应该使用前4个字节来获得nalu长度,而第5个字节(索引4)是nalu标题. 我将在此处复制字节值以将来用法: 1) 0 0 12 114 101 -72 4 25 -15 -1 -121 -53 ..... length = (114&0xFF)