GithubHelp home page GithubHelp logo

m1k1o / go-transcode Goto Github PK

View Code? Open in Web Editor NEW
195.0 9.0 33.0 317 KB

On-demand transcoding origin server for live inputs and static files in Go using ffmpeg. Also with NVIDIA GPU hardware acceleration.

License: Apache License 2.0

Dockerfile 0.82% Shell 12.13% Go 85.91% HTML 1.14%
gpu streams ffmpeg live-streaming golang transcoding demand-transcoding docker nvidia-cuda

go-transcode's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

go-transcode's Issues

ffprobe cache

When the cache is true, can we save the ffprobe stream result? Every request to the same file with different resolution (maybe the same too), the ffprobe is running again.

Unrecognized option 'hls_wrap' from ffmpeg

Hi there,

Just made a fresh build and getting the below error when trying to do any copy or transcode stream, logging into the container and running the same command gives the below response:

bash-5.2# /app/profiles/hls/copy.sh url=http://pathtostream
Unrecognized option 'hls_wrap'.
Error splitting the argument list: Option not found

ffmpeg version:
bash-5.2# ffmpeg
ffmpeg version 5.1.2 Copyright (c) 2000-2022 the FFmpeg developers

Closing ffmpeg when isn't used

The ffmpeg will be killed after 50 segments are created.
But When I start a video with a index file, the vlc start all playlists and some ffmpeg instances are started, this slows down the server, maybe there should be a better control to disable ffmpeg when not used, and when used, increase the limit from 50 to another after new requests, so there is no cut in audio between old and new segments.

Auto-detect hardware acceleration

We can detect hardware acceleration in program. Using ffmpeg cli

ffmpeg -init_hw_device list 2> /dev/null
Supported hardware device types:
vdpau
vaapi
qsv
drm
opencl

then no need for profiles config just print what profiles are used on startup

what outputs the command with nvidia proprietaire driver?

static file access

Trying to test static files. the config file is pointed to /media
has full access to the folder mounted

mpv http://IPADDR:8888/vod/TV/SouthPark/Specials/South_Park_-_S00E44_-_South_Park-_Post_COVID-_The_Return_of_COVID_WEBDL-1080p.mkv/index.m3u8

get an error 500 and the output with debug on on go-transcode

12:46AM INF fetching metadata module=hlsvod submodule=manager
2021/12/28 00:46:13 Unrecognized option 'show_format'.
Error splitting the argument list: Option not found

12:46AM WRN unable to preload metadata error="unable probe media for metadata: exit status 1" module=hlsvod
12:46AM DBG request complete (500) module=http req={"agent":"libmpv","id":"go-transcode/NeOacMNoCW-000004","method":"GET","proto":"HTTP/1.1","remote":"192.168.6.133:1082","scheme":"http","uri":"http://IPADDR:8888/vod/TV/SouthPark/Specials/South_Park_-_S00E44_-_South_Park-_Post_COVID-_The_Return_of_COVID_WEBDL-1080p.mkv/index.m3u8"} res={"bytes":31,"elapsed":11.91186,"status":500,"time":"Tue, 28 Dec 2021 00:46:13 UTC"}
12:46AM DBG request complete (405) module=http req={"agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.85 Safari/537.36","id":"go-transcode/NeOacMNoCW-000005","method":"HEAD","proto":"HTTP/1.1","remote":"192.168.6.133:1083","scheme":"http","uri":"http://IPADDR:8888/vod/TV/SouthPark/Specials/South_Park_-_S00E44_-_South_Park-_Post_COVID-_The_Return_of_COVID_WEBDL-1080p.mkv/index.m3u8"} res={"bytes":0,"elapsed":0.013375,"status":405,"time":"Tue, 28 Dec 2021 00:46:14 UTC"}
12:46AM INF fetching metadata module=hlsvod submodule=manager
2021/12/28 00:46:14 Unrecognized option 'show_format'.
Error splitting the argument list: Option not found

