Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 解码RTP G.722有效载荷_C#_Rtp_Codec - Fatal编程技术网

C# 解码RTP G.722有效载荷

C# 解码RTP G.722有效载荷,c#,rtp,codec,C#,Rtp,Codec,我正在开发一个从RTP流检索音频的应用程序。我对G.711ULAW和ALaw没有问题,但我还必须处理G.722协议。 到目前为止,我还没能破译它。我尝试使用NAudio,它有一个编解码器,但没有运气。NAudio中的编解码器文档非常有限。 有人知道一个有文档或示例的像样的库如何做到这一点吗 如果该库包含其他编解码器,那就更好了 我的代码片段thusfar,使用NAudio。此代码针对160字节的每个数据包有效负载运行:如果有人可以发现错误或您有建议,请告诉我 case RtpPacket.Pay

我正在开发一个从RTP流检索音频的应用程序。我对G.711ULAW和ALaw没有问题,但我还必须处理G.722协议。 到目前为止,我还没能破译它。我尝试使用NAudio,它有一个编解码器,但没有运气。NAudio中的编解码器文档非常有限。 有人知道一个有文档或示例的像样的库如何做到这一点吗

如果该库包含其他编解码器,那就更好了

我的代码片段thusfar,使用NAudio。此代码针对160字节的每个数据包有效负载运行:如果有人可以发现错误或您有建议,请告诉我

case RtpPacket.PayloadTypes.G722:
    G722CodecState state = new G722CodecState(64000, G722Flags.None);   
    G722Codec codec = new G722Codec();

    var length = packet.Payload.Length;
    var outputBuffer = new short[length*4];
    int decoded = codec.Decode(state, outputBuffer, packet.Payload, length);

我现在使用的设置如下所示:

类变量:

    private readonly G722CodecState _g722CodecState = new G722CodecState(64000, G722Flags.SampleRate8000);
    private readonly G722Codec _g722Codec = new G722Codec();
在我的rtp检索功能中:

case RtpPacket.PayloadTypes.G722:
    var length = packet.Payload.Length;
    var outputBuffer = new short[length];
    int decoded = _g722Codec.Decode(_g722CodecState, outputBuffer, packet.Payload, length);

它就像一个符咒

你能给我看看sdp sip邀请吗?否则,尝试使用wireshark>电话>VoIP呼叫作为第一步来监听您的来电。如果没有问题,您可以确定您的INVITE with SIP协议没有问题,并且您收到了正确的负载,您可以进入下一步:编解码器我理解您的推理,但正如我所说,我有一个完整的运行应用程序,可以处理G.711。我只需要处理一些其他编解码器。我发现了一件事,现在回想起来,这是合乎逻辑的:我不再为每个数据包创建状态和编解码器对象,而是将这些对象用作类变量,它们在rtp流的持续时间内一直存在。不幸的是,NAudio缺少这方面的文档,尽管我喜欢这个库的功能。因此,如果有人能为我指出一个G.723和/或G.729的编解码器的方向,最好是免费的,这将对我帮助很大!一个可以处理G711的应用程序并不意味着它也可以处理G722的有效负载,这实际上取决于另一方。作为第一步,您需要使用正确的编解码器名称发送正确的sdp,另一方应该处理它。例如,您需要在SIP的Ok中发送如下“a=rtpmap:9 g722/16000”这样的“a”属性,以向另一方表示我希望使用g722作为编解码器。如果您收到一些RTP数据包,那么您应该能够在wireshark上收听您的数据包。如果您收到0个数据包,则表示另一方无法处理至少16000Hz速率的G722