1
我想让我的MediaStreamSource在Windows Phone 7.1上运行。 对于像256 * 256或512 * 512这样的较小分辨率,它可以工作,但在某种分辨率下,它在我称为ReportOpenMediaCompleted后立即关闭。 我没有得到任何例外或诸如此类。WP7 RGBA MediaStreamSource立即关闭 - 高分辨率
这里是我的代码:
public class BitmapStreamSource : MediaStreamSource
{
MediaStreamDescription bitmapMediaStream;
const int width = 1024;
const int height = 1024;
protected override void OpenMediaAsync()
{
Dictionary<MediaSourceAttributesKeys, string> mediaStreamAttributes;
List<MediaStreamDescription> availableMediaStreams;
Dictionary<MediaStreamAttributeKeys, string> bitmapStreamAttributes;
mediaStreamAttributes = new Dictionary<MediaSourceAttributesKeys, string>(2);
mediaStreamAttributes[MediaSourceAttributesKeys.CanSeek] = false.ToString();
mediaStreamAttributes[MediaSourceAttributesKeys.Duration] = "-1";
bitmapStreamAttributes = new Dictionary<MediaStreamAttributeKeys,string>(3);
bitmapStreamAttributes[MediaStreamAttributeKeys.VideoFourCC]= "RGBA";
bitmapStreamAttributes[MediaStreamAttributeKeys.Width]= width.ToString();
bitmapStreamAttributes[MediaStreamAttributeKeys.Height] = height.ToString();
bitmapMediaStream = new MediaStreamDescription(MediaStreamType.Video, bitmapStreamAttributes);
availableMediaStreams = new List<MediaStreamDescription>(1);
availableMediaStreams.Add(bitmapMediaStream);
ReportOpenMediaCompleted(mediaStreamAttributes, availableMediaStreams);
}
protected override void SeekAsync(long seekToTime)
{
ReportSeekCompleted(seekToTime);
}
int sampleCount = 0;
protected override void GetSampleAsync(MediaStreamType mediaStreamType)
{
int pixel = width * height;
var buffer = new byte[pixel * 4];
for (int i = 0; i < pixel; i++)
{
byte value = (byte)((i + sampleCount) % 256);
var k = i * 4;
//buffer[k] = 255; // B
buffer[k + 1] = value; // G
buffer[k + 2] = 255; // R
//buffer[k + 3] = value; // A
}
var stream = new MemoryStream(buffer);
var keys = new Dictionary<MediaSampleAttributeKeys, string>();
var sample = new MediaStreamSample(bitmapMediaStream, stream, 0, buffer.Length, 0, keys);
sampleCount++;
ReportGetSampleCompleted(sample);
}
protected override void CloseMedia()
{
Debug.WriteLine("CloseMedia()");
}
protected override void GetDiagnosticAsync(MediaStreamSourceDiagnosticKind diagnosticKind)
{
throw new NotImplementedException();
}
protected override void SwitchMediaStreamAsync(MediaStreamDescription mediaStreamDescription)
{
throw new NotImplementedException();
}
}
这几乎回答了我的问题。我必须找到另一种方法将我的高分辨率内容呈现在屏幕上。 –