Video and learning in WINUI3 + MAUI

Pirasath Luxchumykanthan 1 Reputation point

Hallo everyone..
I new to MAUI
But okay let me try.
Teach me if im wrong.

var cams= await DeviceInformation.FindAllAsync(DeviceClass.VideoCapture);
This is how i can get a list of cameras

make setting for MediaCapture
var MediaCaptureSettings = new MediaCaptureInitializationSettings() { VideoDeviceId = [Any cams id] };

Make a stream for MediaCapture
var RandomAccessStream = new InMemoryRandomAccessStream();
If you can explain me InMemoryRandomAccessStream will be nice.

MediaEncodingProfile mediaEncodingProfile = MediaEncodingProfile.CreateMp4(VideoEncodingQuality.Auto);

var mediaCapture = new MediaCapture();
await mediaCapture.InitializeAsync(MediaCaptureSettings );
await mediaCapture.StartRecordToStreamAsync(mediaEncodingProfile , RandomAccessStream );

Im lost.....

oka i made some samles from video but it only work when i made a bug.. in the code.
Any help out there.. that can explain me..?

Windows App SDK
Windows App SDK
A set of Microsoft open-source libraries, frameworks, components, and tools to be used in apps to access Windows platform functionality on many versions of Windows. Previously known as Project Reunion.
737 questions
A Microsoft open-source framework for building native device applications spanning mobile, tablet, and desktop.
3,061 questions
0 comments No comments
{count} votes

1 answer

Sort by: Most helpful
  1. Pirasath Luxchumykanthan 1 Reputation point

    namespace Camera.Software;
    public partial class Video
    public Video() => _ = Constructor();
    private async Task Constructor()
    Windows.Storage.StorageFolder storageFolder = Windows.Storage.ApplicationData.Current.LocalFolder;
    //choice .mp4 easy to work whit
    Windows.Storage.StorageFile sampleFile = await storageFolder.CreateFileAsync(Guid.NewGuid().ToString() + ".mp4");
    var b = await sampleFile.OpenStreamForWriteAsync();
    var c = await sampleFile.OpenStreamForReadAsync();
    //find video devices i can also find audio but i only choice to find video
    var videoCaptures = await DeviceInformation.FindAllAsync(DeviceClass.VideoCapture);
    //if i need Audio i can place it AudioDeviceId then i have audio to
    MediaCaptureInitializationSettings mediaCaptureSettings = new () { VideoDeviceId = videoCaptures.First().Id };
    //well as i say there many format i can work easy whit mp4
    var mediaEncodingProfile = MediaEncodingProfile.CreateMp4(VideoEncodingQuality.Auto);
    InMemoryRandomAccessStream inMemoryRandomAccessStream = new();
    MediaCapture mediaCapture = new();
    await mediaCapture.InitializeAsync(mediaCaptureSettings);
    await mediaCapture.StartRecordToStreamAsync(mediaEncodingProfile, inMemoryRandomAccessStream);
    //need to lower the sening to server so i dont send alot of data
    int LastPosition = 0;
    while (true) {
    using var memoryStream = new MemoryStream();
    //why send all to server
    var a = memoryStream.ToArray().Skip(LastPosition).ToArray();
    LastPosition += a.Count();
    //yes from her i can stream the data to what to ever server and so on
    if(a.Length> 0)
    await b.WriteAsync(a);
    //make sure not to limit the stream like small restart
    if (inMemoryRandomAccessStream.Position >= 2000000000)
    //yes a quick restart
    await mediaCapture.StopRecordAsync();
    LastPosition = 0;
    inMemoryRandomAccessStream = new();
    await mediaCapture.StartRecordToStreamAsync(mediaEncodingProfile, inMemoryRandomAccessStream);


    0 comments No comments