diff --git a/multimedia/dms/Makefile b/multimedia/dms/Makefile new file mode 100644 index 00000000000..1d241cbe012 --- /dev/null +++ b/multimedia/dms/Makefile @@ -0,0 +1,36 @@ +COMMENT = UPnP DLNA server with transcoding +CATEGORIES = multimedia net + +MODGO_MODNAME = github.com/anacrolix/dms +MODGO_VERSION = v1.7.2 +DISTNAME = dms-${MODGO_VERSION} + +HOMEPAGE = https://github.com/anacrolix/dms + +MAINTAINER = Klemens Nanni + +# BSD 3-clause +PERMIT_PACKAGE = Yes + +WANTLIB = c pthread + +SITES.ipv6 = https://${MODGO_MODNAME}/commit/ +# first commit after release: "feat: add IPv6 support for SSDP" +PATCHFILES.ipv6 = 105c744ed2138c85167c2d8b66cb3830694fba24.patch +# pending "Ensure :: in -http argument ends up as IPv6 socket" +# https://github.com/anacrolix/dms/pull/171 +PATCHFILES.ipv6 += a16a4b302c6525a13acbb4c22571a19c2a62a905.patch +PATCH_DIST_STRIP = -p1 + +# make patch and update-patches work +WRKDIST = ${WRKSRC} + +MODULES = lang/go + +# '-forceTranscodeTo vp8' currently wants unported avconv, but that is subject +# to change upstream already, so just leave it. +RUN_DEPENDS = graphics/ffmpeg \ + graphics/ffmpegthumbnailer + +.include "modules.inc" +.include diff --git a/multimedia/dms/distinfo b/multimedia/dms/distinfo new file mode 100644 index 00000000000..5af4f2be070 --- /dev/null +++ b/multimedia/dms/distinfo @@ -0,0 +1,120 @@ +SHA256 (105c744ed2138c85167c2d8b66cb3830694fba24.patch) = 5lZ5D0mBBcpNqFhWJPgcaQycHw69aNrRQueTOgXi9Sk= +SHA256 (a16a4b302c6525a13acbb4c22571a19c2a62a905.patch) = kJZfycCtejV7GA+S7sSfD868gAsJm8FjWJ10Qgvgkek= +SHA256 (dms-v1.7.2.zip) = vC7MT4lesy4ZTTswu4hSZdwbzrNPUIc2hATCzFZt+8Q= +SHA256 (go_modules/github.com/anacrolix/envpprof/@v/v1.0.0.mod) = DvyYIC+xlI19QnUjisxre2TxKn8faLyJcs6e3ME1ky0= +SHA256 (go_modules/github.com/anacrolix/envpprof/@v/v1.0.0.zip) = pCza9Xjf/7rNzYrwn/lDOykgDUf/cCcv8rvoS1cg76k= +SHA256 (go_modules/github.com/anacrolix/ffprobe/@v/v1.1.0.mod) = ghkdW71/THNzgDJ3Qx7OuRofd6cUNXY2dX/jRV+1Fwk= +SHA256 (go_modules/github.com/anacrolix/ffprobe/@v/v1.1.0.zip) = mRrySRIdfR84iElbS66CziGToJ8t93KXReOIBTjGxVE= +SHA256 (go_modules/github.com/anacrolix/generics/@v/v0.0.0-20230113004304-d6428d516633.mod) = 23fAT/adzjqMyIV9El0L5Hd5kH7j3WhtGes+z6wvCUo= +SHA256 (go_modules/github.com/anacrolix/generics/@v/v0.0.1.mod) = 23fAT/adzjqMyIV9El0L5Hd5kH7j3WhtGes+z6wvCUo= +SHA256 (go_modules/github.com/anacrolix/generics/@v/v0.0.1.zip) = vo0lN7tUyr8rztHmysyYyXJtmSUg/mEg2B3QNd9fKdQ= +SHA256 (go_modules/github.com/anacrolix/log/@v/v0.15.2.mod) = 9E25cTJBvLb2Tlcr3vtmYZffJrhDqxjl0awp0xbBCmA= +SHA256 (go_modules/github.com/anacrolix/log/@v/v0.15.2.zip) = zo9c0lXqUTeyQB8/3nbElaMo0dAgOeY33DKCrcsO+lU= +SHA256 (go_modules/github.com/anacrolix/missinggo/@v/v1.1.0.mod) = KpurmU2ZzMP7eEyXV2+L6fvbb04WAQYdnZ/JJCA2gxY= +SHA256 (go_modules/github.com/anacrolix/missinggo/@v/v1.1.0.zip) = vbou1pF+BWtRErBZ7KX0wpLNXmO14ADREE5wl3IBZEM= +SHA256 (go_modules/github.com/bradfitz/iter/@v/v0.0.0-20140124041915-454541ec3da2.mod) = K5+SPCdbb/mCn3Bb/r3egVX6y2Y7FGHqnE2RUaFyd9o= +SHA256 (go_modules/github.com/bradfitz/iter/@v/v0.0.0-20140124041915-454541ec3da2.zip) = xDkXRq7RbNpnfGo0VhqkhY/yosmpUgxq3sh27EKZjOY= +SHA256 (go_modules/github.com/davecgh/go-spew/@v/v1.1.0.mod) = vLKTkyUSN7eaF7bBm/KRNPQ+j0OMMZiYj81GGhzfBcw= +SHA256 (go_modules/github.com/davecgh/go-spew/@v/v1.1.1.mod) = vLKTkyUSN7eaF7bBm/KRNPQ+j0OMMZiYj81GGhzfBcw= +SHA256 (go_modules/github.com/davecgh/go-spew/@v/v1.1.1.zip) = a0SoQ5UfNxtwEMdU7MPKvv6BXVztHFuUCfstaX6KiQ0= +SHA256 (go_modules/github.com/frankban/quicktest/@v/v1.14.4.mod) = aLKthKInPSO6xKV0F3Wj+llKB9KnH4DoR6fWPFOlvZ8= +SHA256 (go_modules/github.com/frankban/quicktest/@v/v1.14.4.zip) = 3uueG53Rg2Lt50i1+TfQguZ8Q/J5wmWnOxT1yDbvXWo= +SHA256 (go_modules/github.com/google/go-cmp/@v/v0.5.9.mod) = 58dmnUod1Ym6PgJLon9D8pPbYR/gdc4g17iENw1j/r0= +SHA256 (go_modules/github.com/google/go-cmp/@v/v0.6.0.mod) = 58dmnUod1Ym6PgJLon9D8pPbYR/gdc4g17iENw1j/r0= +SHA256 (go_modules/github.com/google/go-cmp/@v/v0.6.0.zip) = S06b9sSCEQgGUbSR37SNaLc2xmowW8+UYFYG4bouqko= +SHA256 (go_modules/github.com/kr/pretty/@v/v0.3.1.mod) = hPPkCAOx69SoAuVXlLmZffCxc8SAnoVy/5BC7FWMobw= +SHA256 (go_modules/github.com/kr/pretty/@v/v0.3.1.zip) = 7PWkrySCbDrXWM4GQQygji1Y5NlQU747nd4uFIUsDNw= +SHA256 (go_modules/github.com/kr/text/@v/v0.2.0.mod) = 9jh5sgT2zolc6lNZS4FPWsCvCEhrM7HKecZXOE77xyY= +SHA256 (go_modules/github.com/kr/text/@v/v0.2.0.zip) = No6zGPkaW2e+kFxHAyq1wxodSal4SLEBGg0KISKzC6Q= +SHA256 (go_modules/github.com/nfnt/resize/@v/v0.0.0-20180221191011-83c6a9932646.mod) = UShf/MHJ0yYhc7wa9g61MWz7hDcwPFpgAWtjvn9PktI= +SHA256 (go_modules/github.com/nfnt/resize/@v/v0.0.0-20180221191011-83c6a9932646.zip) = uOl8sU5eXvKddi0t/4kPYnmhJZkN35y3rlxNKgFbEJw= +SHA256 (go_modules/github.com/pmezard/go-difflib/@v/v1.0.0.mod) = dLLnZushU3eGTVh7rfV+lVIfaS0qeGCzx3WQk/nJvsI= +SHA256 (go_modules/github.com/pmezard/go-difflib/@v/v1.0.0.zip) = 3gTOzBpLjVPkNXBRAmeUvLxU8uaiYM+sUIzmnV1kV6A= +SHA256 (go_modules/github.com/rogpeppe/go-internal/@v/v1.9.0.mod) = kFmpfaKZDIGaCXZ6XpvYeEtFpXt6JeKQVbvRsKqhRP8= +SHA256 (go_modules/github.com/rogpeppe/go-internal/@v/v1.9.0.zip) = fXd5CLnJGhaF8tcJVQ5rdHjhTpxGmd/9fwoVDjbbx+k= +SHA256 (go_modules/github.com/stretchr/testify/@v/v1.3.0.mod) = qwY9UVSo6HMLztTFJpjldw61C/rjR768NeykiLjj9uM= +SHA256 (go_modules/github.com/stretchr/testify/@v/v1.8.1.mod) = rxpdyzMazno/n8G11+7pwLyCtKKhgv5M7CrdIX4oU9Y= +SHA256 (go_modules/github.com/stretchr/testify/@v/v1.8.1.zip) = NvZOTyKfh2cu+N4cdWZIxBZedqvQNDYlF1eDl+gkhWw= +SHA256 (go_modules/golang.org/x/crypto/@v/v0.24.0.mod) = TfsA4zw5LLQjnS/FtlBpqR3vs7YZC7i5dyYmfuLnRfs= +SHA256 (go_modules/golang.org/x/crypto/@v/v0.24.0.zip) = eFO1CX3q4N6H8TYaDGPQHwm/QajiD3AzOIQmqWGqnTg= +SHA256 (go_modules/golang.org/x/exp/@v/v0.0.0-20220428152302-39d4317da171.mod) = 2xLf5Sji5F9WmEsb0fzMU4xUTuJ8IVnzE3Jy/45ZULw= +SHA256 (go_modules/golang.org/x/exp/@v/v0.0.0-20240613232115-7f521ea00fb8.mod) = LRDDzkV7/O9vXZLxXLBCpFruxmXpIS/9SUSJANeeQHU= +SHA256 (go_modules/golang.org/x/exp/@v/v0.0.0-20240613232115-7f521ea00fb8.zip) = brJmgK8qpY7zw0e3mjRie9rM2CZMjVRN747zS9eZu2c= +SHA256 (go_modules/golang.org/x/mod/@v/v0.18.0.mod) = XErAMQolMwdXA5zPOpjnX+/by31ETd0EkjAAOkSUW94= +SHA256 (go_modules/golang.org/x/mod/@v/v0.18.0.zip) = nGSj79pDySAUZ1NhsmIN4fKBXVmHWjefCzNhAY5b31k= +SHA256 (go_modules/golang.org/x/net/@v/v0.26.0.mod) = 82mj44SGDykPhwGlhZt2CTrof6JdWHyMnIFqLC40p5w= +SHA256 (go_modules/golang.org/x/net/@v/v0.26.0.zip) = PqkMFHQiacfB1SF7wePPWKcVUuVyT9QP+mm6UaEzrbA= +SHA256 (go_modules/golang.org/x/sync/@v/v0.7.0.mod) = cA5dsA3SaqGaF9zl/FUkNtYPaMVgbIW4IfJMPWByoVE= +SHA256 (go_modules/golang.org/x/sync/@v/v0.7.0.zip) = ILAQhSQOZhv/x/WTg/IbkPES1ml4QiDG5ZyAEkMhbSI= +SHA256 (go_modules/golang.org/x/sys/@v/v0.21.0.mod) = 0iezJfYh9OvijTm6dz6pm4cPOTt8CcNFksNlsW3VYN4= +SHA256 (go_modules/golang.org/x/sys/@v/v0.21.0.zip) = JYj053yDd0vG8WjoWU8ty9IcHSaEmod/fmoNFROS5zU= +SHA256 (go_modules/golang.org/x/term/@v/v0.21.0.mod) = lr7v7NJLCYAqci5gIBTC15xPekwyjMdSEr60AtyQM5c= +SHA256 (go_modules/golang.org/x/term/@v/v0.21.0.zip) = O6WcXJKcUm4L8BZpbbj/7DE7Q4dkKGd+zaQZgxKm9pY= +SHA256 (go_modules/golang.org/x/text/@v/v0.16.0.mod) = ChicdviH/nAsHxkZtDLcIejiMbXDI6N6Cz9yMB6QZsU= +SHA256 (go_modules/golang.org/x/text/@v/v0.16.0.zip) = m3wFdciUIkvH+F36LvsO+T19VK6WLNlcjekM7LQH3pQ= +SHA256 (go_modules/golang.org/x/tools/@v/v0.22.0.mod) = cf0XssEb8eaLYH/TgnrjtX2H7PRxsFMjic+iCIsv6zo= +SHA256 (go_modules/golang.org/x/tools/@v/v0.22.0.zip) = bBLNQZ2ZcpD+u0QWmNDlLKtacb6VmsfE3QI/hrLQHR4= +SHA256 (go_modules/gopkg.in/check.v1/@v/v1.0.0-20190902080502-41f04d3bba15.mod) = XDBuDWM81moRtA4uX7vG2kIRDbfXLqPBUkzrRe5Awz8= +SHA256 (go_modules/gopkg.in/check.v1/@v/v1.0.0-20190902080502-41f04d3bba15.zip) = AEU3yxnb5FlU7BYF8zFwX2aFzMJn7d1CicHrJ1E6uBc= +SHA256 (go_modules/gopkg.in/yaml.v3/@v/v3.0.1.mod) = IVeYYKIDBvz0OxvSNNH7oxlJnHdhG3HAX5vzupDauTk= +SHA256 (go_modules/gopkg.in/yaml.v3/@v/v3.0.1.zip) = qrj7xOYwDqCOav4crqGKIckMefSJ9SxT4vIEMfGpoBU= +SIZE (105c744ed2138c85167c2d8b66cb3830694fba24.patch) = 5670 +SIZE (a16a4b302c6525a13acbb4c22571a19c2a62a905.patch) = 2866 +SIZE (dms-v1.7.2.zip) = 85393 +SIZE (go_modules/github.com/anacrolix/envpprof/@v/v1.0.0.mod) = 37 +SIZE (go_modules/github.com/anacrolix/envpprof/@v/v1.0.0.zip) = 2004 +SIZE (go_modules/github.com/anacrolix/ffprobe/@v/v1.1.0.mod) = 354 +SIZE (go_modules/github.com/anacrolix/ffprobe/@v/v1.1.0.zip) = 12782 +SIZE (go_modules/github.com/anacrolix/generics/@v/v0.0.0-20230113004304-d6428d516633.mod) = 107 +SIZE (go_modules/github.com/anacrolix/generics/@v/v0.0.1.mod) = 107 +SIZE (go_modules/github.com/anacrolix/generics/@v/v0.0.1.zip) = 22962 +SIZE (go_modules/github.com/anacrolix/log/@v/v0.15.2.mod) = 650 +SIZE (go_modules/github.com/anacrolix/log/@v/v0.15.2.zip) = 25999 +SIZE (go_modules/github.com/anacrolix/missinggo/@v/v1.1.0.mod) = 1448 +SIZE (go_modules/github.com/anacrolix/missinggo/@v/v1.1.0.zip) = 114086 +SIZE (go_modules/github.com/bradfitz/iter/@v/v0.0.0-20140124041915-454541ec3da2.mod) = 32 +SIZE (go_modules/github.com/bradfitz/iter/@v/v0.0.0-20140124041915-454541ec3da2.zip) = 1524 +SIZE (go_modules/github.com/davecgh/go-spew/@v/v1.1.0.mod) = 34 +SIZE (go_modules/github.com/davecgh/go-spew/@v/v1.1.1.mod) = 34 +SIZE (go_modules/github.com/davecgh/go-spew/@v/v1.1.1.zip) = 60320 +SIZE (go_modules/github.com/frankban/quicktest/@v/v1.14.4.mod) = 121 +SIZE (go_modules/github.com/frankban/quicktest/@v/v1.14.4.zip) = 55637 +SIZE (go_modules/github.com/google/go-cmp/@v/v0.5.9.mod) = 41 +SIZE (go_modules/github.com/google/go-cmp/@v/v0.6.0.mod) = 41 +SIZE (go_modules/github.com/google/go-cmp/@v/v0.6.0.zip) = 129773 +SIZE (go_modules/github.com/kr/pretty/@v/v0.3.1.mod) = 117 +SIZE (go_modules/github.com/kr/pretty/@v/v0.3.1.zip) = 13388 +SIZE (go_modules/github.com/kr/text/@v/v0.2.0.mod) = 68 +SIZE (go_modules/github.com/kr/text/@v/v0.2.0.zip) = 12607 +SIZE (go_modules/github.com/nfnt/resize/@v/v0.0.0-20180221191011-83c6a9932646.mod) = 30 +SIZE (go_modules/github.com/nfnt/resize/@v/v0.0.0-20180221191011-83c6a9932646.zip) = 21438 +SIZE (go_modules/github.com/pmezard/go-difflib/@v/v1.0.0.mod) = 37 +SIZE (go_modules/github.com/pmezard/go-difflib/@v/v1.0.0.zip) = 12433 +SIZE (go_modules/github.com/rogpeppe/go-internal/@v/v1.9.0.mod) = 112 +SIZE (go_modules/github.com/rogpeppe/go-internal/@v/v1.9.0.zip) = 210263 +SIZE (go_modules/github.com/stretchr/testify/@v/v1.3.0.mod) = 154 +SIZE (go_modules/github.com/stretchr/testify/@v/v1.8.1.mod) = 188 +SIZE (go_modules/github.com/stretchr/testify/@v/v1.8.1.zip) = 113583 +SIZE (go_modules/golang.org/x/crypto/@v/v0.24.0.mod) = 190 +SIZE (go_modules/golang.org/x/crypto/@v/v0.24.0.zip) = 1803483 +SIZE (go_modules/golang.org/x/exp/@v/v0.0.0-20220428152302-39d4317da171.mod) = 309 +SIZE (go_modules/golang.org/x/exp/@v/v0.0.0-20240613232115-7f521ea00fb8.mod) = 179 +SIZE (go_modules/golang.org/x/exp/@v/v0.0.0-20240613232115-7f521ea00fb8.zip) = 629051 +SIZE (go_modules/golang.org/x/mod/@v/v0.18.0.mod) = 84 +SIZE (go_modules/golang.org/x/mod/@v/v0.18.0.zip) = 166237 +SIZE (go_modules/golang.org/x/net/@v/v0.26.0.mod) = 155 +SIZE (go_modules/golang.org/x/net/@v/v0.26.0.zip) = 1836588 +SIZE (go_modules/golang.org/x/sync/@v/v0.7.0.mod) = 34 +SIZE (go_modules/golang.org/x/sync/@v/v0.7.0.zip) = 26990 +SIZE (go_modules/golang.org/x/sys/@v/v0.21.0.mod) = 33 +SIZE (go_modules/golang.org/x/sys/@v/v0.21.0.zip) = 1957330 +SIZE (go_modules/golang.org/x/term/@v/v0.21.0.mod) = 68 +SIZE (go_modules/golang.org/x/term/@v/v0.21.0.zip) = 19883 +SIZE (go_modules/golang.org/x/text/@v/v0.16.0.mod) = 220 +SIZE (go_modules/golang.org/x/text/@v/v0.16.0.zip) = 9235305 +SIZE (go_modules/golang.org/x/tools/@v/v0.22.0.mod) = 339 +SIZE (go_modules/golang.org/x/tools/@v/v0.22.0.zip) = 3175435 +SIZE (go_modules/gopkg.in/check.v1/@v/v1.0.0-20190902080502-41f04d3bba15.mod) = 25 +SIZE (go_modules/gopkg.in/check.v1/@v/v1.0.0-20190902080502-41f04d3bba15.zip) = 41481 +SIZE (go_modules/gopkg.in/yaml.v3/@v/v3.0.1.mod) = 95 +SIZE (go_modules/gopkg.in/yaml.v3/@v/v3.0.1.zip) = 104623 diff --git a/multimedia/dms/modules.inc b/multimedia/dms/modules.inc new file mode 100644 index 00000000000..7262ca61e61 --- /dev/null +++ b/multimedia/dms/modules.inc @@ -0,0 +1,35 @@ +MODGO_MODULES = \ + github.com/anacrolix/envpprof v1.0.0 \ + github.com/anacrolix/ffprobe v1.1.0 \ + github.com/anacrolix/generics v0.0.1 \ + github.com/anacrolix/log v0.15.2 \ + github.com/anacrolix/missinggo v1.1.0 \ + github.com/bradfitz/iter v0.0.0-20140124041915-454541ec3da2 \ + github.com/davecgh/go-spew v1.1.1 \ + github.com/frankban/quicktest v1.14.4 \ + github.com/google/go-cmp v0.6.0 \ + github.com/kr/pretty v0.3.1 \ + github.com/kr/text v0.2.0 \ + github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 \ + github.com/pmezard/go-difflib v1.0.0 \ + github.com/rogpeppe/go-internal v1.9.0 \ + github.com/stretchr/testify v1.8.1 \ + golang.org/x/crypto v0.24.0 \ + golang.org/x/exp v0.0.0-20240613232115-7f521ea00fb8 \ + golang.org/x/mod v0.18.0 \ + golang.org/x/net v0.26.0 \ + golang.org/x/sync v0.7.0 \ + golang.org/x/sys v0.21.0 \ + golang.org/x/term v0.21.0 \ + golang.org/x/text v0.16.0 \ + golang.org/x/tools v0.22.0 \ + gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 \ + gopkg.in/yaml.v3 v3.0.1 + +MODGO_MODFILES = \ + github.com/anacrolix/generics v0.0.0-20230113004304-d6428d516633 \ + github.com/davecgh/go-spew v1.1.0 \ + github.com/google/go-cmp v0.5.9 \ + github.com/stretchr/testify v1.3.0 \ + golang.org/x/exp v0.0.0-20220428152302-39d4317da171 + diff --git a/multimedia/dms/pkg/DESCR b/multimedia/dms/pkg/DESCR new file mode 100644 index 00000000000..b8a276cc42b --- /dev/null +++ b/multimedia/dms/pkg/DESCR @@ -0,0 +1,17 @@ +dms is a UPnP DLNA Digital Media Server. It runs from the terminal, +and serves content directly from the filesystem from the working +directory, or the path given. The SSDP component will broadcast and +respond to requests on all available network interfaces. + +dms advertises and serves the raw files, in addition to alternate +transcoded streams when it's able, such as mpeg2 PAL-DVD and WebM +for the Chromecast. It will also provide thumbnails where possible. + +dms also supports serving dynamic streams (e.g. a live rtsp stream) +generated on the fly with the help of an external application (e.g. +ffmpeg). + +dms uses ffprobe/avprobe to get media data such as bitrate and +duration, ffmpeg/avconv for video transoding, and ffmpegthumbnailer +for generating thumbnails when browsing. These commands must be in +the PATH given to dms or the features requiring them will be disabled. diff --git a/multimedia/dms/pkg/PLIST b/multimedia/dms/pkg/PLIST new file mode 100644 index 00000000000..3a9f0f0d6cd --- /dev/null +++ b/multimedia/dms/pkg/PLIST @@ -0,0 +1,4 @@ +@newgroup _dms:596 +@newuser _dms:596:596::dms:/nonexistent:/sbin/nologin +@rcscript ${RCDIR}/dms +@bin bin/dms diff --git a/multimedia/dms/pkg/dms.rc b/multimedia/dms/pkg/dms.rc new file mode 100644 index 00000000000..0e9bc825e7a --- /dev/null +++ b/multimedia/dms/pkg/dms.rc @@ -0,0 +1,14 @@ +#!/bin/ksh + +daemon="${TRUEPREFIX}/bin/dms" +daemon_user="_dms" + +. /etc/rc.d/rc.subr + +rc_bg=YES +rc_reload=NO + +# '-http [::]:1338' breaks pgrep(1) +pexp=$(echo "$pexp" | tr [ .) + +rc_cmd $1