{"_id":"@amedellin85/react-native-video","name":"@amedellin85/react-native-video","dist-tags":{"latest":"6.3.0"},"versions":{"6.3.0":{"name":"@amedellin85/react-native-video","version":"6.3.0","description":"Custom fork of react-native-video","main":"lib/index","source":"src/index","react-native":"src/index","license":"MIT","author":{"name":"Adrian Medellin"},"homepage":"https://github.com/AdrianMedellinG/react-native-video#readme","repository":{"type":"git","url":"git+https://github.com/AdrianMedellinG/react-native-video.git"},"publishConfig":{"access":"public"},"resolutions":{"@types/react":"~18.0.0"},"devDependencies":{"@jamesacarr/eslint-formatter-github-actions":"^0.2.0","@react-native/eslint-config":"^0.72.2","@release-it/conventional-changelog":"^7.0.2","@types/jest":"^28.1.2","@types/react":"~18.0.0","@types/react-native":"0.72.3","@typescript-eslint/eslint-plugin":"^6.7.4","eslint":"^8.19.0","eslint-plugin-jest":"^27.4.2","jest":"^29.7.0","prettier":"^2.4.1","react":"18.2.0","react-native":"0.73.2","react-native-windows":"^0.61.0-0","release-it":"^16.2.1","typescript":"5.1.6"},"dependencies":{},"peerDependencies":{"react":"*","react-native":"*"},"scripts":{"lint":"eslint .","build":"tsc","prepare":"npm run build","xbasic":"yarn --cwd examples/basic","docs":"yarn --cwd docs build","release":"release-it","test":"echo no test available","check-ios":"scripts/swift-format.sh && scripts/swift-lint.sh && scripts/clang-format.sh","check-android":"scripts/kotlin-lint.sh","check-all":"yarn check-android; yarn check-ios; yarn lint","codegen":"node ./node_modules/react-native/scripts/generate-codegen-artifacts.js --path ./ ./output"},"gitHead":"c69117098bf486a938ec2d96ddf0d074f66dc35f","types":"./lib/index.d.ts","_id":"@amedellin85/react-native-video@6.3.0","bugs":{"url":"https://github.com/AdrianMedellinG/react-native-video/issues"},"_nodeVersion":"22.22.2","_npmVersion":"11.12.1","dist":{"integrity":"sha512-6Ia4ESNS+ADVWN/+xwC+ztXMK67XmZr4uEY35/x1XPZDMGQkh23r+j0siERyuiFjqTPjmJfiTnhkqX/0s0PbTA==","shasum":"8263854805c6bdaa0812604cf53d834eee8b52fa","tarball":"https://registry.npmjs.org/@amedellin85/react-native-video/-/react-native-video-6.3.0.tgz","fileCount":193,"unpackedSize":786581,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIGVBuioiqrnm2fDTw4lIjFer1TpbBX2uBwrxi1ZKRWWNAiAJXUpR8NBc0345VBIJCygk1p83J38DR3takUwv5LP8hA=="}]},"_npmUser":{"name":"amedellin85","email":"adrian.medellin.garcia@hotmail.com"},"directories":{},"maintainers":[{"name":"amedellin85","email":"adrian.medellin.garcia@hotmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/react-native-video_6.3.0_1785977331542_0.48184359023877343"},"_hasShrinkwrap":false}},"time":{"created":"2026-08-06T00:48:51.385Z","6.3.0":"2026-08-06T00:48:51.757Z","modified":"2026-08-06T00:48:51.995Z"},"maintainers":[{"name":"amedellin85","email":"adrian.medellin.garcia@hotmail.com"}],"description":"Custom fork of react-native-video","homepage":"https://github.com/AdrianMedellinG/react-native-video#readme","repository":{"type":"git","url":"git+https://github.com/AdrianMedellinG/react-native-video.git"},"author":{"name":"Adrian Medellin"},"bugs":{"url":"https://github.com/AdrianMedellinG/react-native-video/issues"},"license":"MIT","readme":"# react-native-video\r\n🎬 `<Video>` component for React Native\r\n\r\n## Documentation\r\ndocumentation is available at [thewidlarzgroup.github.io/react-native-video/](https://thewidlarzgroup.github.io/react-native-video/)\r\n\r\n## Usage\n\n```javascript\n// Load the module\r\n\r\nimport Video, {VideoRef} from 'react-native-video';\r\n\r\n// Within your render function, assuming you have a file called\r\n// \"background.mp4\" in your project. You can include multiple videos\r\n// on a single screen if you like.\r\n\r\nconst VideoPlayer = () => {\r\n const videoRef = useRef<VideoRef>(null);\r\n const background = require('./background.mp4');\r\n\r\n return (\r\n   <Video \r\n    // Can be a URL or a local file.\r\n    source={background}\r\n    // Store reference  \r\n    ref={videoRef}\r\n    // Callback when remote video is buffering                                      \r\n    onBuffer={onBuffer}\r\n    // Callback when video cannot be loaded              \r\n    onError={onError}               \r\n    style={styles.backgroundVideo}\r\n   />\r\n )\r\n}\r\n\r\n// Later on in your styles..\r\nvar styles = StyleSheet.create({\r\n  backgroundVideo: {\r\n    position: 'absolute',\r\n    top: 0,\r\n    left: 0,\r\n    bottom: 0,\r\n    right: 0,\r\n  },\r\n});\n```\n\n## Android MP2 audio support\n\nThis fork can enable MP2 / MPEG Layer II audio playback on Android by using\nExoPlayer's FFmpeg extension renderer path.\n\nMP2 support is not enabled by JavaScript props. Your `Video` source stays the\nsame:\n\n```tsx\n<Video\n  source={{\n    uri: 'https://example.com/live/playlist.m3u8',\n  }}\n  onError={onError}\n  style={styles.video}\n/>\n```\n\nThe Android app that consumes this fork must enable the FFmpeg renderer and add\na Media3 FFmpeg decoder extension.\n\n### 1. Enable the renderer in `android/build.gradle`\n\nIn the app-level React Native Android project, set `useExoplayerFfmpeg = true`\nin the root `android/build.gradle` `ext` block:\n\n```gradle\nbuildscript {\n  ext {\n    media3Version = \"1.2.1\"\n    useExoplayerFfmpeg = true\n\n    // Keep your existing react-native-video ExoPlayer flags as needed:\n    useExoplayerHls = true\n    useExoplayerDash = true\n    useExoplayerSmoothStreaming = true\n    useExoplayerRtsp = true\n  }\n}\n```\n\nWhen enabled, this fork configures ExoPlayer with\n`EXTENSION_RENDERER_MODE_PREFER`, so FFmpeg audio renderers are preferred when\navailable.\n\n### 2. Add an FFmpeg decoder to `android/app/build.gradle`\n\nThe app must package an FFmpeg decoder implementation. One tested option is the\nJellyfin Media3 FFmpeg decoder:\n\n```gradle\nandroid {\n  compileOptions {\n    coreLibraryDesugaringEnabled true\n  }\n}\n\ndependencies {\n  implementation \"org.jellyfin.media3:media3-ffmpeg-decoder:1.2.1+1\"\n  coreLibraryDesugaring \"com.android.tools:desugar_jdk_libs:2.0.4\"\n}\n```\n\nUse an FFmpeg decoder built for the same Media3 version your app uses. MP2 is\nhandled by FFmpeg's `mp3` decoder family, so custom FFmpeg builds must include\nthat decoder.\n\n### 3. Test with the included example\n\nThe example app has a test stream and a local MP2 asset configured in\n`examples/basic/src/VideoPlayer.tsx`.\n\n```powershell\ncd examples/basic/android\n.\\gradlew.bat :app:installRelease --no-daemon --console=plain\nadb shell am start -n com.videoplayer/.MainActivity\n```\n\nIf a debug build closes immediately on newer Android versions because of React\nNative DevSupport / Inspector, use `installRelease` for playback testing.\n\n### Notes\n\n- This MP2 path is Android-only.\n- iOS uses AVPlayer/AVFoundation and cannot be extended the same way from this\n  library alone.\n- The Jellyfin FFmpeg decoder is GPL-licensed. Review its license before using\n  it in a production app, or build/package your own Media3 FFmpeg extension.\n\n## Community support\nWe have an discord server where you can ask questions and get help. [Join the discord server](https://discord.gg/WXuM4Tgb9X)\n\r\n## Enterprise Support\r\n<p>\r\n  📱 <i>react-native-video</i> is provided <i>as it is</i>. For enterprise support or other business inquiries, <a href=\"https://www.thewidlarzgroup.com/\">please contact us 🤝</a>. We can help you with the integration, customization and maintenance. We are providing both free and commercial support for this project. let's build something awesome together! 🚀\r\n</p>\r\n<a href=\"https://www.thewidlarzgroup.com/\">\r\n  <picture>\r\n    <source media=\"(prefers-color-scheme: dark)\" srcset=\"./docs/assets/baners/twg-dark.png\" />\r\n    <source media=\"(prefers-color-scheme: light)\" srcset=\"./docs/assets/baners/twg-light.png\" />\r\n    <img alt=\"TheWidlarzGroup\" src=\"./docs/assets/baners/twg-light.png\" />\r\n  </picture>\r\n</a>\r\n","readmeFilename":"README.md","_rev":"1-d0753b7cc40288d787547993540b08ca"}