{"_id":"@abdurrahman-dev/react-native-ivs-broadcast","_rev":"21-f47ebe5acb7e323583c8b575380c008e","name":"@abdurrahman-dev/react-native-ivs-broadcast","dist-tags":{"latest":"0.2.7"},"versions":{"0.2.5":{"name":"@abdurrahman-dev/react-native-ivs-broadcast","version":"0.2.5","keywords":["react-native","amazon-ivs","ivs-broadcast","video-streaming","broadcast","aws","live-streaming","rtmp"],"author":{"name":"Abdurrahman"},"license":"MIT","_id":"@abdurrahman-dev/react-native-ivs-broadcast@0.2.5","maintainers":[{"name":"abdurrahman-dev","email":"abdur.caglar@gmail.com"}],"homepage":"https://github.com/abdurrahman-dev/react-native-ivs-broadcast#readme","bugs":{"url":"https://github.com/abdurrahman-dev/react-native-ivs-broadcast/issues"},"dist":{"shasum":"a1f641bc456fda985c01ee2f62cf035abe7b4705","tarball":"https://registry.npmjs.org/@abdurrahman-dev/react-native-ivs-broadcast/-/react-native-ivs-broadcast-0.2.5.tgz","fileCount":30,"integrity":"sha512-lYZxAcn3VXJMbM/AIItZPrI81QpjeUItbR4InPBXYwc3atTPEOaFs4cPtKfpV6VUfXDfXw9QXCidUg1rgX+Q9A==","signatures":[{"sig":"MEYCIQCNr3vvh9RBxmy2mBORCMEGO9MOiA5d6c6/UUJWsaqSRgIhAOMN9XASgVXY6+58xKnqi8rwaV1kbS1eKraeQYZIpUum","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":114437},"main":"lib/index.js","types":"lib/index.d.ts","source":"src/index.ts","engines":{"node":">=16.0.0"},"gitHead":"84c38e46c1e1dc62fbf9b1ae6941ac9261d5caec","scripts":{"lint":"eslint . --ext .ts,.tsx","build":"tsc","clean":"rm -rf lib","prepare":"npm run build"},"_npmUser":{"name":"abdurrahman-dev","email":"abdur.caglar@gmail.com"},"repository":{"url":"git+https://github.com/abdurrahman-dev/react-native-ivs-broadcast.git","type":"git"},"_npmVersion":"11.6.2","description":"React Native bridge for Amazon IVS Broadcast SDK (Android 1.37.1, iOS 1.37.0)","directories":{},"_nodeVersion":"24.12.0","dependencies":{},"react-native":"src/index.ts","_hasShrinkwrap":false,"devDependencies":{"eslint":"^8.0.0","typescript":"^5.0.0","@types/react":"^19.0.0","@types/react-native":"^0.72.8","@typescript-eslint/parser":"^5.0.0","amazon-ivs-react-native-player":"^1.5.0","@typescript-eslint/eslint-plugin":"^5.0.0"},"peerDependencies":{"react":">=16.8.0","react-native":">=0.60.0"},"_npmOperationalInternal":{"tmp":"tmp/react-native-ivs-broadcast_0.2.5_1767276508570_0.1513690569011279","host":"s3://npm-registry-packages-npm-production"}},"0.2.6":{"name":"@abdurrahman-dev/react-native-ivs-broadcast","version":"0.2.6","keywords":["react-native","amazon-ivs","ivs-broadcast","video-streaming","broadcast","aws","live-streaming","rtmp"],"author":{"name":"Abdurrahman"},"license":"MIT","_id":"@abdurrahman-dev/react-native-ivs-broadcast@0.2.6","maintainers":[{"name":"abdurrahman-dev","email":"abdur.caglar@gmail.com"}],"homepage":"https://github.com/abdurrahman-dev/react-native-ivs-broadcast#readme","bugs":{"url":"https://github.com/abdurrahman-dev/react-native-ivs-broadcast/issues"},"dist":{"shasum":"da4e71eed75f51de54221c184ddb955299336a14","tarball":"https://registry.npmjs.org/@abdurrahman-dev/react-native-ivs-broadcast/-/react-native-ivs-broadcast-0.2.6.tgz","fileCount":30,"integrity":"sha512-lUtv1SziAcVhTWqfzrGOuzD62B6xomEtqDaIuS/F9QlcLB0OECErgn5hK69Aozgh5l+pjrBhGy+aomlF6Hz1AQ==","signatures":[{"sig":"MEQCIEQHyLRgAY3garCDLvYxZJbPcsPBTszaTSn0iOxiHDKSAiAGcfyE1FZ0frwu5LTclEn8ReFsOd+Pu6ihVk6bGEKKXw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":185113},"main":"lib/index.js","types":"lib/index.d.ts","source":"src/index.ts","engines":{"node":">=16.0.0"},"gitHead":"3d3ef0f062eaa6fe049fb33ed72e2e5e65d2874c","scripts":{"lint":"eslint . --ext .ts,.tsx","build":"tsc","clean":"rm -rf lib","prepare":"npm run build"},"_npmUser":{"name":"abdurrahman-dev","email":"abdur.caglar@gmail.com"},"repository":{"url":"git+https://github.com/abdurrahman-dev/react-native-ivs-broadcast.git","type":"git"},"_npmVersion":"11.6.2","description":"React Native bridge for Amazon IVS Broadcast SDK (Android 1.37.1, iOS 1.37.0)","directories":{},"_nodeVersion":"24.12.0","dependencies":{},"react-native":"src/index.ts","_hasShrinkwrap":false,"devDependencies":{"eslint":"^8.0.0","typescript":"^5.0.0","@types/react":"^19.0.0","@types/react-native":"^0.72.8","@typescript-eslint/parser":"^5.0.0","amazon-ivs-react-native-player":"^1.5.0","@typescript-eslint/eslint-plugin":"^5.0.0"},"peerDependencies":{"react":">=16.8.0","react-native":">=0.60.0"},"_npmOperationalInternal":{"tmp":"tmp/react-native-ivs-broadcast_0.2.6_1767281034541_0.35728504907903735","host":"s3://npm-registry-packages-npm-production"}},"0.2.7":{"name":"@abdurrahman-dev/react-native-ivs-broadcast","version":"0.2.7","description":"React Native bridge for Amazon IVS Broadcast SDK (Android 1.37.1, iOS 1.37.0)","main":"lib/index.js","types":"lib/index.d.ts","react-native":"src/index.ts","source":"src/index.ts","scripts":{"build":"tsc","prepare":"npm run build","lint":"eslint . --ext .ts,.tsx","clean":"rm -rf lib"},"keywords":["react-native","amazon-ivs","ivs-broadcast","video-streaming","broadcast","aws","live-streaming","rtmp"],"author":{"name":"Abdurrahman"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/abdurrahman-dev/react-native-ivs-broadcast.git"},"bugs":{"url":"https://github.com/abdurrahman-dev/react-native-ivs-broadcast/issues"},"homepage":"https://github.com/abdurrahman-dev/react-native-ivs-broadcast#readme","peerDependencies":{"react":">=16.8.0","react-native":">=0.60.0"},"devDependencies":{"@types/react":"^19.0.0","@types/react-native":"^0.72.8","@typescript-eslint/eslint-plugin":"^5.0.0","@typescript-eslint/parser":"^5.0.0","amazon-ivs-react-native-player":"^1.5.0","eslint":"^8.0.0","typescript":"^5.0.0"},"engines":{"node":">=16.0.0"},"dependencies":{},"gitHead":"3d3ef0f062eaa6fe049fb33ed72e2e5e65d2874c","_id":"@abdurrahman-dev/react-native-ivs-broadcast@0.2.7","_nodeVersion":"24.12.0","_npmVersion":"11.6.2","dist":{"integrity":"sha512-Re/v1IHM9dhYeZUPFwSWmPLslEq1U6zhS/0/kywk821CSJ/kEHlscGclbK5Em9utMwQklFh6hprcD1VhAqN2Ig==","shasum":"2edcb3b4b748783d53a67f51e48d697b2c5c104b","tarball":"https://registry.npmjs.org/@abdurrahman-dev/react-native-ivs-broadcast/-/react-native-ivs-broadcast-0.2.7.tgz","fileCount":30,"unpackedSize":185277,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCr2Sku/DkW46D2k0auIc2u8FetdTJNJMXFd8I6byIcrwIhAMBh2yYUrCDw1UKd1EAy3sOtzK+PVHBOSG3m49Ag4KUo"}]},"_npmUser":{"name":"abdurrahman-dev","email":"abdur.caglar@gmail.com"},"directories":{},"maintainers":[{"name":"abdurrahman-dev","email":"abdur.caglar@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/react-native-ivs-broadcast_0.2.7_1767283993550_0.9811709982503574"},"_hasShrinkwrap":false}},"time":{"created":"2025-12-26T15:33:01.010Z","modified":"2026-01-01T16:13:13.908Z","0.1.0":"2025-12-26T15:33:01.279Z","0.1.1":"2025-12-26T15:41:44.639Z","0.1.2":"2025-12-26T15:47:42.605Z","0.1.3":"2025-12-26T16:14:28.567Z","0.2.0":"2025-12-31T16:34:20.575Z","0.2.1":"2026-01-01T11:38:01.554Z","0.2.2":"2026-01-01T11:59:23.045Z","0.2.3":"2026-01-01T13:41:09.480Z","0.2.4":"2026-01-01T13:50:51.622Z","0.2.5":"2026-01-01T14:08:28.754Z","0.2.6":"2026-01-01T15:23:54.699Z","0.2.7":"2026-01-01T16:13:13.689Z"},"bugs":{"url":"https://github.com/abdurrahman-dev/react-native-ivs-broadcast/issues"},"author":{"name":"Abdurrahman"},"license":"MIT","homepage":"https://github.com/abdurrahman-dev/react-native-ivs-broadcast#readme","keywords":["react-native","amazon-ivs","ivs-broadcast","video-streaming","broadcast","aws","live-streaming","rtmp"],"repository":{"type":"git","url":"git+https://github.com/abdurrahman-dev/react-native-ivs-broadcast.git"},"description":"React Native bridge for Amazon IVS Broadcast SDK (Android 1.37.1, iOS 1.37.0)","maintainers":[{"name":"abdurrahman-dev","email":"abdur.caglar@gmail.com"}],"readme":"# @abdurrahman-dev/react-native-ivs-broadcast\n\nReact Native için Amazon IVS Broadcast SDK köprü paketi. Canlı yayın başlatma, kamera önizleme ve yayın kontrolü için kullanılır.\n\n## Özellikler\n\n### Temel Özellikler\n- ✅ Broadcast başlatma/durdurma\n- ✅ Kamera önizleme component'i\n- ✅ Kamera kontrolü (ön/arka değiştirme)\n- ✅ Mikrofon kontrolü\n- ✅ Video ve ses konfigürasyonu\n- ✅ Event-based API\n\n### Gelişmiş Özellikler\n- ✅ Kamera zoom kontrolü\n- ✅ Flaş (torch) kontrolü\n- ✅ Ses gain ayarı (0.0 - 2.0)\n- ✅ Cihaz listeleme (kullanılabilir ve bağlı cihazlar)\n- ✅ Kamera yetenekleri sorgulama\n- ✅ Zamanlı metadata gönderme\n- ✅ Gelişmiş istatistikler (transmission stats)\n- ✅ Ses cihazı istatistikleri (peak, RMS)\n- ✅ Picture-in-Picture (PiP) desteği (iOS 15+, Android 8.0+)\n\n## Kurulum\n\n```bash\nnpm install @abdurrahman-dev/react-native-ivs-broadcast\n# veya\nyarn add @abdurrahman-dev/react-native-ivs-broadcast\n```\n\n### Android\n\n`android/app/build.gradle` dosyanıza ekleyin:\n\n```gradle\ndependencies {\n    implementation 'com.amazonaws:ivs-broadcast:1.37.1'\n}\n```\n\n`android/build.gradle` dosyanıza `mavenCentral()` repository'sini ekleyin.\n\n### iOS\n\nPaket **otomatik olarak** `AmazonIVSBroadcast` pod'unu dependency olarak ekler. React Native autolinking mekanizması (`react-native.config.js`) podspec'i otomatik bulur ve bağımlılıkları ekler.\n\n**Kurulum:**\n\n```bash\ncd ios\npod install\ncd ..\n```\n\n**Expo Projeleri İçin:**\n\n**Önemli:** Expo-modules-autolinking bazen React Native paketlerini bulamayabilir. Bu durumda `ios/Podfile` dosyanıza **manuel olarak** eklemeniz gerekir:\n\n```ruby\ntarget 'YourApp' do\n  use_expo_modules!\n  \n  config = use_native_modules!(config_command)\n  \n  # IVSBroadcast paketini manuel olarak ekle\n  # Expo-modules-autolinking bazen React Native paketlerini bulamayabiliyor\n  pod 'IVSBroadcast', :path => '../node_modules/@abdurrahman-dev/react-native-ivs-broadcast/ios'\n  \n  # ... diğer kodlar ...\nend\n```\n\n**Neden Manuel Ekleme Gerekli?**\n\nExpo-modules-autolinking şu şekilde çalışır:\n1. `expo-modules-autolinking react-native-config` komutunu çalıştırır\n2. React Native'in autolinking mekanizmasını kullanır\n3. Ancak bazı React Native paketlerini filtreleyebilir veya bulamayabilir\n\nBu yüzden manuel ekleme gerekebilir.\n\n**Kurulum:**\n\n```bash\n# iOS için\ncd ios\npod install\ncd ..\nnpx expo run:ios\n\n# Android için\nnpx expo run:android\n```\n\n**Alternatif Çözüm:**\n\nEğer React Native'in doğrudan autolinking'ini kullanmak isterseniz:\n\n```bash\nEXPO_USE_COMMUNITY_AUTOLINKING=1 npx expo run:ios\n```\n\n**Önemli:** Native modüller sadece development build'de çalışır. Expo Go'da çalışmazlar.\n\n**Sorun yaşıyorsanız:**\n\n1. Podfile'ınızın en üstünde CocoaPods source'unun olduğundan emin olun:\n```ruby\nsource 'https://cdn.cocoapods.org/'\n```\n\n2. Pod cache'ini temizleyin:\n```bash\ncd ios\nrm -rf Pods Podfile.lock\npod cache clean --all\npod install --repo-update\ncd ..\n```\n\n3. Xcode'u kapatıp tekrar açın\n\n`Info.plist` dosyanıza kamera ve mikrofon izinlerini ekleyin:\n\n```xml\n<key>NSCameraUsageDescription</key>\n<string>Kamerayı kullanmak için izin gerekiyor</string>\n<key>NSMicrophoneUsageDescription</key>\n<string>Mikrofonu kullanmak için izin gerekiyor</string>\n```\n\n## Kullanım\n\n### Temel Örnek\n\n```typescript\nimport IVSBroadcast, { PreviewView } from '@abdurrahman-dev/react-native-ivs-broadcast';\nimport { useState, useEffect } from 'react';\nimport { View, Button, StyleSheet } from 'react-native';\n\nfunction BroadcastScreen() {\n  const [sessionId, setSessionId] = useState<string>();\n  const [isBroadcasting, setIsBroadcasting] = useState(false);\n\n  useEffect(() => {\n    // Session oluştur\n    const initSession = async () => {\n      const session = await IVSBroadcast.createSession({\n        rtmpUrl: 'rtmp://your-stream-url.com',\n        streamKey: 'your-stream-key',\n        videoConfig: {\n          width: 1280,\n          height: 720,\n          bitrate: 2500000,\n          fps: 30,\n        },\n      });\n      setSessionId(session.sessionId);\n    };\n\n    initSession();\n\n    // Event listener'ları ekle\n    const cleanup = IVSBroadcast.addListener('onStateChanged', (state) => {\n      setIsBroadcasting(state.isBroadcasting);\n    });\n\n    return () => {\n      cleanup();\n      if (sessionId) {\n        IVSBroadcast.destroySession(sessionId);\n      }\n    };\n  }, []);\n\n  return (\n    <View style={styles.container}>\n      <PreviewView\n        sessionId={sessionId}\n        aspectMode=\"fill\"\n        isMirrored={true}\n        style={styles.preview}\n      />\n      \n      <Button\n        title={isBroadcasting ? 'Durdur' : 'Başlat'}\n        onPress={() => {\n          if (sessionId) {\n            isBroadcasting\n              ? IVSBroadcast.stopBroadcast(sessionId)\n              : IVSBroadcast.startBroadcast(sessionId);\n          }\n        }}\n      />\n    </View>\n  );\n}\n```\n\n### PreviewView Component\n\n```typescript\n<PreviewView\n  sessionId={sessionId}      // Zorunlu\n  aspectMode=\"fill\"          // 'fit' veya 'fill' (varsayılan: 'fill')\n  isMirrored={true}          // Aynalama (varsayılan: true)\n  style={{ flex: 1 }}\n/>\n```\n\n## API\n\n### Session Yönetimi\n\n```typescript\n// Session oluştur\nconst session = await IVSBroadcast.createSession({\n  rtmpUrl: 'rtmp://...',\n  streamKey: '...',\n  videoConfig: { width: 1280, height: 720, bitrate: 2500000, fps: 30 },\n  audioConfig: { bitrate: 128000, sampleRate: 44100 },\n});\n\n// Yayını başlat/durdur\nawait IVSBroadcast.startBroadcast(sessionId);\nawait IVSBroadcast.stopBroadcast(sessionId);\n\n// Session'ı yok et\nawait IVSBroadcast.destroySession(sessionId);\n```\n\n### Kamera Kontrolü\n\n```typescript\n// Kamera değiştir (front/back arasında)\nawait IVSBroadcast.switchCamera(sessionId);\n\n// Kamera pozisyonu ayarla\nawait IVSBroadcast.setCameraPosition(sessionId, 'front');\nawait IVSBroadcast.setCameraPosition(sessionId, 'back');\n\n// Kamera listesinden belirli bir kamerayı seç\nconst devices = await IVSBroadcast.listAvailableDevices();\nconst cameras = devices.filter(d => d.type === 'camera');\n\n// İstediğiniz kamerayı seçin\nawait IVSBroadcast.selectCamera(sessionId, cameras[0].deviceId);\n```\n\n### Mikrofon Kontrolü\n\n```typescript\n// Mikrofonu sessize al/aç\nawait IVSBroadcast.setMuted(sessionId, true);\nawait IVSBroadcast.setMuted(sessionId, false);\n\n// Mikrofon durumunu kontrol et\nconst isMuted = await IVSBroadcast.isMuted(sessionId);\n\n// Ses gain ayarla (0.0 = sessiz, 1.0 = normal, 2.0 = amplify)\nawait IVSBroadcast.setAudioGain(sessionId, 1.5);\n\n// Mevcut gain seviyesini al\nconst gain = await IVSBroadcast.getAudioGain(sessionId);\n\n// Mikrofon listesinden belirli bir mikrofonu seç\nconst devices = await IVSBroadcast.listAvailableDevices();\nconst microphones = devices.filter(d => d.type === 'microphone');\n\n// İstediğiniz mikrofonu seçin\nawait IVSBroadcast.selectMicrophone(sessionId, microphones[0].deviceId);\n```\n\n### Gelişmiş Kamera Kontrolü\n\n```typescript\n// Zoom seviyesi ayarla\nawait IVSBroadcast.setCameraZoom(sessionId, 2.0);\n\n// Flaşı aç/kapat\nawait IVSBroadcast.setTorchEnabled(sessionId, true);\n\n// Kamera yeteneklerini al\nconst capabilities = await IVSBroadcast.getCameraCapabilities(sessionId);\nconsole.log('Min zoom:', capabilities.minZoomFactor);\nconsole.log('Max zoom:', capabilities.maxZoomFactor);\nconsole.log('Torch supported:', capabilities.isTorchSupported);\n```\n\n### Cihaz Yönetimi\n\n```typescript\n// Kullanılabilir cihazları listele\nconst availableDevices = await IVSBroadcast.listAvailableDevices();\navailableDevices.forEach(device => {\n  console.log(`${device.type}: ${device.friendlyName}`);\n});\n\n// Bağlı cihazları listele\nconst attachedDevices = await IVSBroadcast.listAttachedDevices(sessionId);\n```\n\n### Zamanlı Metadata\n\n```typescript\n// Yayına senkronize metadata gönder\nawait IVSBroadcast.sendTimedMetadata(sessionId, JSON.stringify({\n  timestamp: Date.now(),\n  customData: 'your data'\n}));\n```\n\n### Event Listener'lar\n\n```typescript\n// Durum değişiklikleri\nIVSBroadcast.addListener('onStateChanged', (state) => {\n  console.log('Broadcasting:', state.isBroadcasting);\n});\n\n// Hata yönetimi\nIVSBroadcast.addListener('onError', (error) => {\n  console.error('Error:', error.message);\n});\n\n// Network sağlık durumu (iOS)\nIVSBroadcast.addListener('onNetworkHealth', (health) => {\n  console.log('Quality:', health.networkQuality);\n});\n\n// İstatistikler\nIVSBroadcast.addListener('onAudioStats', (stats) => {\n  console.log('Audio bitrate:', stats.bitrate);\n});\n\nIVSBroadcast.addListener('onVideoStats', (stats) => {\n  console.log('Video bitrate:', stats.bitrate, 'FPS:', stats.fps);\n});\n\n// Gelişmiş istatistikler (transmission stats)\nIVSBroadcast.addListener('onTransmissionStatistics', (stats) => {\n  console.log('Measured bitrate:', stats.measuredBitrate);\n  console.log('Recommended bitrate:', stats.recommendedBitrate);\n  console.log('RTT:', stats.rtt);\n  console.log('Broadcast quality:', stats.broadcastQuality);\n  console.log('Network health:', stats.networkHealth);\n});\n\n// Ses cihazı istatistikleri\nIVSBroadcast.addListener('onAudioDeviceStats', (stats) => {\n  console.log('Peak:', stats.peak, 'RMS:', stats.rms);\n});\n```\n\n### Picture-in-Picture (PiP)\n\n```typescript\n// PiP desteğini kontrol et\nconst isSupported = await IVSBroadcast.isPictureInPictureSupported();\nif (isSupported) {\n  // PiP modunu başlat\n  await IVSBroadcast.startPictureInPicture(sessionId);\n  \n  // PiP durumunu kontrol et\n  const state = await IVSBroadcast.getPictureInPictureState(sessionId);\n  console.log('PiP state:', state); // 'idle', 'active', 'stopped'\n  \n  // PiP modunu durdur\n  await IVSBroadcast.stopPictureInPicture(sessionId);\n}\n```\n\n**Notlar:**\n- **iOS**: PiP desteği iOS 15.0+ gerektirir\n- **Android**: PiP desteği Android 8.0 (API 26)+ gerektirir\n- Android'de PiP için `AndroidManifest.xml` dosyanıza `android:supportsPictureInPicture=\"true\"` eklemeniz gerekebilir\n\n## Gereksinimler\n\n- React Native >= 0.60.0\n- Android: minSdkVersion 21 (PiP için API 26+)\n- iOS: 11.0+ (PiP için iOS 15.0+)\n\n## Lisans\n\nMIT\n\n## Destek\n\nSorunlarınız için [GitHub Issues](https://github.com/abdurrahman-dev/react-native-ivs-broadcast/issues) kullanabilirsiniz.\n","readmeFilename":"README.md"}