C#-Log4net 封装log类并自定义log存放路径

引用dll :  log4net.dll

 

接口类:ILogger.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace HCCD.Base.Comm.NewLogger
{
    /// <summary>
    /// 日志接口
    /// </summary>
    public interface ILogger
    {
        /// <summary>
        /// 调试日志输出
        /// </summary>
        /// <param name="msg">输出内容</param>
        void Debug(string msg);

        /// <summary>
        /// 调试日志输出
        /// </summary>
        /// <param name="msg">输出内容</param>
        /// <param name="ex">输出异常</param>
        void Debug(string msg, Exception ex);

        /// <summary>
        /// 信息日志输出
        /// </summary>
        /// <param name="msg">输出内容</param>
        void Info(string msg);

        /// <summary>
        /// 信息日志输出
        /// </summary>
        /// <param name="msg">输出内容</param>
        /// <param name="ex">输出异常</param>
        void Info(string msg, Exception ex);

        /// <summary>
        /// 警告日志输出
        /// </summary>
        /// <param name="msg">输出内容</param>
        void Warn(string msg);

        /// <summary>
        /// 警告日志输出
        /// </summary>
        /// <param name="msg">输出内容</param>
        /// <param name="ex">输出异常</param>
        void Warn(string msg, Exception ex);

        /// <summary>
        /// 错误日志输出
        /// </summary>
        /// <param name="msg">输出内容</param>
        void Error(string msg);

        /// <summary>
        /// 错误日志输出
        /// </summary>
        /// <param name="msg">输出内容</param>
        /// <param name="ex">输出异常</param>
        void Error(string msg, Exception ex);

        /// <summary>
        /// 致命日志输出
        /// </summary>
        /// <param name="msg">输出内容</param>
        void Fatal(string msg);

        /// <summary>
        /// 致命日志输出
        /// </summary>
        /// <param name="msg">输出内容</param>
        /// <param name="ex">输出异常</param>
        void Fatal(string msg, Exception ex);
    }
}

接口实现类:LogHelper.cs

GB28181是一种基于SIP协议的视频监控标准,它使用RTP协议传输音视频数据。G.711a是一种音频编解码标准,可以将模拟信号转换成数字信号。在GB28181中,音频数据需要使用G.711a进行编码,并使用RTP协议进行封装和传输。 以下是使用C#语言实现GB28181对G.711a RTP封装并发送的示例代码: ```csharp using System; using System.Net; using System.Net.Sockets; using System.Threading; namespace GB28181_G711a_RTP { class Program { static void Main(string[] args) { // 设置远程IP地址和端口号 IPAddress remoteIP = IPAddress.Parse("192.168.1.100"); int remotePort = 5000; // 创建UDP客户端 UdpClient udpClient = new UdpClient(); udpClient.Connect(remoteIP, remotePort); // 创建G.711a编码器 GC711aEncoder encoder = new GC711aEncoder(); // 读取音频数据 byte[] audioData = ReadAudioData(); // 将音频数据进行G.711a编码 byte[] encodedData = encoder.Encode(audioData); // 创建RTP包 RTPPacket packet = new RTPPacket(); packet.Version = 2; packet.Padding = false; packet.Extension = false; packet.CSRCCount = 0; packet.Marker = false; packet.PayloadType = 0; packet.SequenceNumber = 0; packet.Timestamp = 0; packet.SSRC = 0; packet.PayloadData = encodedData; // 将RTP包转换成字节数组 byte[] packetData = packet.ToBytes(); // 发送RTP包 udpClient.Send(packetData, packetData.Length); // 关闭UDP客户端 udpClient.Close(); } static byte[] ReadAudioData() { // 从麦克风或文件中读取音频数据 // ... } } // G.711a编码器 class GC711aEncoder { public byte[] Encode(byte[] data) { // 将模拟信号转换成数字信号 short[] samples = new short[data.Length / 2]; for (int i = 0; i < samples.Length; i++) { samples[i] = BitConverter.ToInt16(data, i * 2); } // 使用G.711a进行编码 byte[] encodedData = new byte[samples.Length]; for (int i = 0; i < samples.Length; i++) { encodedData[i] = MuLawEncoder.LinearToMuLawSample(samples[i]); } return encodedData; } } // RTP包 class RTPPacket { public int Version { get; set; } public bool Padding { get; set; } public bool Extension { get; set; } public int CSRCCount { get; set; } public bool Marker { get; set; } public int PayloadType { get; set; } public int SequenceNumber { get; set; } public uint Timestamp { get; set; } public uint SSRC { get; set; } public byte[] PayloadData { get; set; } public byte[] ToBytes() { byte[] data = new byte[12 + PayloadData.Length]; data[0] = (byte)((Version << 6) | (Padding ? 0x20 : 0x00) | (Extension ? 0x10 : 0x00) | CSRCCount); data[1] = (byte)((Marker ? 0x80 : 0x00) | PayloadType); data[2] = (byte)(SequenceNumber >> 8); data[3] = (byte)SequenceNumber; data[4] = (byte)(Timestamp >> 24); data[5] = (byte)(Timestamp >> 16); data[6] = (byte)(Timestamp >> 8); data[7] = (byte)Timestamp; data[8] = (byte)(SSRC >> 24); data[9] = (byte)(SSRC >> 16); data[10] = (byte)(SSRC >> 8); data[11] = (byte)SSRC; Array.Copy(PayloadData, 0, data, 12, PayloadData.Length); return data; } } // G.711a Mu-law 编码器 static class MuLawEncoder { public const int Mu = 255; public const int MuLawBias = 132; public static byte LinearToMuLawSample(short sample) { int sign = (sample >> 8) & 0x80; if (sign != 0) { sample = (short)-sample; } if (sample > Mu) { sample = Mu; } sample += MuLawBias; int exponent = (int)Math.Log(sample, 2); int mantissa = sample >> (exponent + 3); int index = (exponent << 4) | mantissa; if (sign != 0) { index = ~index; } return (byte)index; } } } ``` 上述示例代码中,首先创建UDP客户端,并设置远程IP地址和端口号。然后创建G.711a编码器,读取音频数据,并将音频数据进行G.711a编码。接着创建RTP包,并将G.711a编码后的数据作为RTP包的负载数据。最后将RTP包转换成字节数组,并使用UDP客户端发送到远程主机。 需要注意的是,以上示例代码只是一个简单的示例,实际应用中需要考虑更多的因素,例如网络延迟、丢包等问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值