12:46AM WRN unable to preload metadata error="unable probe media for metadata: exit status 1" module=hlsvod
12:46AM DBG request complete (500) module=http req={"agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.85 Safari/537.36","id":"go-transcode/NeOacMNoCW-000006","method":"GET","proto":"HTTP/1.1","remote":"192.168.6.133:1084","scheme":"http","uri":"http://IPADDR:8888/vod/TV/SouthPark/Specials/South_Park_-_S00E44_-_South_Park-_Post_COVID-_The_Return_of_COVID_WEBDL-1080p.mkv/index.m3u8"} res={"bytes":31,"elapsed":11.783193,"status":500,"time":"Tue, 28 Dec 2021 00:46:14 UTC"}

module separation

source

In the future, I would like to split HLS, HTTP (live) and on-demand streaming to different modules. And every module should have separate config. And they would be independent. That's why i think, for future, it would be better to have split config.

what config must change for every modules? streams very probable.. maybe profiles dir? something else?

2nd+ streams lead to errors that can cause some players to not work.

The first person to get the stream works, video plays back fine.
any one after will get errors that cause the video to freeze or the player to refuse to play

See the attached video

streamissues2.mp4

This happens on lan and over hls proxy.
I have tried changing the type of audio as well happens to both aac and mp3
Using the latest git docker build as well.

add HLS proxy

To have ability, to proxy HLS directly without FFMPEG, with caching.

Experimental topic. Low priority.

Dreambox (Enigma2) as live Input

Hi,
are you interessted in building a Input Config for automatic load Channels from a Dreambox (or Enigma 2 based STB) ?
Will be my first steps in go but i can try building it if you want.

Having here a Dreambox 920 with two FBC Tuner (1x Sat and 1x Cable).

Config can be look like:

enigma2:
  ip: x.x.x.x
  port: 8001
  bouquet: "Favorites TV"

and then its loading Channels for Live Streaming

Some freezes with static files

I'm have a problem with static files, sometimes the screen freezes for while

I believe that probleme is: "force_key_frames"

problem when accessing video from chrome or other browser:

Hello:
I configured the server (i think that ok), when I watch movies from mpc-hc or vlc I can access the file, transcode is good and I can view the file from any machine

when I try to access the file from an html through a web broser I get the following error:

xxxxx.html:1 Access to XMLHttpRequest at 'http://192.168.10.3:44444/vod/xxxx/yyy/360p.m3u8' from origin 'null' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

Is there any way to set cross origin policy on the server ( even if i need to change the source code and recompile) or I'm doing something wrong?

thanks in advance

Adaptiv Bitrates

Hi,
first of all great project ... just did a few quick tests and its working great.
in the next days i will get a system with an nvidia p4000 for testing and so i was thinking about how about a profile with adaptiv bitrates?

after reading the specs the p4000 should do round about 22 x h264 or 26 x h265 streams simultan.

HLS exit on error

Right now, when command finishes earlier (because of error) or does not start properly, it won't communincate error and we need to wait for timeout to finish. I would expect the function onStop to have error parameter, and firing when command stops.

add WebRTC output support

Besides HLS and HTTP streaming, it would be interesting to have WebRTC output. Ideal for low latency when watching from a browser.

This implementation base can then serve for a different project as foundation for creating shared rooms with watching media.

Ffmpeg does not force key frames as expected

Given we have a test video and want to force keframes at 1772,1776 timestamps:

ffmpeg -loglevel warning \
    -ss 1768 \
    -i test.mp4 \
    -force_key_frames 1772,1776 \
    -to 1776 \
    -copyts \
  -c:v libx264 \
    -preset faster \
    -profile:v high \
    -level:v 4.0 \
    -b:v 2800k \
  -c:a aac \
    -b:a 192k \
  -f mpegts - \
| ffprobe -loglevel error -skip_frame nokey -select_streams v:0 -show_entries frame=pkt_pts_time -of csv=print_section=0 -

