All Projects → horgh → Videostreamer

horgh / Videostreamer

Licence: gpl-3.0
Stream video (e.g. RTSP) to an HTML5 video element (MP4)

Programming Languages

c
50402 projects - #5 most used programming language
golang
3204 projects

Projects that are alternatives of or similar to Videostreamer

Ffmpeg
Mirror of https://git.ffmpeg.org/ffmpeg.git
Stars: ✭ 27,382 (+13064.42%)
Mutual labels:  ffmpeg, rtsp, streaming
Rtsp Simple Server
ready-to-use RTSP / RTMP server and proxy that allows to read, publish and proxy video and audio streams
Stars: ✭ 882 (+324.04%)
Mutual labels:  rtsp, streaming
Goffmpeg
FFMPEG wrapper written in GO
Stars: ✭ 469 (+125.48%)
Mutual labels:  ffmpeg, streaming
Rtp Streamer
rtp record and rtp streamer
Stars: ✭ 60 (-71.15%)
Mutual labels:  ffmpeg, rtsp
Desktopsharing
桌面共享, 支持RTSP转发, RTSP推流, RTMP推流。
Stars: ✭ 337 (+62.02%)
Mutual labels:  ffmpeg, rtsp
Awesome Video
A curated list of awesome streaming video tools, frameworks, libraries, and learning resources.
Stars: ✭ 397 (+90.87%)
Mutual labels:  ffmpeg, streaming
Live Stream Face Detection
Live Streaming and Face Detection with Flask in Browser
Stars: ✭ 47 (-77.4%)
Mutual labels:  rtsp, streaming
dji-ryze-tello
Pythonic DJI Ryze Tello Workbench
Stars: ✭ 17 (-91.83%)
Mutual labels:  streaming, ffmpeg
Rtmp Rtsp Stream Client Java
Library to stream in rtmp and rtsp for Android. All code in Java
Stars: ✭ 1,338 (+543.27%)
Mutual labels:  rtsp, streaming
Node Tcp Streaming Server
Experimental TCP video streaming server written in node.js. Streaming over TCP and redistributing using WebSockets.
Stars: ✭ 100 (-51.92%)
Mutual labels:  ffmpeg, streaming
Rtsp.player.android
RTSP player for Android / IP camera viewer
Stars: ✭ 199 (-4.33%)
Mutual labels:  rtsp, streaming
Gb28181.solution
Linux/Win/Docker/kubernetes/Chart/Kustomize/GB28181/SIP/RTP/SDP/WebRTC/作为上下级域/平台级联互联
Stars: ✭ 323 (+55.29%)
Mutual labels:  rtsp, streaming
Rtspallthethings
Deprecated RTSP media server -- Use github.com/aler9/rtsp-simple-server instead.
Stars: ✭ 258 (+24.04%)
Mutual labels:  rtsp, streaming
Real-Time-Video-Streaming
a real time streaming video application using RTSP
Stars: ✭ 15 (-92.79%)
Mutual labels:  rtsp, ffmpeg
Ffplayout Engine
python and ffmpeg based playout
Stars: ✭ 128 (-38.46%)
Mutual labels:  ffmpeg, streaming
Rtsp Client Ffmpeg Opencv On Qt
RTSP Client Program using FFmpeg and OpenCV on Qt
Stars: ✭ 31 (-85.1%)
Mutual labels:  ffmpeg, rtsp
wsa
WSA(Websocket Streaming Agent) is a stream server target for mp4/h264 streaming over websocket
Stars: ✭ 35 (-83.17%)
Mutual labels:  streaming, rtsp
rtsp-samsung-tv
Display RTSP streams from IP Cameras on Samsung Smart TV (Tizen TV)
Stars: ✭ 40 (-80.77%)
Mutual labels:  rtsp, ffmpeg
Onvifcamera
Pod and example on how to connect to an ONVIF camera
Stars: ✭ 66 (-68.27%)
Mutual labels:  rtsp, streaming
Streaming Room
Streaming room in Node.js, rtmp, hsl, html5 videojs player
Stars: ✭ 106 (-49.04%)
Mutual labels:  ffmpeg, streaming

videostreamer

videostreamer provides a way to stream video from an input source to HTTP. It remuxes a video input into an MP4 container which it streams to connecting clients. This provides the ability to stream an input source that may have limited connections (it opens at most one connection to the input), is not accessible via HTTP, or is not easily embeddable in a website.

Build requirements

  • ffmpeg libraries (libavcodec, libavformat, libavdevice, libavutil, libswresample).
    • It should work with versions 3.2.x or later.
    • It does not work with 3.0.x or earlier as it depends on new APIs.
    • I'm not sure whether it works with 3.1.x.
  • C compiler. Currently it requires a compiler with C11 support.
  • Go. It should work with any Go 1 version.

Installation

  • Install the build dependencies (including ffmpeg libraries and a C compiler).
    • On Debian/Ubuntu, these packages should include what you need: git-core pkg-config libavutil-dev libavcodec-dev libavformat-dev libavdevice-dev
  • Build the daemon.
    • You need a working Go build environment.
    • Run go get github.com/horgh/videostreamer
    • This places the videostreamer binary at $GOPATH/bin/videostreamer.
  • Place index.html somewhere accessible. Update the <video> element src attribute.
  • Run the daemon. Its usage output shows the possible flags. There is no configuration file.

Components

  • videostreamer: The daemon.
  • index.html: A small sample website with a <video> element which demonstrates how to stream from the daemon.
  • videostreamer.h: A library using the ffmpeg libraries to read a video input and remux and write to another format.
  • cmd/remux_example: A C program demonstrating using videostreamer.h. It remuxes an RTSP input to an MP4 file.

Background

A friend has a camera that publishes an RTSP feed containing h264 video. It permits a limited number of connections, and being RTSP is not easily accessible on the web, such as in an HTML5 <video> element. videostreamer solves both of these problems. It reads the RTSP feed as input, remuxes the h264 video into an MP4 container, and streams it to HTTP clients. No matter how many clients are streaming the video, videostreamer only opens one RTSP connection.

Browsers support h264 in an MP4 container, so no transcoding is necessary. However, in order to stream the MP4, it is fragmented using libavformat's frag_keyframe option. For Firefox I also had to set the empty_moov option.

Difference from audiostreamer

I have a project for streaming audio called audiostreamer. I wrote it before this one, and seeing it was successful and gave me experience with the ffmpeg libraries, I decided to build this too.

Initially I was going to make one larger project to stream either video or audio (or both), but I found that video behaved a bit differently than audio. Specifically, audiostreamer is able to create a single MP3 container and then stream that to clients, starting at any frame position. For the video container I wanted to use, I found this was not possible. First, I always needed to send a header to each client, which meant I needed to keep the header around in some way to send to every client. I found that I could not gain access to the header from the libavformat API. Second, I was not able to read individual frames out and send them independently like I could do with MP3. This meant it was impossible to know where in the MP4 container's output I could begin sending to a new client when another client was already streaming.

Since it became clear that I would have to structure the program quite differently, and I was happy with how audiostreamer was, I decided to build videostreamer as a separate project.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].