All Projects → m1k1o → Go Transcode

m1k1o / Go Transcode

Live on-demand transcoding in go using ffmpeg. Also with NVIDIA GPU hardware acceleration.

Programming Languages

go
31211 projects - #10 most used programming language
golang
3204 projects

Projects that are alternatives of or similar to Go Transcode

Live Stream From Desktop
Provide guidance to test live streaming (mpeg-dash or hls) or vod from your desktop
Stars: ✭ 124 (+217.95%)
Mutual labels:  ffmpeg, live-streaming
Vidgear
A High-performance cross-platform Video Processing Python framework powerpacked with unique trailblazing features 🔥
Stars: ✭ 2,048 (+5151.28%)
Mutual labels:  ffmpeg, live-streaming
Abr Broadcaster
A real time encoder for Adaptive Bitrate Broadcast
Stars: ✭ 80 (+105.13%)
Mutual labels:  ffmpeg, live-streaming
Dain Vulkan Gui
AI-Powered video interpolater (eg. 30fps -> 60fps) for Vulkan devices. Based on dain-ncnn-vulkan and ffmpeg
Stars: ✭ 58 (+48.72%)
Mutual labels:  gpu, ffmpeg
eloquent-ffmpeg
High-level API for FFmpeg's Command Line Tools
Stars: ✭ 71 (+82.05%)
Mutual labels:  ffmpeg, streams
Docker Nginx Rtmp
🐋 A Dockerfile for nginx-rtmp-module + FFmpeg from source with basic settings for streaming HLS. Built on Alpine Linux.
Stars: ✭ 608 (+1458.97%)
Mutual labels:  ffmpeg, live-streaming
Swiftvideo
Swift Video Framework for Linux, macOS, and iOS/iPadOS
Stars: ✭ 137 (+251.28%)
Mutual labels:  ffmpeg, live-streaming
nott
The New OTT Platform - an excuse to discuss and design a simple edge computing platform
Stars: ✭ 46 (+17.95%)
Mutual labels:  ffmpeg, live-streaming
showroom
Script for archiving AKB48 Group related Showroom streams
Stars: ✭ 48 (+23.08%)
Mutual labels:  ffmpeg, live-streaming
Ffdynamic
Library with dynamic audio/video composition and runtime control
Stars: ✭ 274 (+602.56%)
Mutual labels:  ffmpeg, live-streaming
Obs Studio
OBS Studio - Free and open source software for live streaming and screen recording
Stars: ✭ 34,115 (+87374.36%)
Mutual labels:  ffmpeg, live-streaming
Nvidia libs test
Tests and benchmarks for cudnn (and in the future, other nvidia libraries)
Stars: ✭ 36 (-7.69%)
Mutual labels:  gpu
Rtsp Client Ffmpeg Opencv On Qt
RTSP Client Program using FFmpeg and OpenCV on Qt
Stars: ✭ 31 (-20.51%)
Mutual labels:  ffmpeg
Vkquake
Vulkan Quake port based on QuakeSpasm
Stars: ✭ 955 (+2348.72%)
Mutual labels:  gpu
Headless
Create a virtual X screen from Ruby, record videos and take screenshots.
Stars: ✭ 951 (+2338.46%)
Mutual labels:  ffmpeg
Pyimagevideo
write animated GIF, multipage append TIFF, AVI OGV video in Python
Stars: ✭ 36 (-7.69%)
Mutual labels:  ffmpeg
Saber
Window-Based Hybrid CPU/GPU Stream Processing Engine
Stars: ✭ 35 (-10.26%)
Mutual labels:  gpu
Ffcreator
一个基于node.js的高速短视频加工库 A fast short video processing library based on node.js
Stars: ✭ 948 (+2330.77%)
Mutual labels:  ffmpeg
Drlkit
A High Level Python Deep Reinforcement Learning library. Great for beginners, prototyping and quickly comparing algorithms
Stars: ✭ 29 (-25.64%)
Mutual labels:  gpu
Keras object detection
Convert any classification model or architecture trained in keras to an object detection model
Stars: ✭ 28 (-28.21%)
Mutual labels:  gpu

Go live HTTP on-demand transcoding

Transcoding is expensive and resource consuming operation on CPU and GPU. For big companies with thousands of customers it is essential, to have a dedicated 24/7 transcoding servers. But we, single sporadic users of transcoding, need to have different approach. Transcoding should be done only when its output is really needed. This tool is trying to solve this problem by offering transcoding on demand.

This tool is intended to be used with live streams only. Seeking is not supported, yet.

Config

Specify streams as object in yaml file.

Streams

Create streams.yaml file, with your streams:

streams:
  <stream-id>: <stream-url>

Example:

streams:
  cam: rtmp://localhost/live/cam
  ch1_hd: http://192.168.1.34:9981/stream/channelid/85
  ch2_hd: http://192.168.1.34:9981/stream/channelid/43

HTTP streaming is accessible via:

  • http://localhost:8080/<profile>/<stream-id>

HLS is accessible via:

  • http://localhost:8080/<profile>/<stream-id>/index.m3u8
  • http://localhost:8080/<profile>/<stream-id>/play.html

CPU Profiles

Profiles (HTTP and HLS) with CPU transcoding can be found in profiles:

  • h264_360p
  • h264_540p
  • h264_720p
  • h264_1080p

Profile names must match flowing regex: ^[0-9A-Za-z_-]+$

GPU Profiles

Profiles (HTTP and HLS) with GPU transcoding can be found in profiles_nvidia:

  • h264_360p
  • h264_540p
  • h264_720p
  • h264_1080p

Profile names must match flowing regex: ^[0-9A-Za-z_-]+$

Docker

Build

docker build -t go-transcode:latest .

Run

docker run --rm -d \
  --name="go-transcode" \
  -p "8080:8080" \
  -v "${PWD}/streams.yaml:/app/streams.yaml" go-transcode:latest

Nvidia GPU support (docker)

You will need to have nvidia-docker installed.

Build

First, you need to build previous container. Then, build Nvidia container.

docker build --build-arg "TRANSCODE_IMAGE=go-transcode:latest" -t go-transcode-nvidia:latest -f Dockerfile.nvidia .

Run

docker run --rm -d \
  --gpus=all \
  --name="go-transcode-nvidia" \
  -p "8080:8080" \
  -v "${PWD}/streams.yaml:/app/streams.yaml" go-transcode-nvidia:latest

Supported inputs

Input codec will be automatically determined from given stream. Please check your graphic card's supported codec and maximum concurrent sessions here.

Codec CUVID Codec Name
h264 h264_cuvid H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10
hevc hevc_cuvid H.265 / HEVC
mjpeg mjpeg_cuvid Motion JPEG
mpeg1video mpeg1_cuvid MPEG-1 video
mpeg2video mpeg2_cuvid MPEG-2 video
mpeg4 mpeg4_cuvid MPEG-4 part 2
vc1 vc1_cuvid SMPTE VC-1
vp8 vp8_cuvid On2 VP8
vp9 vp9_cuvid Google VP9
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].