Response shows us:

1769.416256
1773.420256
1777.382544

What is not what we expected. We expected to see 1772 and 1776 in the output.

Questions on simultaneous ffmpeg processes (NVENC job concurrency) and segment buffering behavior

Is it possible that an issue exists with overlapping transcoding runs, i.e. is it possible that there is a situation (race condition?) in which segmentBufferMax+1 ffmpeg instances run simultaneously?

I'm using the VOD mode with (modified) GPU encoding via NVENC. Consumer-grade Nvidia GPUs only allow 2 or 3 (apparently they increased this to 3 some time in 2020) simultaneous NVENC jobs.
I'm testing with a GTX 1050 and a GTX 1070.

I've set segmentBufferMax to 3, otherwise I would constantly run into this issue. With that, at the beginning it runs just fine and does a couple of transcodes successfully. Eventually, it runs into the telltale 'nvenc concurrency' error:

2022/12/08 14:32:09 [h264_nvenc @ 00000273a548f1c0] OpenEncodeSessionEx failed: out of memory (10): (no details)
2022/12/08 14:32:09 [h264_nvenc @ 00000273a548f1c0] No capable devices found
2022/12/08 14:32:09 Error initializing output stream 0:1 -- Error while opening encoder for output stream #0:1 - maybe incorrect parameters such as bit_rate, rate, width or height
2022/12/08 14:32:09 [h264_nvenc @ 00000282534df1c0] OpenEncodeSessionEx failed: out of memory (10): (no details)
2022/12/08 14:32:09 [h264_nvenc @ 00000282534df1c0] No capable devices found
2022/12/08 14:32:09 Error initializing output stream 0:1 -- Error while opening encoder for output stream #0:1 - maybe incorrect parameters such as bit_rate, rate, width or height

After that, go-transcode runs into some kind of hiccup where from now on until a restart, it only produces timeouts:

1:32PM WRN media transcode timeouted module=hlsvod submodule=manager

I'm not sure why this is, but apparently it doesn't handle the ffmpeg failure all too well.

Btw., I'm a bit confused, but from the code comments, segmentBufferMin has nothing to do with this, correct? segmentBufferMin and segmentBufferMax are two completely different configuration values that don't work together to create some kind of range.

