इस पेज का अनुवाद मशीन द्वारा किया गया है और इसमें त्रुटियाँ हो सकती हैं। मूल अंग्रेज़ी पढ़ें

API

Video

nsh Video एक्सपोर्ट करता है: प्लेटफ़ॉर्म के प्लेयर पर बना एक वीडियो प्लेयर (iOS और Mac Catalyst पर AVPlayer, Android पर MediaPlayer)। प्लेबैक को props से नियंत्रित किया जाता है, इसलिए वीडियो को रोकना बस एक सिग्नल की दूरी पर है।

import { Video, type VideoProps } from "nsh";

गाइड के लिए Web view और वीडियो देखें और इसके props के लिए <Video> देखें।

#Video

const Video: (props: VideoProps) => JSX.Element;

interface VideoProps extends Omit<ViewProps, "children">, VideoHostProps {
  src: string;
}
import { mount, signal, Text, Video, type VideoRef, View } from "nsh";

function Player() {
  const paused = signal(true);
  const time = signal("");
  let video!: VideoRef;
  return (
    <View style={{ flex: 1, padding: 16, gap: 12 }}>
      <Video
        ref={video}
        src="https://example.com/clip.mp4"
        paused={paused()}
        muted
        repeat
        class="object-cover"
        style={{ height: 220, borderRadius: 8, overflow: "hidden", backgroundColor: "#000" }}
        onProgress={(e) => time.set(`${e.currentTime.toFixed(1)} / ${e.duration.toFixed(1)} s`)}
      />
      <View style={{ flexDirection: "row", gap: 16 }}>
        <Text onPress={() => paused.update((p) => !p)}>{paused() ? "Play" : "Pause"}</Text>
        <Text onPress={() => video.seek(0)}>Restart</Text>
        <Text>{time()}</Text>
      </View>
    </View>
  );
}

mount(Player);

#Props

Video view props (style, classes, layout, accessibility, ref; कोई children नहीं) लेता है, साथ ही:

PropTypeDefaultविवरण
srcstring(आवश्यक)वीडियो का URL।
pausedbooleanfalseप्लेबैक रुका हुआ है।
mutedbooleanfalseकोई आवाज़ नहीं।
volumenumber10..1।
ratenumber1प्लेबैक की गति।
repeatbooleanfalseअंत में शुरुआत से दोबारा चलता है।
controlsbooleanfalseप्लेटफ़ॉर्म के प्लेबैक कंट्रोल दिखाता है।
objectFit (style), object-* classes"cover" | "contain" | "fill" | "none" | "scale-down""contain"वीडियो अपने बॉक्स में कैसे फ़िट होता है, CSS के object-fit (class="object-cover") की तरह।
progressUpdateIntervalnumber250onProgress इवेंट के बीच मिलीसेकंड।
audioSession"default" | "playback" | "mixWithOthers""default"आवाज़ डिवाइस की बाकी ऑडियो पर क्या असर डालती है: आवाज़ और अन्य ऐप्स देखें।

#आवाज़ और अन्य ऐप्स

वीडियो की आवाज़ ऐप की ऑडियो सेटिंग का पालन करती है, जो डिफ़ॉल्ट रूप से वीडियो के लिए प्लेटफ़ॉर्म की सेटिंग होती है: iOS पर डिवाइस का साइलेंट मोड उसे म्यूट कर देता है। जो ऐप बोली हुई सामग्री चलाता है, जैसे ऑडियोबुक या भाषा सिखाने वाला कोर्स, वह audioSession सेट करता है:

audioSessionसाइलेंट मोड मेंचलते समय अन्य ऐप्स की ऑडियो
"default"ऐप की ऑडियो सेटिंग तय करती हैंऐप की ऑडियो सेटिंग तय करती हैं
"playback"आवाज़ चलती हैरुक जाती है, और वीडियो के रुकने, खत्म होने या हटने के बाद दोबारा चलती है
"mixWithOthers"आवाज़ चलती हैचलती रहती है

यह सेटिंग वीडियो चलने के दौरान प्रभावी रहती है। iOS पर, ऐसा पहला वीडियो चलने पर AVAudioSession को spokenAudio मोड में playback श्रेणी पर सेट करता है ("mixWithOthers" के लिए अन्य ऐप्स की ऑडियो के साथ मिक्स होकर), और जब कोई भी वीडियो नहीं चल रहा होता, तो सेशन अपनी पिछली स्थिति में लौट आता है और जिन ऐप्स को रोका गया था वे दोबारा चल सकते हैं; "default" सेशन को वैसा ही छोड़ देता है जैसा ऐप ने, या NSH को एम्बेड करने वाले ऐप ने, सेट किया था। Android पर प्लेयर की आवाज़ को स्पीच के रूप में चिह्नित किया जाता है, और "playback" वीडियो चलते समय ऑडियो फ़ोकस अपने पास रखता है: जब कोई अन्य ऐप फ़ोकस ले लेता है (कॉल, नेविगेशन प्रॉम्प्ट) तो वह रुक जाता है और फ़ोकस लौटने पर आगे चलता है। Android पर audioSession बदलने से सोर्स दोबारा खुलता है। डेस्कटॉप और वेब पर आवाज़ वैसे ही चलती है जैसे किसी भी वीडियो की चलती है।

<Video src="asset:/greeting.m4a" audioSession="playback" />

#Events

EventPayloadकब
onLoadStartवीडियो लोड होना शुरू होता है।
onLoad{ duration: number; size: PixelSize }यह चलने के लिए तैयार है: इसकी अवधि सेकंड में और आकार पिक्सेल में।
onProgress{ currentTime: number; duration: number }चलते समय, हर progressUpdateInterval ms पर। सेकंड में।
onBuffer{ isBuffering: boolean }प्लेबैक डेटा का इंतज़ार करता है, या फिर से शुरू होता है।
onEndप्लेबैक अंत तक पहुँच गया।
onError{ message: string }वीडियो लोड या प्ले नहीं हो सका।

#Ref methods

Methodविवरण
seek(seconds)seconds पर जाता है।
const aspect = signal(16 / 9);

<Video src={url} onLoad={(e) => aspect.set(e.size.width / e.size.height)} style={{ width: "100%", aspectRatio: aspect() }} />;

#Capabilities

जब आपका ऐप nsh.json में capabilities घोषित करता है, तो रिमोट वीडियो सोर्स को network के अंतर्गत अनुमति देनी होगी, जैसे fetch; अस्वीकृत सोर्स कुछ नहीं दिखाता। Sandbox और capabilities देखें।