gxh973121

博客园 首页 新随笔 联系 订阅 管理

RTP协议介绍:http://www.360doc.com/content/11/1009/15/496343_154624612.shtml

本文中使用了 StreamCoders 的 RTP.net组件,此组件中有些和c++ 混合编程部分,我已将此组件转成全部c#代码

收听端代码

        RTPSession session;
        RTPReceiver receiver;
        RTPParticipant participant;

        WinSound.Player m_Player;
        public Form1()
        {
            InitializeComponent();
            m_Player = new WinSound.Player();
            List<String> names = WinSound.WinSound.GetPlaybackNames();
            m_Player.Open(names[0], 44100, 16, 2, 8);
        }

        private void btnListen_Click(object sender, EventArgs e)
        {
            IPAddress ipaddr;
            ushort usPort;

            if (!(IPAddress.TryParse(txtIp.Text, out ipaddr) && ushort.TryParse(txtPort.Text, out usPort)))
            {
                MessageBox.Show("IP地址或端口填写错误!");
                return;
            }
            session = new RTPSession();
            receiver = new RTPReceiver();
            IPEndPoint rtpEp = new IPEndPoint(ipaddr, usPort);

            participant = new RTPParticipant(rtpEp);
            session.NewRTPPacket = NewRTPPacket;
            session.NewRTCPPacket = NewRTCPPacket;
            receiver.AddParticipant(participant);
            session.AddReceiver(receiver);
        }

        bool NewRTPPacket(RTPPacket packet)
        {
            if (packet.DataPointer != null)
            {
                //Nach Linear umwandeln
                Byte[] linearBytes = WinSound.Utils.MuLawToLinear(packet.DataPointer, 16, 2);
                //Abspielen
                m_Player.PlayData(linearBytes, false);
            }
            return true;

        }

 

全部源码可有偿提供

posted on 2013-06-25 06:09  gxh973121  阅读(478)  评论(0编辑  收藏  举报