Click to expand full log
1:26PM INF new hls vod request hlsResource=1080p.m3u8 module=hlsvod path="video.mp4/1080p.m3u8" vodMediaPath="../test_videos/h/video.mp4"
1:26PM INF new hls vod request hlsResource=1080p-00000.ts module=hlsvod path="video.mp4/1080p-00000.ts" vodMediaPath="../test_videos/h/video.mp4"
1:26PM INF new hls vod request hlsResource=1080p-00001.ts module=hlsvod path="video.mp4/1080p-00001.ts" vodMediaPath="../test_videos/h/video.mp4"
1:26PM INF new hls vod request hlsResource=1080p.m3u8 module=hlsvod path="video.mp4/1080p.m3u8" vodMediaPath="../test_videos/h/video.mp4"
1:26PM INF new hls vod request hlsResource=1080p-00000.ts module=hlsvod path="video.mp4/1080p-00000.ts" vodMediaPath="../test_videos/h/video.mp4"
1:26PM INF new hls vod request hlsResource=1080p-00002.ts module=hlsvod path="video.mp4/1080p-00002.ts" vodMediaPath="../test_videos/h/video.mp4"
1:26PM INF new hls vod request hlsResource=1080p-00001.ts module=hlsvod path="video.mp4/1080p-00001.ts" vodMediaPath="../test_videos/h/video.mp4"
1:26PM INF new hls vod request hlsResource=1080p-00003.ts module=hlsvod path="video.mp4/1080p-00003.ts" vodMediaPath="../test_videos/h/video.mp4"
1:26PM INF new hls vod request hlsResource=1080p-00002.ts module=hlsvod path="video.mp4/1080p-00002.ts" vodMediaPath="../test_videos/h/video.mp4"
1:26PM INF new hls vod request hlsResource=1080p-00003.ts module=hlsvod path="video.mp4/1080p-00003.ts" vodMediaPath="../test_videos/h/video.mp4"
1:26PM INF new hls vod request hlsResource=1080p-00018.ts module=hlsvod path="video.mp4/1080p-00018.ts" vodMediaPath="../test_videos/h/video.mp4"
1:26PM INF new hls vod request hlsResource=1080p-00019.ts module=hlsvod path="video.mp4/1080p-00019.ts" vodMediaPath="../test_videos/h/video.mp4"
1:26PM INF new hls vod request hlsResource=1080p-00018.ts module=hlsvod path="video.mp4/1080p-00018.ts" vodMediaPath="../test_videos/h/video.mp4"
1:26PM INF new hls vod request hlsResource=1080p-00019.ts module=hlsvod path="video.mp4/1080p-00019.ts" vodMediaPath="../test_videos/h/video.mp4"
1:26PM INF new hls vod request hlsResource=1080p-00020.ts module=hlsvod path="video.mp4/1080p-00020.ts" vodMediaPath="../test_videos/h/video.mp4"
1:26PM INF new hls vod request hlsResource=1080p-00020.ts module=hlsvod path="video.mp4/1080p-00020.ts" vodMediaPath="../test_videos/h/video.mp4"
1:26PM INF new hls vod request hlsResource=1080p-00021.ts module=hlsvod path="video.mp4/1080p-00021.ts" vodMediaPath="../test_videos/h/video.mp4"
1:26PM INF new hls vod request hlsResource=1080p-00021.ts module=hlsvod path="video.mp4/1080p-00021.ts" vodMediaPath="../test_videos/h/video.mp4"
1:26PM INF new hls vod request hlsResource=1080p-00022.ts module=hlsvod path="video.mp4/1080p-00022.ts" vodMediaPath="../test_videos/h/video.mp4"
1:26PM INF new hls vod request hlsResource=1080p-00022.ts module=hlsvod path="video.mp4/1080p-00022.ts" vodMediaPath="../test_videos/h/video.mp4"
1:26PM INF new hls vod request hlsResource=1080p-00023.ts module=hlsvod path="video.mp4/1080p-00023.ts" vodMediaPath="../test_videos/h/video.mp4"
1:26PM INF new hls vod request hlsResource=1080p-00023.ts module=hlsvod path="video.mp4/1080p-00023.ts" vodMediaPath="../test_videos/h/video.mp4"
1:31PM INF new hls vod request hlsResource=1080p-00012.ts module=hlsvod path="video.mp4/1080p-00012.ts" vodMediaPath="../test_videos/h/video.mp4"
1:31PM INF transcoding segments limit=1 module=hlsvod offset=12 segments-times=[96,104] submodule=manager
2022/12/08 14:31:55 Starting FFmpeg process with args ./ffmpeg.exe -loglevel warning -ss 96.000000 -i ../test_videos/h/video.mp4 -to 104.000000 -copyts -force_key_frames 104.000000 -sn -vf scale=-2:1080 -filter_complex amix=inputs=2 -c:v h264_nvenc -preset p1 -tune:v ull -profile:v high -rc:v cbr -b:v 5000k -c:a aac -b:a 192k -f segment -segment_time_delta 0.2 -segment_format mpegts -segment_times 104.000000 -segment_start_number 12 -segment_list_type flat -segment_list pipe:1 ../test_videos/h/transcode\vod-1080p-47964795/1080p-%05d.ts
1:31PM INF transcode process started limit=1 module=hlsvod offset=12 submodule=manager
1:31PM INF new hls vod request hlsResource=1080p-00012.ts module=hlsvod path="video.mp4/1080p-00012.ts" vodMediaPath="../test_videos/h/video.mp4"
1:31PM INF transcode process returned a segment index=12 limit=1 module=hlsvod offset=12 segment=1080p-00012.ts submodule=manager
2022/12/08 14:31:59 FFmpeg process successfully finished.
1:31PM INF new hls vod request hlsResource=1080p-00013.ts module=hlsvod path="video.mp4/1080p-00013.ts" vodMediaPath="../test_videos/h/video.mp4"
1:31PM INF transcode process finished index=13 limit=1 module=hlsvod offset=12 submodule=manager
1:31PM INF transcoding segments limit=1 module=hlsvod offset=13 segments-times=[104,112] submodule=manager
2022/12/08 14:31:59 Starting FFmpeg process with args ./ffmpeg.exe -loglevel warning -ss 104.000000 -i ../test_videos/h/video.mp4 -to 112.000000 -copyts -force_key_frames 112.000000 -sn -vf scale=-2:1080 -filter_complex amix=inputs=2 -c:v h264_nvenc -preset p1 -tune:v ull -profile:v high -rc:v cbr -b:v 5000k -c:a aac -b:a 192k -f segment -segment_time_delta 0.2 -segment_format mpegts -segment_times 112.000000 -segment_start_number 13 -segment_list_type flat -segment_list pipe:1 ../test_videos/h/transcode\vod-1080p-47964795/1080p-%05d.ts
1:31PM INF transcode process started limit=1 module=hlsvod offset=13 submodule=manager
1:31PM INF new hls vod request hlsResource=1080p-00013.ts module=hlsvod path="video.mp4/1080p-00013.ts" vodMediaPath="../test_videos/h/video.mp4"
1:32PM INF transcode process returned a segment index=13 limit=1 module=hlsvod offset=13 segment=1080p-00013.ts submodule=manager
2022/12/08 14:32:04 FFmpeg process successfully finished.
1:32PM INF new hls vod request hlsResource=1080p-00014.ts module=hlsvod path="video.mp4/1080p-00014.ts" vodMediaPath="../test_videos/h/video.mp4"
1:32PM INF transcoding segments limit=1 module=hlsvod offset=14 segments-times=[112,120] submodule=manager
1:32PM INF transcode process finished index=14 limit=1 module=hlsvod offset=13 submodule=manager
2022/12/08 14:32:04 Starting FFmpeg process with args ./ffmpeg.exe -loglevel warning -ss 112.000000 -i ../test_videos/h/video.mp4 -to 120.000000 -copyts -force_key_frames 120.000000 -sn -vf scale=-2:1080 -filter_complex amix=inputs=2 -c:v h264_nvenc -preset p1 -tune:v ull -profile:v high -rc:v cbr -b:v 5000k -c:a aac -b:a 192k -f segment -segment_time_delta 0.2 -segment_format mpegts -segment_times 120.000000 -segment_start_number 14 -segment_list_type flat -segment_list pipe:1 ../test_videos/h/transcode\vod-1080p-47964795/1080p-%05d.ts
1:32PM INF transcode process started limit=1 module=hlsvod offset=14 submodule=manager
1:32PM INF new hls vod request hlsResource=1080p-00014.ts module=hlsvod path="video.mp4/1080p-00014.ts" vodMediaPath="../test_videos/h/video.mp4"
1:32PM INF new hls vod request hlsResource=1080p-00015.ts module=hlsvod path="video.mp4/1080p-00015.ts" vodMediaPath="../test_videos/h/video.mp4"
1:32PM INF transcoding segments limit=1 module=hlsvod offset=15 segments-times=[120,128] submodule=manager
2022/12/08 14:32:04 Starting FFmpeg process with args ./ffmpeg.exe -loglevel warning -ss 120.000000 -i ../test_videos/h/video.mp4 -to 128.000000 -copyts -force_key_frames 128.000000 -sn -vf scale=-2:1080 -filter_complex amix=inputs=2 -c:v h264_nvenc -preset p1 -tune:v ull -profile:v high -rc:v cbr -b:v 5000k -c:a aac -b:a 192k -f segment -segment_time_delta 0.2 -segment_format mpegts -segment_times 128.000000 -segment_start_number 15 -segment_list_type flat -segment_list pipe:1 ../test_videos/h/transcode\vod-1080p-47964795/1080p-%05d.ts
1:32PM INF new hls vod request hlsResource=1080p-00015.ts module=hlsvod path="video.mp4/1080p-00015.ts" vodMediaPath="../test_videos/h/video.mp4"
1:32PM INF transcoding segments limit=1 module=hlsvod offset=15 segments-times=[120,128] submodule=manager
2022/12/08 14:32:04 Starting FFmpeg process with args ./ffmpeg.exe -loglevel warning -ss 120.000000 -i ../test_videos/h/video.mp4 -to 128.000000 -copyts -force_key_frames 128.000000 -sn -vf scale=-2:1080 -filter_complex amix=inputs=2 -c:v h264_nvenc -preset p1 -tune:v ull -profile:v high -rc:v cbr -b:v 5000k -c:a aac -b:a 192k -f segment -segment_time_delta 0.2 -segment_format mpegts -segment_times 128.000000 -segment_start_number 15 -segment_list_type flat -segment_list pipe:1 ../test_videos/h/transcode\vod-1080p-47964795/1080p-%05d.ts
1:32PM INF transcode process started limit=1 module=hlsvod offset=15 submodule=manager
1:32PM INF transcode process started limit=1 module=hlsvod offset=15 submodule=manager
1:32PM INF new hls vod request hlsResource=1080p-00016.ts module=hlsvod path="video.mp4/1080p-00016.ts" vodMediaPath="../test_videos/h/video.mp4"
1:32PM INF transcoding segments limit=1 module=hlsvod offset=16 segments-times=[128,136] submodule=manager
2022/12/08 14:32:08 Starting FFmpeg process with args ./ffmpeg.exe -loglevel warning -ss 128.000000 -i ../test_videos/h/video.mp4 -to 136.000000 -copyts -force_key_frames 136.000000 -sn -vf scale=-2:1080 -filter_complex amix=inputs=2 -c:v h264_nvenc -preset p1 -tune:v ull -profile:v high -rc:v cbr -b:v 5000k -c:a aac -b:a 192k -f segment -segment_time_delta 0.2 -segment_format mpegts -segment_times 136.000000 -segment_start_number 16 -segment_list_type flat -segment_list pipe:1 ../test_videos/h/transcode\vod-1080p-47964795/1080p-%05d.ts
1:32PM INF new hls vod request hlsResource=1080p-00016.ts module=hlsvod path="video.mp4/1080p-00016.ts" vodMediaPath="../test_videos/h/video.mp4"
1:32PM INF transcoding segments limit=1 module=hlsvod offset=16 segments-times=[128,136] submodule=manager
2022/12/08 14:32:08 Starting FFmpeg process with args ./ffmpeg.exe -loglevel warning -ss 128.000000 -i ../test_videos/h/video.mp4 -to 136.000000 -copyts -force_key_frames 136.000000 -sn -vf scale=-2:1080 -filter_complex amix=inputs=2 -c:v h264_nvenc -preset p1 -tune:v ull -profile:v high -rc:v cbr -b:v 5000k -c:a aac -b:a 192k -f segment -segment_time_delta 0.2 -segment_format mpegts -segment_times 136.000000 -segment_start_number 16 -segment_list_type flat -segment_list pipe:1 ../test_videos/h/transcode\vod-1080p-47964795/1080p-%05d.ts
1:32PM INF transcode process started limit=1 module=hlsvod offset=16 submodule=manager
1:32PM INF transcode process started limit=1 module=hlsvod offset=16 submodule=manager
2022/12/08 14:32:09 [h264_nvenc @ 00000273a548f1c0] OpenEncodeSessionEx failed: out of memory (10): (no details)
2022/12/08 14:32:09 [h264_nvenc @ 00000273a548f1c0] No capable devices found
2022/12/08 14:32:09 Error initializing output stream 0:1 -- Error while opening encoder for output stream #0:1 - maybe incorrect parameters such as bit_rate, rate, width or height
2022/12/08 14:32:09 [h264_nvenc @ 00000282534df1c0] OpenEncodeSessionEx failed: out of memory (10): (no details)
2022/12/08 14:32:09 [h264_nvenc @ 00000282534df1c0] No capable devices found
2022/12/08 14:32:09 Error initializing output stream 0:1 -- Error while opening encoder for output stream #0:1 - maybe incorrect parameters such as bit_rate, rate, width or height
2022/12/08 14:32:09 FFmpeg process exited with error: exit status 1
1:32PM INF transcode process finished index=16 limit=1 module=hlsvod offset=16 submodule=manager
2022/12/08 14:32:09 FFmpeg process exited with error: exit status 1
1:32PM INF transcode process finished index=16 limit=1 module=hlsvod offset=16 submodule=manager
1:32PM INF transcode process returned a segment index=14 limit=1 module=hlsvod offset=14 segment=1080p-00014.ts submodule=manager
2022/12/08 14:32:10 FFmpeg process successfully finished.
1:32PM INF transcode process finished index=15 limit=1 module=hlsvod offset=14 submodule=manager
1:32PM INF transcode process returned a segment index=15 limit=1 module=hlsvod offset=15 segment=1080p-00015.ts submodule=manager
1:32PM INF transcode process returned a segment index=15 limit=1 module=hlsvod offset=15 segment=1080p-00015.ts submodule=manager
2022/12/08 14:32:11 FFmpeg process successfully finished.
1:32PM INF transcode process finished index=16 limit=1 module=hlsvod offset=15 submodule=manager
2022/12/08 14:32:11 FFmpeg process successfully finished.
1:32PM INF transcode process finished index=16 limit=1 module=hlsvod offset=15 submodule=manager
1:32PM WRN media transcode timeouted module=hlsvod submodule=manager
1:32PM WRN media transcode timeouted module=hlsvod submodule=manager
1:32PM WRN media transcode timeouted module=hlsvod submodule=manager
1:32PM INF new hls vod request hlsResource=1080p-00016.ts module=hlsvod path="video.mp4/1080p-00016.ts" vodMediaPath="../test_videos/h/video.mp4"
1:32PM INF new hls vod request hlsResource=1080p-00016.ts module=hlsvod path="video.mp4/1080p-00016.ts" vodMediaPath="../test_videos/h/video.mp4"
1:32PM WRN media transcode timeouted module=hlsvod submodule=manager
1:32PM WRN media transcode timeouted module=hlsvod submodule=manager
1:32PM INF new hls vod request hlsResource=1080p-00016.ts module=hlsvod path="video.mp4/1080p-00016.ts" vodMediaPath="../test_videos/h/video.mp4"
1:32PM INF new hls vod request hlsResource=1080p-00016.ts module=hlsvod path="video.mp4/1080p-00016.ts" vodMediaPath="../test_videos/h/video.mp4"
1:32PM WRN media transcode timeouted module=hlsvod submodule=manager
1:32PM WRN media transcode timeouted module=hlsvod submodule=manager
1:32PM INF new hls vod request hlsResource=1080p-00016.ts module=hlsvod path="video.mp4/1080p-00016.ts" vodMediaPath="../test_videos/h/video.mp4"
1:32PM INF new hls vod request hlsResource=1080p-00016.ts module=hlsvod path="video.mp4/1080p-00016.ts" vodMediaPath="../test_videos/h/video.mp4"
1:32PM WRN media transcode timeouted module=hlsvod submodule=manager
1:32PM WRN media transcode timeouted module=hlsvod submodule=manager
1:32PM INF new hls vod request hlsResource=1080p-00016.ts module=hlsvod path="video.mp4/1080p-00016.ts" vodMediaPath="../test_videos/h/video.mp4"
1:32PM INF new hls vod request hlsResource=1080p-00016.ts module=hlsvod path="video.mp4/1080p-00016.ts" vodMediaPath="../test_videos/h/video.mp4"
1:32PM WRN media transcode timeouted module=hlsvod submodule=manager
1:32PM WRN media transcode timeouted module=hlsvod submodule=manager
1:32PM INF new hls vod request hlsResource=1080p-00016.ts module=hlsvod path="video.mp4/1080p-00016.ts" vodMediaPath="../test_videos/h/video.mp4"
1:32PM INF new hls vod request hlsResource=1080p-00016.ts module=hlsvod path="video.mp4/1080p-00016.ts" vodMediaPath="../test_videos/h/video.mp4"
1:33PM WRN media transcode timeouted module=hlsvod submodule=manager
1:33PM WRN media transcode timeouted module=hlsvod submodule=manager
1:33PM INF new hls vod request hlsResource=1080p-00016.ts module=hlsvod path="video.mp4/1080p-00016.ts" vodMediaPath="../test_videos/h/video.mp4"
1:33PM INF new hls vod request hlsResource=1080p-00016.ts module=hlsvod path="video.mp4/1080p-00016.ts" vodMediaPath="../test_videos/h/video.mp4"
1:33PM WRN media transcode timeouted module=hlsvod submodule=manager
1:33PM WRN media transcode timeouted module=hlsvod submodule=manager

