Weave Code
Code Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Player Bundle Laravel Package

aldaflux/player-bundle

View on GitHub
Deep Wiki
Context7

Getting Started

Minimal Setup

  1. Installation

    composer require aldaflux/player-bundle dev-master
    

    Ensure your project uses Symfony 4.2+ or 5.0+ (as per composer.json).

  2. Enable the Bundle Add to config/bundles.php:

    return [
        // ...
        AldaFlux\PlayerBundle\AldaFluxPlayerBundle::class => ['all' => true],
    ];
    
  3. First Use Case: Basic Player Integration Inject the player service in a controller or service:

    use AldaFlux\PlayerBundle\Service\PlayerService;
    
    class MediaController extends AbstractController
    {
        public function __construct(private PlayerService $playerService) {}
    
        public function playMedia(string $mediaId): Response
        {
            $status = $this->playerService->play($mediaId);
            return new JsonResponse(['status' => $status]);
        }
    }
    
    • Key Files to Check:
      • src/Service/PlayerService.php (core logic).
      • config/packages/aldaflux_player.yaml (default config).

Implementation Patterns

Core Workflows

  1. Media Playback

    • Use PlayerService methods:
      $playerService->play($mediaId);       // Start playback
      $playerService->pause($mediaId);      // Pause
      $playerService->stop($mediaId);       // Stop
      $playerService->seek($mediaId, 120);  // Seek to 120s
      
    • Event-Driven Extensions: Listen for events like player.play, player.pause via Symfony’s event dispatcher:
      $dispatcher->addListener('player.play', function (PlayEvent $event) {
          // Custom logic (e.g., analytics, logging)
      });
      
  2. Configuration

    • Override defaults in config/packages/aldaflux_player.yaml:
      aldaflux_player:
          default_player: 'vjs'  # e.g., 'vjs' (Video.js), 'hls'
          media_root: '%kernel.project_dir%/public/media'
      
    • Dynamic Players: Register custom players via services:
      services:
          AldaFlux\PlayerBundle\Player\CustomPlayer:
              tags: ['aldaflux_player.player']
      
  3. Twig Integration Embed players in templates:

    {{ render(controller('AldaFluxPlayerBundle:Player:embed', {
        mediaId: 'movie123',
        player: 'vjs',
        options: { autoplay: true }
    })) }}
    

Integration Tips

  • APIs: Use PlayerService in API endpoints to control playback remotely.
  • Frontend: Pair with JavaScript players (e.g., Video.js) via Twig’s asset() for static assets.
  • Testing: Mock PlayerService in PHPUnit:
    $this->mockBuilder->getMockBuilder(PlayerService::class)
        ->disableOriginalConstructor()
        ->getMock();
    

Gotchas and Tips

Pitfalls

  1. Version Locking

    • The package is in dev-master; pin versions in composer.json to avoid breaking changes:
      "aldaflux/player-bundle": "dev-master#1234567890"
      
  2. Missing Events

    • Events like player.error may not be documented. Inspect EventDispatcher for available events:
      $events = $dispatcher->getListeners();
      
  3. Player Initialization

    • Ensure JavaScript dependencies (e.g., Video.js) are loaded before the player Twig template.

Debugging

  • Logs: Enable debug mode (APP_DEBUG=true) to see player service logs.
  • Network Tab: Check for 404s on media files (verify media_root config).
  • Symfony Profiler: Use the profiler to inspect PlayerService calls.

Extension Points

  1. Custom Players Implement PlayerInterface and tag as a service:

    class MyPlayer implements PlayerInterface {
        public function play(string $mediaId): bool { /* ... */ }
    }
    
    tags: ['aldaflux_player.player']
    
  2. Media Storage Extend MediaStorageInterface for custom storage (e.g., S3):

    class S3MediaStorage implements MediaStorageInterface {
        public function getUrl(string $mediaId): string { /* ... */ }
    }
    

    Register as a service and override aldaflux_player.media_storage config.

  3. Event Subscribers Create subscribers for player events:

    class PlayerAnalyticsSubscriber implements EventSubscriberInterface {
        public static function getSubscribedEvents(): array {
            return ['player.play' => 'onPlay'];
        }
        public function onPlay(PlayEvent $event) { /* ... */ }
    }
    

Config Quirks

  • Default Player: If no player is specified, the bundle uses the default_player config value.
  • Media IDs: Must be unique and match filenames in media_root (e.g., movie123.mp4mediaId: movie123).
Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
emuniq/filament-browser-notifications
syriable/filament-translator
hungnm28/livewire-form
wenprise/eloquent
crudly/encrypted
fadion/bouncy
cuci/prototurk-sdk
gos/pubsub-router-bundle
cuci/prototurk-sdk-symfony
clementtalleu/easyadmin-markdown-bundle
codeflextech/permission-manager
karnoweb/livewire-datepicker
sayedenam/sayed-dashboard
milito/query-filter
apiboxsym/user-bundle
apiboxsym/health-check-bundle
jayeshmepani/jpl-moshier-ephemeris-php
elnasnato/laraliveui
labrodev/rest-sdk
sampaui/sampaui