ring_camera 0.1.5 copy "ring_camera: ^0.1.5" to clipboard
ring_camera: ^0.1.5 copied to clipboard

Flutter widgets for Ring camera streaming with full WebRTC support. View live video from Ring cameras in your Flutter app.

ring_camera #

pub package

Flutter companion package for ring_client_api providing full WebRTC video streaming support for Ring cameras.

This package extends the core ring_client_api with Flutter-specific implementations including live video streaming, two-way audio, and easy-to-use camera viewer widgets.

Features #

  • πŸ“Ή Live Video Streaming - Full WebRTC support with H.264 codec
  • 🎀 Two-Way Audio - Optional return audio for communication with visitors
  • πŸ“± Cross-Platform - Works on iOS, Android, Web, macOS, Windows, and Linux
  • 🎨 Ready-to-Use Widgets - Drop-in camera viewer components
  • πŸ”„ Automatic Connection Management - Handles WebRTC lifecycle automatically
  • πŸ“Έ Snapshot Viewer - Alternative to streaming for battery-powered cameras
  • ⚑ Performance Optimized - Efficient video rendering with flutter_webrtc

Installation #

Add both packages to your pubspec.yaml:

dependencies:
  ring_client_api: ^0.1.0
  ring_camera: ^0.1.0

Then run:

flutter pub get

Quick Start #

Basic Camera Viewer #

import 'package:flutter/material.dart';
import 'package:ring_camera/ring_camera.dart';

class CameraPage extends StatelessWidget {
  final RingCamera camera;

  const CameraPage({super.key, required this.camera});

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text(camera.name)),
      body: RingCameraViewer(
        camera: camera,
        onError: (error) => print('Error: $error'),
      ),
    );
  }
}

With Two-Way Audio #

RingCameraViewer(
  camera: camera,
  enableReturnAudio: true,  // Enable microphone
  showStatus: true,          // Show connection status
)

Snapshot Viewer (Battery-Friendly) #

RingCameraSnapshotViewer(
  camera: camera,
  refreshInterval: Duration(seconds: 10),
)

Examples #

The package includes three examples demonstrating different use cases:

Simple Examples #

Full Example #

  • camera_viewer - Complete app with camera list, live streaming, snapshots, and controls

Each example includes its own README with setup instructions.

Logging #

The package uses the logging package for internal diagnostics. By default, only INFO level and above messages are logged. To enable debug logging:

import 'package:logging/logging.dart';

// Enable debug logging
Logger.root.level = Level.ALL;
Logger.root.onRecord.listen((record) {
  print('${record.level.name}: ${record.time}: ${record.message}');
});

For production apps, the default INFO level is recommended.

Documentation #

Platform Configuration #

macOS #

Add network entitlements to both Debug and Release configurations:

macos/Runner/DebugProfile.entitlements

<key>com.apple.security.network.client</key>
<true/>
<key>com.apple.security.network.server</key>
<true/>

macos/Runner/Release.entitlements

<key>com.apple.security.network.client</key>
<true/>

If using two-way audio, also add microphone permission:

<key>com.apple.security.device.audio-input</key>
<true/>

iOS #

Add camera and microphone permissions to ios/Runner/Info.plist:

<key>NSCameraUsageDescription</key>
<string>This app requires camera access to display Ring camera video streams.</string>

<key>NSMicrophoneUsageDescription</key>
<string>This app requires microphone access to send audio during Ring camera calls.</string>

Android #

Add permissions to android/app/src/main/AndroidManifest.xml:

<!-- Permissions for Ring camera streaming -->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

<uses-feature android:name="android.hardware.camera" android:required="false" />
<uses-feature android:name="android.hardware.camera.autofocus" android:required="false" />

Note: The camera feature is marked as required="false" so the app can still be installed on devices without a camera (since you're viewing Ring cameras, not using the device's camera).

Web, Windows, Linux #

These platforms work out of the box with no additional configuration required.

Requirements #

  • Flutter 3.0 or later
  • Dart 3.0 or later
  • ring_client_api ^0.1.0
  • flutter_webrtc ^1.2.0

License #

MIT License - Copyright (c) 2025 Scott Horn

Based on the TypeScript ring-client-api by Dusty Greif.

1
likes
140
points
0
downloads

Publisher

verified publisherhornmicro.com

Weekly Downloads

Flutter widgets for Ring camera streaming with full WebRTC support. View live video from Ring cameras in your Flutter app.

Repository (GitHub)
View/report issues

Documentation

API reference

License

MIT (license)

Dependencies

flutter, flutter_webrtc, logging, ring_client_api, rxdart, uuid, web_socket_channel

More

Packages that depend on ring_camera