Rtp 协议实现网络广播台网络收音机

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;

        }

 

全部源码可有偿提供

转载于:https://www.cnblogs.com/gxh973121/p/3154016.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot本身并不支持RTP协议实现,因为RTP协议是一种实时传输协议,需要使用专用的实时音视频处理库来实现。但是,你可以使用Spring Boot作为应用程序框架,将RTP协议实现集成到你的应用程序中。 下面是一个基于Java的RTP协议实现的示例代码,你可以将其集成到Spring Boot应用程序中: ```java import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.util.Random; public class RTPPacket { private int headerLength; private byte[] header; private byte[] payload; public RTPPacket(byte[] data) { headerLength = 12; header = new byte[headerLength]; payload = new byte[data.length - headerLength]; System.arraycopy(data, 0, header, 0, headerLength); System.arraycopy(data, headerLength, payload, 0, payload.length); } public RTPPacket(int marker, int payloadType, int sequenceNumber, int timeStamp, byte[] data) { headerLength = 12; header = new byte[headerLength]; header[0] = (byte) ((marker << 7) | payloadType); header[1] = (byte) (sequenceNumber >> 8); header[2] = (byte) (sequenceNumber & 0xFF); header[3] = (byte) (timeStamp >> 24); header[4] = (byte) ((timeStamp >> 16) & 0xFF); header[5] = (byte) ((timeStamp >> 8) & 0xFF); header[6] = (byte) (timeStamp & 0xFF); header[7] = (byte) (new Random().nextInt() & 0xFF); header[8] = (byte) (new Random().nextInt() & 0xFF); header[9] = (byte) (new Random().nextInt() & 0xFF); header[10] = (byte) (new Random().nextInt() & 0xFF); header[11] = (byte) (new Random().nextInt() & 0xFF); payload = data; } public byte[] getHeader() { return header; } public byte[] getPayload() { return payload; } public byte[] getData() { byte[] data = new byte[headerLength + payload.length]; System.arraycopy(header, 0, data, 0, headerLength); System.arraycopy(payload, 0, data, headerLength, payload.length); return data; } public void send(DatagramSocket socket, InetAddress address, int port) throws Exception { DatagramPacket packet = new DatagramPacket(getData(), getData().length, address, port); socket.send(packet); } } ``` 以上是一个简单的RTP包类,它可以用于创建和发送RTP数据包。你可以在Spring Boot应用程序中使用这个类来实现RTP协议的功能。 你还需要实现一个接收RTP包的类,如下所示: ```java import java.net.DatagramPacket; import java.net.DatagramSocket; public class RTPReceiver { private DatagramSocket socket; public RTPReceiver(int port) throws Exception { socket = new DatagramSocket(port); } public RTPPacket receive() throws Exception { byte[] buffer = new byte[2048]; DatagramPacket packet = new DatagramPacket(buffer, buffer.length); socket.receive(packet); return new RTPPacket(packet.getData()); } } ``` 这个类可以用于从网络中接收RTP数据包。你可以在Spring Boot应用程序中使用这个类来接收RTP数据包。 最后,你需要一个RTP服务器类,如下所示: ```java import java.net.InetAddress; public class RTPServer { private RTPReceiver receiver; private InetAddress address; private int port; public RTPServer(RTPReceiver receiver, InetAddress address, int port) { this.receiver = receiver; this.address = address; this.port = port; } public void run() throws Exception { while (true) { RTPPacket packet = receiver.receive(); packet.send(new DatagramSocket(), address, port); } } } ``` 这个类可以用于将接收到的RTP数据包发送到指定的地址和端口。你可以在Spring Boot应用程序中使用这个类来实现RTP服务器的功能。 以上是一个基于Java的RTP协议实现的示例代码,你可以将其集成到Spring Boot应用程序中。但是请注意,这只是一个简单的示例,实际的RTP协议实现需要更多的工作和细节处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值