c# java 哪个好 流媒体_C#Net7mma H264 / PCMU流媒体
我在創建一個包含音頻和視頻音頻和視頻的流時遇到問題 . 我正在為rtsp服務器使用net7mma庫 . 我正在播放視頻給wowza . 我得到了H264 / AVC視頻流和PCMU 44,1k采樣率視頻流 . 這就是我這樣做的方式:首先我創建媒體:
RFC6184Media newMedia = new RFC6184Media(704, 480, camName);
然后,當視頻幀出現時,我做:
var newFrame = new RFC6184Media.RFC6184Frame(96);
newFrame.Packetize(buff);
media.AddFrame(newFrame);
對于這個步驟一切正常,視頻看起來不錯 . 問題是當我想添加音頻時 . 從我的設備我收到 raw PCMU 8k 采樣率所以我需要使用NAudio庫重新采樣到44100:
var provider = new RawSourceWaveStream(new MemoryStream(buff), new WaveFormat(8000, 1));
provider.ToSampleProvider();
var outFormat = new WaveFormat(44100, provider.WaveFormat.Channels);
var resampler = new WaveFormatConversionStream(outFormat, provider);
MemoryStream memStr = new MemoryStream();
WaveFileWriter.CreateWaveFile("pcm", resampler);
var audioBytes = File.ReadAllBytes("pcm");
var newFrame = PacketizeBufer(audioBytes);
media.AddFrame(newFrame);
我的打包方法如下:
private RtpFrame PacketizeBufer(byte[] messageBuffer)
{
var newFrame = new RtpFrame(96);
int countOfArray = messageBuffer.Length / 1500;
if (messageBuffer.Length % 1500 > 0)
countOfArray++;
RtpPacket packet;
for (int i = 0; i < countOfArray; i++)
{
byte[] tempToSend = messageBuffer.Skip(i * 1500).Take(1500).ToArray();
if (i == countOfArray - 1)
{
packet = new RtpPacket(2, false, false, true, 0, 0, 0, i, 0, tempToSend);
newFrame.Add(packet);
break;
}
packet = new RtpPacket(2, false, false, false, 0, 0, 0, i, 0, tempToSend);
newFrame.Add(packet);
}
return newFrame;
}
SDP看起來像這樣:
v=0
o=ASTI-Media-Server 15943110217466738919 -2503633856242812693 IN IP4 [ip_addr]
s=ASTI-Streaming-Session-stream-name
a=sendonly
a=type:broadcast
a=rtpmap:0 PCMU/44100
a=fmtp:0 packetization-mode=1;profile-level-id=64001F;sprop-parameter-sets=Z0LAHtkDxWhAAAADAEAAAAwDxYuS,aMuMsg==
a=fmtp:96 packetization-mode=1;profile-level-id=64001F;sprop-parameter-sets=Z0LAHtkDxWhAAAADAEAAAAwDxYuS,aMuMsg==
m=video 0 RTP/AVP 96
a=rtpmap:96 H264/90000
a=control:/live/b8f38900-b1ba-4dda-b00c-2ccd6f847c61/video
m=audio 0 RTP/AVP 0
a=control:/live/b8f38900-b1ba-4dda-b00c-2ccd6f847c61/audio
Session=> 2359fd8e-f449-4db7-a19e-48ca78cc3422
關于這一點的奇怪之處在于,當我將視頻和音頻保存到一個文件時,它將無法正常工作 . 當我單獨保存視頻和音頻(視頻為h264,音頻為wav)視頻gest音頻時 .
總結
以上是生活随笔為你收集整理的c# java 哪个好 流媒体_C#Net7mma H264 / PCMU流媒体的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: hp电脑bootminu怎么进(hp笔记
- 下一篇: php 去除图片黑边,C#_c#扫描图片