我有一个通过http传输视频和音频的DLink网络摄像头(DCS-932L)。使用NAudio播放(无效)音频流
视频是mjpeg(运动jpeg),而音频是单声道的16位PCM wav音频。
我可以读取显示视频流,但我遇到了音频问题。根据接收到的头文件,音频文件只有30秒长,但是由于相机连续发送数据(用wget进行检查),这是错误的。
NAudio,VLC,Windows媒体播放器等都在30秒后停止,因为wav标题说他们应该。任何人都知道如何让NAudio放弃流标题的长度属性?或者我可以使用的任何其他库处理这个问题?
我使用的代码今天起到30秒:
public void PlayWaveFromUrl(string url)
{
new Thread(delegate(object o)
{
var req = WebRequest.Create(url);
req.Credentials = GetCredential(url);
req.PreAuthenticate = true;
var response = req.GetResponse();
using (var stream = response.GetResponseStream())
{
byte[] buffer = new byte[65536]; // 64KB chunks
int read;
while ((read = stream.Read(buffer, 0, buffer.Length)) > 0)
{
var pos = ms.Position;
ms.Position = ms.Length;
ms.Write(buffer, 0, read);
ms.Position = pos;
}
}
}).Start();
// Pre-buffering some data to allow NAudio to start playing
while (ms.Length < 65536 * 10)
Thread.Sleep(1000);
ms.Position = 0;
using (WaveStream blockAlignedStream = new BlockAlignReductionStream(WaveFormatConversionStream.CreatePcmStream(new WaveFileReader(ms))))
{
using (WaveOut waveOut = new WaveOut(WaveCallbackInfo.FunctionCallback()))
{
waveOut.Init(blockAlignedStream);
waveOut.Play();
while (waveOut.PlaybackState == PlaybackState.Playing)
{
System.Threading.Thread.Sleep(100);
}
}
}
}