Transfer a video locally from an Android phone to Windows Desktop over TCP.

AthsVideoRecording App

A test app for the NuGet package: djaus2_MauiMediaRecorderVideoLib

Also uses Nuget Package: djaus2MauiCountdownToolkit , a .NET MAUI library for Android video recording using MediaRecorder with Camera Preview and Stabilization features.

This app is designed to record athletics finishes and then be sent to the following desktop app for processing: djaus2/PhotoTimingDjaus

About MauiMediaRecorderVideoLib

Nb: Video is stored /Movies folder. Filename is juxtaposed with date. Can optionally also optionally start time to the the video filename which this app can parse and use.

A .NET MAUI library for Android video recording using MediaRecorder with camera preview and stabilization features.

  • Several options for determining the event start time, wrt the video start time
  • Uses the CommunityToolkit.Maui.Camera for camera preview.

TimeFromMode property

For VideoRecorderService to allow for different ways of determining the start time of the event.

  • Appends a text string for TimeFromMode to the video filename.
  • AthStitcher app uses this to determine the start time of the event and parse it to the video file Title property, removing that text from the filename.
  • For WallClock mode, the gun time is also appended that AthStitcher parses to gun WallClock time and sets as Video file Comment property, also removing that text from the filename.
  • Note: Gun only shows if TimeFromMode is set to WallClock when ready to record.
    • Can be pressed before or during video recording.
  • 2Do Insert those properties in the capture library so that the video file has those properties set.
  • Text appended: (Note: _ is added before and after each text string:
          TimeFromMode.FromVideoStart => "VIDEOSTART",
          TimeFromMode.FromGunSound => "GUNSOUND",
          TimeFromMode.FromGunFlash => "GUNFLASH",
          TimeFromMode.ManuallySelect => "MANUAL",
          TimeFromMode.WallClockSelect => "WALLCLOCK"
    

In TimeFromMode WallClockSelect

  • The following features only show in this mode.
  • Can auto start video recording after a period
    • 3 Modes for that:
      • Soft: Just handled by _VideoKapture as UI less delay
        • Can be cancelled by pressing video start (white) button.
        • ATM it does this delay in both packages. 2Do
      • Red and Rainbow: A popup with Cancel button
        • Red: Popup border is Red. 2Do make color selectable
        • Rainbow: Rainbow border, as below. Nice!
    • There is a start gun icon. Race times are wrt to this.
      Countdown Popup
  • Found that it works in Release mode if AOT is disabled!
    Both Bundle AND APK builds

    Bundle-No AOT config here for Release config.

The AthsVideoRecording Test App (here)

Clone this repository, build and deploy to an Android phone.
(Was tested on a Pixel 6 phone)

Change the UI as you wish.


About the library

The library is being developed to record athletics finishes and then be sent to the following desktop app for processing: djaus2/PhotoTimingDjaus

Features

  • Full-screen camera preview
  • Video recording with MediaRecorder
    • No audio recording
      • Except in Gun Mode
  • Image stabilization options (Standard or Locked)
  • Camera rotation support (0, 90, 180, 270 degrees)
  • Configurable video FPS (30, 60, or default)
    • Note for 60 FPS with Google Pixel phone need to:
      • Camera Settings
      • Advanced
      • Turn off Store videos efficiently
      • Probably best to do that for 30 FPS as well otherwise get dynamic FPS
  • Support for pausing and resuming recording
  • Proper handling of Android permissions
  • Screen dimensions detection for optimal preview

Usage with a MAUI Android Phone App

Installation

Start by creating a new .NET MAUI project or using an existing one.

Install the package via NuGet:

dotnet add package MauiMediaRecorderVideoLib

Also need to install the following NuGet package:

dotnet add package CommunityToolkit.Maui.Camera

Nb: CommunityToolkit.Maui.Camera is in the library but needs a reference in the App as it uses the Toolkit Preview.

Basic Setup

  1. Add the required permissions to your Android Manifest:
<uses-permission android:name="android.permission.CAMERA" />

Note: In app Android//MainActivity calls permissions setup via static method in library that iterates through in-app Android/Manifest permissions.

  1. Initialize the video recorder service:
  using MauiMediaRecorderVideoLib;

// Initialize the service
var videoRecorderService = new AndroidVideoRecorderService();
await videoRecorderService.InitializeAsync();
  1. Start the camera preview:
    // Assuming you have a GraphicsView named 'cameraPreview' in your XAML
    videoRecorderService.SetPreviewSurface(cameraPreview);
    
  2. Start recording:
// Configure recording options
videoRecorderService.SetVideoFPS(30); // Optional: Set FPS
videoRecorderService.SetImageStabilization(StabilizationMode.Locked); // Optional: Set stabilization

// Start recording

string outputFilePath = Path.Combine(FileSystem.CacheDirectory, "myVideo.mp4");
await videoRecorderService.StartRecordingAsync(outputFilePath);
  1. Control recording: ```csharp // Pause recording await videoRecorderService.PauseRecordingAsync();

// Resume recording await videoRecorderService.ResumeRecordingAsync();

// Stop recording await videoRecorderService.StopRecordingAsync();

 6. Clean up resources:
 ```csharp
 // Release resources when done
await videoRecorderService.CleanupAsync();

Requirements

  • .NET MAUI project targeting Android
  • Android API level 21 or higher
  • Requires Android device with camera


 TopicSubtopic
   
 This Category Links 
Category:Application Dev Index:Application Dev
<  Prev:   Photo Finish Update