# Embedding a video player in the editor

**URL:** https://discuss.prosemirror.net/t/embedding-a-video-player-in-the-editor/2081
**Category:** Uncategorized
**Created:** [July 10, 2019, 7:29am UTC](https://discuss.prosemirror.net/t/embedding-a-video-player-in-the-editor/2081 "2019-07-10T07:29:41Z")
**Posts on this page:** 8
**Page:** 1

<div class="post-metadata">

### Author: ![manoju](https://discuss.prosemirror.net/letter_avatar_proxy/v4/letter/m/54ee81/32.png) [@manoju](https://discuss.prosemirror.net/u/manoju)
#### Post date: [July 10, 2019, 7:29am UTC](https://discuss.prosemirror.net/t/embedding-a-video-player-in-the-editor/2081/1 "2019-07-10T07:29:41Z")

</div>

Is there any way to embed a video player or any widget which can play videos ?

---

<div class="post-metadata">

### Author: ![marijn](https://discuss.prosemirror.net/user_avatar/discuss.prosemirror.net/marijn/32/15_2.png) [@marijn](https://discuss.prosemirror.net/u/marijn)
#### Post date: [July 10, 2019, 7:41am UTC](https://discuss.prosemirror.net/t/embedding-a-video-player-in-the-editor/2081/2 "2019-07-10T07:41:40Z")

</div>

Yes, but I’m not aware of any existing reusable plugin that does this, so you’ll have to build it (probably using a node view).

---

<div class="post-metadata">

### Author: ![manoju](https://discuss.prosemirror.net/letter_avatar_proxy/v4/letter/m/54ee81/32.png) [@manoju](https://discuss.prosemirror.net/u/manoju)
#### Post date: [July 10, 2019, 8:34am UTC](https://discuss.prosemirror.net/t/embedding-a-video-player-in-the-editor/2081/3 "2019-07-10T08:34:28Z")

</div>

Thanks for the reply ! can you provide some example/link on how to use node view for videos. That would be great as i am new to this.

---

<div class="post-metadata">

### Author: ![pet](https://discuss.prosemirror.net/letter_avatar_proxy/v4/letter/p/82dd89/32.png) [@pet](https://discuss.prosemirror.net/u/pet)
#### Post date: [July 11, 2019, 6:55pm UTC](https://discuss.prosemirror.net/t/embedding-a-video-player-in-the-editor/2081/4 "2019-07-11T18:55:42Z")

</div>

If you want to embed youtube, vimeo etc. player, you can use schema and input rule to create and append fragment. At least that’s how I did it…

---

<div class="post-metadata">

### Author: ![zib](https://discuss.prosemirror.net/user_avatar/discuss.prosemirror.net/zib/32/986_2.png) [@zib](https://discuss.prosemirror.net/u/zib)
#### Post date: [July 13, 2019, 2:02pm UTC](https://discuss.prosemirror.net/t/embedding-a-video-player-in-the-editor/2081/5 "2019-07-13T14:02:06Z")

</div>

[https://prosemirror.net/examples/upload/](https://prosemirror.net/examples/upload/)[https://prosemirror.net/examples/footnote/](https://prosemirror.net/examples/footnote/)

---

<div class="post-metadata">

### Author: ![bZichett](https://discuss.prosemirror.net/user_avatar/discuss.prosemirror.net/bzichett/32/1047_2.png) [@bZichett](https://discuss.prosemirror.net/u/bZichett)
#### Post date: [July 20, 2019, 5:27pm UTC](https://discuss.prosemirror.net/t/embedding-a-video-player-in-the-editor/2081/6 "2019-07-20T17:27:29Z")

</div>

I was able to implement one with a new schema item + custom NodeView that inserts an element with an iframe with the src attribute from the video schema.

For example, this would work if you give it a youtube embedded video link or a direct link to a video file on the web.

---

<div class="post-metadata">

### Author: ![michael](https://discuss.prosemirror.net/user_avatar/discuss.prosemirror.net/michael/32/1830_2.png) [@michael](https://discuss.prosemirror.net/u/michael)
#### Post date: [December 2, 2020, 6:22pm UTC](https://discuss.prosemirror.net/t/embedding-a-video-player-in-the-editor/2081/7 "2020-12-02T18:22:18Z")

</div>

I just made HTML5 videos work by simply providing a schema for it. What’s left to do is intercepting click events with `handleDOMEvents` on the video tag, so the playback doesn’t start/stop each time you select the node.

```
  video: {
    attrs: {
      src: {},
      poster: { default: null }
    },
    group: "block",
    draggable: true,
    parseDOM: [{tag: "video", getAttrs(dom) {
      let source = dom.querySelector('source')
      return {
        src: source.getAttribute('src'),
        poster: dom.getAttribute('poster')
      }
    }}],
    toDOM(node) {
      let { src, poster } = node.attrs
      return ["video", { controls: '', draggable: 'false', poster}, ["source", { src }]]
    }
  },
  ...

```

I’m really impressed with the library as I’ve been co-authoring an editor framework (Substance.js) myself, which was designed for complex use-cases such as building scientific editors. I like ProseMirrors purity (e.g. no editor-specific markup in the editing canvas needed), and I’m surprised I still didn’t hit any limits yet.

@marijn fantastic work! Glad I’m finally digging into ProseMirror now.

---

<div class="post-metadata">

### Author: ![marijn](https://discuss.prosemirror.net/user_avatar/discuss.prosemirror.net/marijn/32/15_2.png) [@marijn](https://discuss.prosemirror.net/u/marijn)
#### Post date: [December 2, 2020, 7:32pm UTC](https://discuss.prosemirror.net/t/embedding-a-video-player-in-the-editor/2081/8 "2020-12-02T19:32:32Z")

</div>

Thanks! Glad the library works for you.
