public async Task OnStartPlayAsync(ServerSession publisher, RtmpStream stream) { if (publisher.MetaData.Length != 0) { var payload = publisher.MetaData; var header = new RtmpChunkHeader(RtmpChunkHeaderType.Type0, RtmpConstants.RtmpChannel_Data); var messageHeader = new RtmpMessageHeader(0, payload.Length, RtmpMessageType.DataAMF0, stream.Id); var message = new RtmpMessage(header, messageHeader, payload); await _session.SendMessageAsync(message); } if (publisher.AudioCodec?.CodecId == RtmpConstants.AacAudio) { var payload = publisher.AudioCodec.AacSequenceHeader; var header = new RtmpChunkHeader(RtmpChunkHeaderType.Type0, RtmpConstants.RtmpChannel_Audio); var messageHeader = new RtmpMessageHeader(0, payload.Length, RtmpMessageType.Audio, stream.Id); var message = new RtmpMessage(header, messageHeader, payload); await _session.SendMessageAsync(message); } if (publisher.VideoCodec?.CodecId == RtmpConstants.H264Video || publisher.VideoCodec?.CodecId == RtmpConstants.H265Video) { var payload = publisher.VideoCodec.AvcSequenceHeader; var header = new RtmpChunkHeader(RtmpChunkHeaderType.Type0, RtmpConstants.RtmpChannel_Video); var messageHeader = new RtmpMessageHeader(0, payload.Length, RtmpMessageType.Video, stream.Id); var message = new RtmpMessage(header, messageHeader, payload); await _session.SendMessageAsync(message); } if (publisher.RtmpGopCacheQueue != null) { foreach (var message in publisher.RtmpGopCacheQueue) { var modifiedMessage = new RtmpMessage( message.Header, message.Message.Translate(stream.Id), message.Payload); await _session.SendMessageAsync(modifiedMessage); } } _logger.LogInformation($@"[rtmp play] Join stream. id ={_session.Id} streamPath ={stream.Path} streamId ={stream.Id} "); }
public ServerDataProcessor(RtmpContext context, ServerSession session) { _context = context ?? throw new ArgumentNullException(nameof(context)); _session = session ?? throw new ArgumentNullException(nameof(session)); }
private async Task SendStartAsync(ServerSession publishser) { await _commandProcessor.OnStartPlayAsync(publishser, PlayStream); }
public async Task SendStopAsync(ServerSession publisher) { await _commandProcessor.OnStopPlayAsync(publisher, PlayStream); }