ضبط ویدیو از یه ویو خاص تو React Native
خلاصهٔ کاملتر
این کتابخونه یه مشکل مشخص رو حل میکنه: گاهی نمیخوای کل صفحه رو ضبط کنی، فقط میخوای از یه ویوی خاص تو اپت یه ویدیو یا عکس بگیری. react-native-view-recorder دقیقاً همین کارو میکنه و خروجی رو برای ساختن محتوای قابلاشتراک آماده میکنه. میتونی صدای دلخواهت رو هم بهش اضافه کنی، یا با یه کالبک جاوااسکریپتی برای هر فریم نمونهی صوتی بسازی.
نکتهی مهمش اینه که ضبط با شتاب سختافزاری انجام میشه؛ روی iOS از AVAssetWriter و روی اندروید از MediaCodec استفاده میکنه. این یعنی بهجای یه راهحل سنگین مبتنی بر FFmpeg، از خود امکانات بومی پلتفرم استفاده شده. حجم کد بومیش هم خیلی کمه — حدود ۹۰ کیلوبایت — و هیچ باینری شخصثالثی همراهش نمیاد.
یه ویژگی کاربردی دیگه پشتیبانی از Skia هست: کتابخونه میتونه بومهای @shopify/react-native-skia و TextureViewها رو هم ضبط کنه. برای فرمت ویدیو هم H.264، H.265 و HEVC رو پشتیبانی میکنه و روی iOS حتی HEVC با کانال آلفا (شفافیت) هم کار میکنه. خود کتابخونه با معماری جدید (New Architecture) ساخته شده، یعنی یه کامپوننت بومی Fabric و TurboModule.
طرز استفادهش هم سادهست: یه هوک useViewRecorder میگیری و ویوت رو داخل کامپوننت RecordingView میذاری، بعد متد record رو با مسیر خروجی و تعداد فریم صدا میزنی:
const recorder = useViewRecorder();
await recorder.record({
output: FileSystem.cacheDirectory + "video.mp4",
fps: 30,
totalFrames: 150,
onFrame: async ({ frameIndex }) => setFrame(frameIndex),
});همون RecordingView و useViewRecorder برای بومهای Skia هم کار میکنه؛ کافیه sessionId رکوردر رو به ویو بدی و کانواس Skia رو داخلش بذاری. یه نکته هم اینکه چون این یه ماژول بومیه، روی Expo Go اجرا نمیشه و باید از development build استفاده کنی. کتابخونه با لایسنس MIT منتشر شده، که همون مزیت نبود دردسر لایسنس FFmpeg رو پررنگتر میکنه.
نکات کلیدی:
- یه ویوی مشخص رو بهجای کل صفحه به ویدیو یا عکس تبدیل میکنه
- روی iOS از AVAssetWriter و روی اندروید از MediaCodec با شتاب سختافزاری استفاده میکنه
- بومهای Skia و TextureView رو هم ضبط میکنه و HEVC با آلفا داره
- وابسته به FFmpeg نیست، پس دردسر لایسنس GPL/LGPL نداره و کد بومیش حدود ۹۰ کیلوبایته
- چون ماژول بومیه روی Expo Go کار نمیکنه و به development build نیاز داره




