定制 theunwindfront/nativephp-audio 二次开发

按需修改功能、优化性能、对接业务系统,提供一站式技术支持

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

theunwindfront/nativephp-audio

最新稳定版本:1.2.2

Composer 安装命令:

composer require theunwindfront/nativephp-audio

包简介

Audio player plugin for NativePHP Mobile apps

README 文档

README

Latest Version on Packagist Total Downloads License

A premium NativePHP plugin for professional audio playback on mobile devices (Android & iOS). This plugin provides deep integration with native OS features like MediaSession, background services, and remote controls.

✨ Features

  • 🏆 Native Media Integration - Full support for OS Lock Screen controls, Bluetooth devices, and Android Auto/CarPlay.
  • 📱 Background Excellence - Reliable background playback using Foreground Services (Android) and specialized Audio Sessions (iOS).
  • 🎶 Advanced Playlist Management - Natively managed queues with Shuffle and Repeat modes.
  • 🎧 Audio Focus Intelligence - Gracefully handles interruptions (phone calls, notifications, Siri) with auto-ducking and resuming.
  • 🕒 Sleep Timers - Programmatic sleep timers that safely release native resources.
  • 📊 Detailed Analytics Events - Granular event reporting for playback progress, track changes, buffering, and remote commands.
  • 🖼 Rich Metadata - Support for high-quality artwork, titles, artists, and arbitrary custom metadata.

🚀 Installation

# Install via Composer
composer require theunwindfront/nativephp-audio

# Publish the plugins provider (if not already done)
php artisan vendor:publish --tag=nativephp-plugins-provider

# Register the plugin with NativePHP
php artisan native:plugin:register theunwindfront/nativephp-audio

📖 Usage

PHP Interface (Livewire / Controller)

use Theunwindfront\Audio\Facades\Audio;

// 1. Play a single track with metadata
Audio::play('https://example.com/song.mp3', [
    'title'    => 'Midnight City',
    'artist'   => 'M83',
    'artwork'  => 'https://example.com/artwork.jpg',
]);

// 2. Play a Local File (Mobile Storage)
// Raw paths from storage_path() are natively supported
Audio::play(storage_path('app/public/recordings/audio.mp3'), [
    'title'  => 'Voice Note',
    'artist' => 'Recorded Local'
]);

// 3. Manage a Playlist (Natively handled auto-advance)
Audio::setPlaylist([
    [
        'url'   => 'https://example.com/track1.mp3',
        'title' => 'Track 01',
    ],
    // ... more tracks
], autoPlay: true, startIndex: 0);

// 4. Playback Controls
Audio::pause();
Audio::resume();
Audio::next();
Audio::previous();
Audio::skipTo(5); // Skip to index 5 in playlist

// 5. State & Settings
$state = Audio::getState(); 
Audio::setVolume(0.8);
Audio::setPlaybackRate(1.5);
Audio::setShuffleMode(true);
Audio::setRepeatMode('all'); // 'none', 'one', 'all'

// 6. Sleep Timer
Audio::setSleepTimer(1800); // 30 minutes

⚡ JavaScript Bridge

If you are building a SPA (Inertia/Vue/React) or using Alpine.js, you can use the JavaScript bridge directly.

First, include the bridge in your layout:

@include('audio::bridge')

Then, use the audio helper:

import audio from './resources/js/audio.js';

// Play immediately
await audio.play('https://server.com/live.mp3', { title: 'Live Stream' });

// Listen for native events on the window
window.addEventListener('audio:playback-progress-updated', (event) => {
    const { position, duration } = event.detail;
    console.log(`Playing: ${position} / ${duration}`);
});

📡 Event Synchronization

This plugin dispatches powerful Laravel events that you can listen to in your application:

Event Description
PlaybackStarted Fired when audio actually begins playing.
PlaybackProgressUpdated Heartbeat event with position and duration.
PlaylistTrackChanged Fired on auto-advance or manual track skip.
AudioFocusLost Fired when another app takes over audio (e.g. phone call).
RemotePlayReceived Fired when the user hits 'Play' on headphones/lockscreen.
SleepTimerExpired Fired when the scheduled sleep timer hits zero.

🛠 Advanced Features

Background Sync

When your app returns from the background, you can "drain" any missed events that occurred while the PHP process was suspended:

$missedEvents = Audio::drainEvents();

Absolute Local Paths

Unlike standard web players, this plugin has direct filesystem access. On Android, it even requests READ_MEDIA_AUDIO permissions automatically.

Audio::play('/storage/emulated/0/Download/my-song.mp3');

📋 API Reference

Method Parameters Description
play string $url, array $options Play/Restart audio
load string $url, array $options Prepare audio without playing
setPlaylist array $tracks, bool $autoPlay, int $idx Set native queue
next / previous - Navigate playlist
skipTo int $index Jump to specific track
setVolume float $level (0.0 - 1.0) Set player volume
setPlaybackRate float $rate (0.25 - 4.0) Set playback speed
setSleepTimer int $seconds Schedule a shutdown
cancelSleepTimer - Stop the active timer
getState - Get full status object
getPlaylist - Get full playlist state
drainEvents - Get background events

📱 Version Support

  • Android: 5.0 (API 21) or higher.
  • iOS: 13.0 or higher.

👥 Credits

🤝 Support

For questions or issues, contact pansuriya.sagar94@gmail.com or open a GitHub Issue.

📄 License

The MIT License (MIT). Please see License File for more information.

统计信息

  • 总下载量: 15
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 7
  • 点击次数: 2
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 7
  • Watchers: 0
  • Forks: 3
  • 开发语言: Kotlin

其他信息

  • 授权协议: MIT
  • 更新时间: 2026-04-11

承接程序开发

PHP开发

VUE

Vue开发

前端开发

小程序开发

公众号开发

系统定制

数据库设计

云部署

网站建设

安全加固