Question: mp4 proxy

Hello, testing now for VOD project and everything is working great, amazing project! Thank you very much for an excellent transcoder. I have been researching for days on how to do this and your work is a great solution.

I see the HLS proxy, is it possible to proxy MP4?

Pull from a remote server https://remote-server.com/move.mp4

Error on probe

Error:
4:47PM ERR unable to load metadata error="unable probe video for keyframes: strconv.ParseFloat: parsing "": invalid syntax"

When I do the ffprobe in terminal I get this result:
ffprobe -v error -skip_frame nokey -show_entries frame=pkt_pts_time,side_data_list -show_entries format=duration -show_entries stream=duration,width,height -select_streams v -of json MYVIDEO.mkv

{
    "frames": [
        {
            "side_data_list": [
                {

                },
                {

                }
            ]
        },
        {
            "pkt_pts_time": "0.000000"
        },
        {
            "pkt_pts_time": "2.002000"
        },
        {
            "pkt_pts_time": "3.712000"
        },
        {
            "pkt_pts_time": "8.592000"
        },
.............................

Could be the side_data_list?

Usage examples

Hello
could you share some of usage example for this module?
TNX

simple routes

  • /id/720p.mp4 <-- h264_720p/id
  • /id/720p.m3u8 <-- h264_720p/id/index.m3u8
  • /id.m3u8 <-- master playlist for quality list, maybe audio/subtitle language in future (unimplemented)
  • /id.mp4 <-- /copy/id
  • /test <-- /test
  • /test.m3u8 <-- hls test output (unimplemented)
  • same we can add .mpeg-dash, .webrtc url "extension" in future

test is reserved stream name, we can use "/.route" if we need more static routes (no suggestion here) it will not match regex for streams

add HLS decryptor

Module hlsdec that takes encrypted stream input and decrypts segments, whilte it caches decryption keys.

Maybe hlsenc encryptor too.

transcode static video files

inspiration hls-vod-too

  • ffprobe to find duration and segment count
  • transcode/cache by segment number in file

edit: for static streams maybe config should support directories? library: /media/video in config can serve all files/directories with /profile/library/folder/video.mkv/index.m3u8 (or other url format from #13)

hlsvod: add cleanup strategy

If transcoded semgents should be cleaned up in intervals, after program exit, never (and be reused next time)....

Custom m3u8 for map audio

When video has multiple audio, maybe it would be nice if we can choose the best audio language, the ffprobe can give all index audio.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.