{"id":23962,"plugin_id":"plugins_6ab29d7144e88191985ee28372ab8058","kind":"skill","collection_source":null,"comparison_source":null,"observed_at":"2026-09-30T23:17:50.891Z","digest":"b355781739136b3175b95c6ef5d67d4ee85fbad134cd1f2d18713d3f78b2ee1b","against":null,"payload":{"name":"ffmpeg-streaming","description":"Capture cameras or stream media files through FFmpeg using typed source, encoding, container, transport, and destination settings. Use for HTTP, RTMP, RTSP, SRT, UDP, or TCP streaming and for camera capture planning.","included_files":[{"relative_path":"references/streaming-reference.md","size_in_bytes":819},{"relative_path":"scripts/run.mjs","size_in_bytes":3466}],"skill_md_contents":"---\nname: ffmpeg-streaming\ndescription: Capture cameras or stream media files through FFmpeg using typed source, encoding, container, transport, and destination settings. Use for HTTP, RTMP, RTSP, SRT, UDP, or TCP streaming and for camera capture planning.\n---\n\n# FFmpeg Streaming\n\nUse this skill for live capture and network media delivery.\n\n## Activation scope\n\nUse for:\n\n- camera capture from V4L2, AVFoundation, or DirectShow;\n- streaming a media file at playback rate;\n- HTTP(S), RTMP(S), RTSP, SRT, UDP, or TCP destinations;\n- choosing a transport-appropriate muxer and low-latency encoding.\n\n## Do not use\n\nDo not claim direct WebSocket support. If browser clients need WebSocket, model an explicit relay service. Do not use file-output transactional semantics for live network destinations.\n\n## Required inputs\n\nIdentify:\n\n- source kind: camera or file;\n- camera device and capture backend when applicable;\n- destination URL;\n- transport/container when not inferable;\n- video/audio codec policy;\n- bitrate/GOP/preset constraints.\n\n## Preflight\n\nFor file sources, probe before streaming. For camera sources, use `--dry-run` to validate the planned invocation without opening the device.\n\n## Toolkit surface selection\n\n1. Use the associated `scripts/run.mjs` entry point for supported streaming and capture operations.\n2. If the global binary is unavailable, use:\n   `npm exec --yes --package=@cecilialabs/ffmpeg -- cecilia-ffmpeg <command>`.\n3. Use native FFmpeg only for unsupported streaming features or an explicit native-command request.\n\n## Associated scripts\n\nUse `scripts/run.mjs` with `input.action` `file` or `camera`. File requests\nrequire `input` and `url`; camera requests require `device` and `url`. The\nscript produces a validated transport/encoding plan and only reports live\nexecution when the active host actually ran it.\n\n```bash\nprintf '%s\\n' '{\"context\":\"codex\",\"input\":{\"action\":\"file\",\"input\":\"clip.mp4\",\"url\":\"srt://example.test:9000\"}}' \\\n  | node skills/ffmpeg-streaming/scripts/run.mjs\n```\n\n## Preferred toolkit commands\n\n```bash\ncecilia-ffmpeg stream camera --device <device> --url <url>\ncecilia-ffmpeg stream file <input> --url <url>\n```\n\nSupported direct transport families: HTTP(S), RTMP(S), RTSP, SRT, UDP, TCP.\n\nFor supported operations, prefer the toolkit surface selected above over constructing arbitrary FFmpeg shell commands.\n\n## Native FFmpeg fallback\n\nUse native FFmpeg only for unsupported streaming features or explicit user requests. Maintain strict separation between input capture format, media encoding, muxer/container, and network transport.\n\n## Output expectations\n\nA dry run should expose the complete plan without opening sockets. A live run remains active until input completion, receiver failure, or cancellation.\n\n## Validation\n\nValidate URL scheme/transport agreement, muxer compatibility, encoder availability, and receiver expectations. For network problems, distinguish FFmpeg encoding failure from receiver/connectivity failure.\n\n## Error recovery\n\n- For a `ws://`/`wss://` destination, require an explicit relay architecture.\n- For RTMP use FLV; for RTSP use the RTSP muxer; for generic HTTP/SRT/UDP/TCP use MPEG-TS in the current toolkit.\n- If a receiver rejects the stream, verify its expected codec/container and listening mode.\n- If a camera cannot open, verify device path/name, capture backend, permissions, and supported mode.\n\n## Safety and determinism\n\nNever expose credentials embedded in streaming URLs in unnecessary logs. Use cancellation through the shared runtime; do not kill unrelated FFmpeg processes.\n\n## References\n\nRead `references/streaming-reference.md` for transport and capture details.\n"},"changes":[],"summary":"First saved snapshot. No earlier version is available for comparison.","summary_kind":"deterministic","summary_metadata":{}}