mirror of
https://github.com/saily/vnc-recorder.git
synced 2025-06-28 06:26:54 +00:00
Merge pull request #1 from Depau/master
Convert to go module and update vnc2video usage
This commit is contained in:
commit
4270d3c2d9
@ -1,4 +0,0 @@
|
|||||||
*
|
|
||||||
!*.go
|
|
||||||
!*.toml
|
|
||||||
!*.lock
|
|
14
Dockerfile
14
Dockerfile
@ -1,17 +1,13 @@
|
|||||||
FROM golang:alpine as build-env
|
FROM golang:alpine as build-env
|
||||||
LABEL maintainer="daniel@widerin.net"
|
LABEL maintainer="daniel@widerin.net"
|
||||||
|
|
||||||
ENV GOBIN /go/bin
|
ENV GO111MODULE=on
|
||||||
|
RUN apk --no-cache add git
|
||||||
|
|
||||||
RUN mkdir /go/src/app && \
|
COPY . /app
|
||||||
apk --no-cache add git curl && \
|
WORKDIR /app
|
||||||
curl -sSL https://raw.githubusercontent.com/golang/dep/master/install.sh | sh
|
|
||||||
|
|
||||||
ADD . /go/src/app
|
RUN ls -lahR && go mod download && go build -o /vnc-recorder
|
||||||
WORKDIR /go/src/app
|
|
||||||
|
|
||||||
RUN dep ensure && \
|
|
||||||
go build -o /vnc-recorder .
|
|
||||||
|
|
||||||
FROM jrottenberg/ffmpeg:4.0-alpine
|
FROM jrottenberg/ffmpeg:4.0-alpine
|
||||||
COPY --from=build-env /vnc-recorder /
|
COPY --from=build-env /vnc-recorder /
|
||||||
|
66
Gopkg.lock
generated
66
Gopkg.lock
generated
@ -1,66 +0,0 @@
|
|||||||
# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'.
|
|
||||||
|
|
||||||
|
|
||||||
[[projects]]
|
|
||||||
branch = "reusable-encoders"
|
|
||||||
digest = "1:c9c2a078726605536f2c71e7a282e9f267dac31ac27379d63fd91bc6215fba84"
|
|
||||||
name = "github.com/amitbet/vnc2video"
|
|
||||||
packages = [
|
|
||||||
".",
|
|
||||||
"encoders",
|
|
||||||
]
|
|
||||||
pruneopts = "UT"
|
|
||||||
revision = "22e16ea7e65b4c8682938bed11aab7576c22533f"
|
|
||||||
source = "https://github.com/saily/vnc2video.git"
|
|
||||||
|
|
||||||
[[projects]]
|
|
||||||
branch = "master"
|
|
||||||
digest = "1:7644c593fbd72dfeda547b10e0aba09fbce3c53edd45cb9e4b287184ca82d8a4"
|
|
||||||
name = "github.com/icza/mjpeg"
|
|
||||||
packages = ["."]
|
|
||||||
pruneopts = "UT"
|
|
||||||
revision = "85dfbe473743c5a48253effd11423ae2d82ac15b"
|
|
||||||
|
|
||||||
[[projects]]
|
|
||||||
digest = "1:31e761d97c76151dde79e9d28964a812c46efc5baee4085b86f68f0c654450de"
|
|
||||||
name = "github.com/konsorten/go-windows-terminal-sequences"
|
|
||||||
packages = ["."]
|
|
||||||
pruneopts = "UT"
|
|
||||||
revision = "f55edac94c9bbba5d6182a4be46d86a2c9b5b50e"
|
|
||||||
version = "v1.0.2"
|
|
||||||
|
|
||||||
[[projects]]
|
|
||||||
digest = "1:04457f9f6f3ffc5fea48e71d62f2ca256637dee0a04d710288e27e05c8b41976"
|
|
||||||
name = "github.com/sirupsen/logrus"
|
|
||||||
packages = ["."]
|
|
||||||
pruneopts = "UT"
|
|
||||||
revision = "839c75faf7f98a33d445d181f3018b5c3409a45e"
|
|
||||||
version = "v1.4.2"
|
|
||||||
|
|
||||||
[[projects]]
|
|
||||||
digest = "1:b24d38b282bacf9791408a080f606370efa3d364e4b5fd9ba0f7b87786d3b679"
|
|
||||||
name = "github.com/urfave/cli"
|
|
||||||
packages = ["."]
|
|
||||||
pruneopts = "UT"
|
|
||||||
revision = "cfb38830724cc34fedffe9a2a29fb54fa9169cd1"
|
|
||||||
version = "v1.20.0"
|
|
||||||
|
|
||||||
[[projects]]
|
|
||||||
branch = "master"
|
|
||||||
digest = "1:8f5108406bc43c7669b0d67d282e40d05c9f268615fcaf8c1f0f76965aa3f09f"
|
|
||||||
name = "golang.org/x/sys"
|
|
||||||
packages = ["unix"]
|
|
||||||
pruneopts = "UT"
|
|
||||||
revision = "4c4f7f33c9ed00de01c4c741d2177abfcfe19307"
|
|
||||||
|
|
||||||
[solve-meta]
|
|
||||||
analyzer-name = "dep"
|
|
||||||
analyzer-version = 1
|
|
||||||
input-imports = [
|
|
||||||
"github.com/amitbet/vnc2video",
|
|
||||||
"github.com/amitbet/vnc2video/encoders",
|
|
||||||
"github.com/sirupsen/logrus",
|
|
||||||
"github.com/urfave/cli",
|
|
||||||
]
|
|
||||||
solver-name = "gps-cdcl"
|
|
||||||
solver-version = 1
|
|
43
Gopkg.toml
43
Gopkg.toml
@ -1,43 +0,0 @@
|
|||||||
# Gopkg.toml example
|
|
||||||
#
|
|
||||||
# Refer to https://golang.github.io/dep/docs/Gopkg.toml.html
|
|
||||||
# for detailed Gopkg.toml documentation.
|
|
||||||
#
|
|
||||||
# required = ["github.com/user/thing/cmd/thing"]
|
|
||||||
# ignored = ["github.com/user/project/pkgX", "bitbucket.org/user/project/pkgA/pkgY"]
|
|
||||||
#
|
|
||||||
# [[constraint]]
|
|
||||||
# name = "github.com/user/project"
|
|
||||||
# version = "1.0.0"
|
|
||||||
#
|
|
||||||
# [[constraint]]
|
|
||||||
# name = "github.com/user/project2"
|
|
||||||
# branch = "dev"
|
|
||||||
# source = "github.com/myfork/project2"
|
|
||||||
#
|
|
||||||
# [[override]]
|
|
||||||
# name = "github.com/x/y"
|
|
||||||
# version = "2.4.0"
|
|
||||||
#
|
|
||||||
# [prune]
|
|
||||||
# non-go = false
|
|
||||||
# go-tests = true
|
|
||||||
# unused-packages = true
|
|
||||||
|
|
||||||
|
|
||||||
[[constraint]]
|
|
||||||
name = "github.com/sirupsen/logrus"
|
|
||||||
version = "1.4.2"
|
|
||||||
|
|
||||||
[[constraint]]
|
|
||||||
name = "github.com/urfave/cli"
|
|
||||||
version = "1.20.0"
|
|
||||||
|
|
||||||
[[constraint]]
|
|
||||||
name = "github.com/amitbet/vnc2video"
|
|
||||||
source = "https://github.com/saily/vnc2video.git"
|
|
||||||
branch = "reusable-encoders"
|
|
||||||
|
|
||||||
[prune]
|
|
||||||
go-tests = true
|
|
||||||
unused-packages = true
|
|
9
go.mod
Normal file
9
go.mod
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
module github.com/saily/vnc-recorder
|
||||||
|
|
||||||
|
go 1.13
|
||||||
|
|
||||||
|
require (
|
||||||
|
github.com/amitbet/vnc2video v0.0.0-20190616012314-9d50b9dab1d9
|
||||||
|
github.com/sirupsen/logrus v1.6.0
|
||||||
|
github.com/urfave/cli v1.22.4
|
||||||
|
)
|
24
go.sum
Normal file
24
go.sum
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
|
||||||
|
github.com/amitbet/vnc2video v0.0.0-20190616012314-9d50b9dab1d9 h1:vYU4bpShNx2qwirTqqnGZ2wYicExu4q2lQNP4u7xafM=
|
||||||
|
github.com/amitbet/vnc2video v0.0.0-20190616012314-9d50b9dab1d9/go.mod h1:zc4FYPGD82PqOVHtzkQiz7zHHxumVoVQ4Ij0RzvOIJQ=
|
||||||
|
github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d h1:U+s90UTSYgptZMwQh2aRr3LuazLJIa+Pg3Kc1ylSYVY=
|
||||||
|
github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
|
||||||
|
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||||
|
github.com/icza/mjpeg v0.0.0-20170217094447-85dfbe473743 h1:u5kZEGcjrCRAS99gyW/wptM3KjGYkVv80WKexNvxBuA=
|
||||||
|
github.com/icza/mjpeg v0.0.0-20170217094447-85dfbe473743/go.mod h1:Eja3x31oRrEOzl6ihhsxY23gXaTYWLP3Gwj5nMAJ7m0=
|
||||||
|
github.com/konsorten/go-windows-terminal-sequences v1.0.3 h1:CE8S1cTafDpPvMhIxNJKvHsGVBgn1xWYf1NbHQhywc8=
|
||||||
|
github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
|
||||||
|
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||||
|
github.com/russross/blackfriday/v2 v2.0.1 h1:lPqVAte+HuHNfhJ/0LC98ESWRz8afy9tM/0RK8m9o+Q=
|
||||||
|
github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
|
||||||
|
github.com/shurcooL/sanitized_anchor_name v1.0.0 h1:PdmoCO6wvbs+7yrJyMORt4/BmY5IYyJwS/kOiWx8mHo=
|
||||||
|
github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc=
|
||||||
|
github.com/sirupsen/logrus v1.6.0 h1:UBcNElsrwanuuMsnGSlYmtmgbb23qDR5dG+6X6Oo89I=
|
||||||
|
github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88=
|
||||||
|
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
|
||||||
|
github.com/urfave/cli v1.22.4 h1:u7tSpNPPswAFymm8IehJhy4uJMlUuU/GmqSkvJ1InXA=
|
||||||
|
github.com/urfave/cli v1.22.4/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0=
|
||||||
|
golang.org/x/sys v0.0.0-20190422165155-953cdadca894 h1:Cz4ceDQGXuKRnVBDTS23GTn/pU5OE2C0WrNTOYK1Uuc=
|
||||||
|
golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
|
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||||
|
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
43
main.go
43
main.go
@ -3,6 +3,8 @@ package main
|
|||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
vnc "github.com/amitbet/vnc2video"
|
||||||
|
"github.com/amitbet/vnc2video/encoders"
|
||||||
log "github.com/sirupsen/logrus"
|
log "github.com/sirupsen/logrus"
|
||||||
"github.com/urfave/cli"
|
"github.com/urfave/cli"
|
||||||
"net"
|
"net"
|
||||||
@ -10,11 +12,8 @@ import (
|
|||||||
"os/exec"
|
"os/exec"
|
||||||
"os/signal"
|
"os/signal"
|
||||||
"path"
|
"path"
|
||||||
"strconv"
|
|
||||||
"syscall"
|
"syscall"
|
||||||
"time"
|
"time"
|
||||||
vnc "github.com/amitbet/vnc2video"
|
|
||||||
"github.com/amitbet/vnc2video/encoders"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
@ -94,12 +93,19 @@ func recorder(c *cli.Context) error {
|
|||||||
cchClient := make(chan vnc.ClientMessage)
|
cchClient := make(chan vnc.ClientMessage)
|
||||||
errorCh := make(chan error)
|
errorCh := make(chan error)
|
||||||
|
|
||||||
ccfg := &vnc.ClientConfig{
|
var secHandlers []vnc.SecurityHandler
|
||||||
SecurityHandlers: []vnc.SecurityHandler{
|
if c.String("password") == "" {
|
||||||
// &vnc.ClientAuthATEN{Username: []byte(os.Args[2]), Password: []byte(os.Args[3])}
|
secHandlers = []vnc.SecurityHandler{
|
||||||
&vnc.ClientAuthVNC{Password: []byte(c.String("password"))},
|
|
||||||
&vnc.ClientAuthNone{},
|
&vnc.ClientAuthNone{},
|
||||||
},
|
}
|
||||||
|
} else {
|
||||||
|
secHandlers = []vnc.SecurityHandler{
|
||||||
|
&vnc.ClientAuthVNC{Password: []byte(c.String("password"))},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ccfg := &vnc.ClientConfig{
|
||||||
|
SecurityHandlers: secHandlers,
|
||||||
DrawCursor: true,
|
DrawCursor: true,
|
||||||
PixelFormat: vnc.PixelFormat32bit,
|
PixelFormat: vnc.PixelFormat32bit,
|
||||||
ClientMessageCh: cchClient,
|
ClientMessageCh: cchClient,
|
||||||
@ -133,24 +139,13 @@ func recorder(c *cli.Context) error {
|
|||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
log.Infof("Using %s for encoding", ffmpeg_path)
|
log.Infof("Using %s for encoding", ffmpeg_path)
|
||||||
vcodec := &encoders.Encoder{
|
vcodec := &encoders.X264ImageEncoder{
|
||||||
BinPath: ffmpeg_path,
|
FFMpegBinPath: ffmpeg_path,
|
||||||
Framerate: c.Int("framerate"),
|
Framerate: c.Int("framerate"),
|
||||||
Cmd: exec.Command(ffmpeg_path,
|
|
||||||
"-f", "image2pipe",
|
|
||||||
"-vcodec", "ppm",
|
|
||||||
"-r", strconv.Itoa(c.Int("framerate")),
|
|
||||||
"-an", // no audio
|
|
||||||
"-y",
|
|
||||||
"-i", "-",
|
|
||||||
"-vcodec", "libx264", //"libvpx",//"libvpx-vp9"//"libx264"
|
|
||||||
"-preset", "fast",
|
|
||||||
"-crf", "24",
|
|
||||||
c.String("outfile"),
|
|
||||||
),
|
|
||||||
}
|
}
|
||||||
|
|
||||||
go vcodec.Run()
|
//goland:noinspection GoUnhandledErrorResult
|
||||||
|
go vcodec.Run(c.String("outfile"))
|
||||||
|
|
||||||
for _, enc := range ccfg.Encodings {
|
for _, enc := range ccfg.Encodings {
|
||||||
myRenderer, ok := enc.(vnc.Renderer)
|
myRenderer, ok := enc.(vnc.Renderer)
|
||||||
@ -190,7 +185,7 @@ func recorder(c *cli.Context) error {
|
|||||||
syscall.SIGHUP,
|
syscall.SIGHUP,
|
||||||
syscall.SIGINT,
|
syscall.SIGINT,
|
||||||
syscall.SIGTERM,
|
syscall.SIGTERM,
|
||||||
syscall.SIGQUIT, )
|
syscall.SIGQUIT)
|
||||||
frameBufferReq := 0
|
frameBufferReq := 0
|
||||||
timeStart := time.Now()
|
timeStart := time.Now()
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user