{"id":13586710,"url":"https://github.com/sjorek/mediacastserver","last_synced_at":"2026-05-25T04:31:29.552Z","repository":{"id":1923186,"uuid":"2851265","full_name":"sjorek/mediacastserver","owner":"sjorek","description":"A flexible webserver for static content","archived":false,"fork":false,"pushed_at":"2017-10-05T15:08:09.000Z","size":58,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2024-02-14T21:41:06.199Z","etag":null,"topics":["bandwidth","bonjour","mdns","python","throttling","token-bucket","twisted","webservers","zeroconf"],"latest_commit_sha":null,"homepage":"https://sjorek.github.io/mediacastserver/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/sjorek.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2011-11-25T17:44:22.000Z","updated_at":"2020-03-10T16:12:11.000Z","dependencies_parsed_at":"2022-09-05T18:50:45.614Z","dependency_job_id":null,"html_url":"https://github.com/sjorek/mediacastserver","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sjorek%2Fmediacastserver","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sjorek%2Fmediacastserver/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sjorek%2Fmediacastserver/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sjorek%2Fmediacastserver/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sjorek","download_url":"https://codeload.github.com/sjorek/mediacastserver/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243119662,"owners_count":20239319,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bandwidth","bonjour","mdns","python","throttling","token-bucket","twisted","webservers","zeroconf"],"created_at":"2024-08-01T15:05:45.555Z","updated_at":"2025-12-26T04:20:11.117Z","avatar_url":"https://github.com/sjorek.png","language":"Python","funding_links":[],"categories":["Python"],"sub_categories":[],"readme":"Mediacast Server\n================\n\nVersion 0.0.1\n\nThis project provides a webserver for static content with support for\nvirtual-hosts, path-aliases, per-host/-ip traffic-shaping capabilities,\nreverse-proxing with internal url-translation and multicast-DNS (bonjour)\nservice-advertisement written in Python.\n\n\nWhy another webserver ?\n-----------------------\n\nThe main purpose of this webserver is bandwidth-limiting, utilizing the\n[token-bucket algorithm](http://en.wikipedia.org/wiki/Token_bucket).  The\nserver is therefore ideal to be used in multimedia-production toolchains, in\norder to verify http-video- and audio-streaming bandwidth-usage and browser\nbehavior in this context. Currently it serves any static file content, like\nthose produced by [Apple's “mediastreamsegmenter”](http://developer.apple.com/library/mac/#documentation/Darwin/Reference/ManPages/man1/mediastreamsegmenter.1.html)\nor f4f-streams as specified by Adobe in the [f4f file format specification](http://www.adobe.com/products/httpdynamicstreaming/).\n\nThe implementation is based upon the fantastic Twisted-Framework and is\nimplemented as a plugin therein.\n\nAs Twisted supports integration into the Win32, Mac OSX and of course Linux\noperating systems, the server may work in these environments in future\nreleases.  Currently only Mac OSX 10.6.x are tested and supported.  Apple's\ndefault python-installation and twisted-package is sufficient in order to run\nthe webserver.  That also means that at this time only python 2.6 is verified.\n\n\nInstallation\n------------\n\nInstructions for installing this software are in [INSTALL](INSTALL.md).\n\n\nUsage\n-----\n\n\nExecute `PYTHONPATH=path/to/mediacastserver twistd mediacastserver --help` to\nget a detailed command usage reference.  If you do so you should get something\nlike:\n\n    Usage: twistd [options] mediacastserver [mediacastserver options]\n    Options:\n    -n, --notracebacks      Display tracebacks in broken web pages. Displaying\n                          tracebacks to users may be security risk!\n    -l, --logfile=          Path to web CLF (Combined Log Format) log file.\n      --help              Display this help and exit.\n    -s, --shape=            Limit download bandwidth server-wide, optionally with\n                          server-wide initial burst, per client-connection\n                          rate-limit and per client-connection initial burst:\n                          server-wide-rate[,per-client-rate[,server-wide-burst[,per-client-burst]]]\n      --ignore-ext=       Specify an extension to ignore. These will be\n                          processed in order.\n    -p, --port=             strports description of the port to start the server\n                          on.\n    -i, --index=            Add the name of a file used to check for directory\n                          indexes. [default: index, index.html]\n    -a, --alias=            Alias(es) mapping a (virtual) path to a (real) path,\n                          eg.: alias/path[,real/path]\n      --version\n      --mime-type=        Specify the default mime-type for static files.\n      --monster=          add a vhost monster child-path intended to connect a reverse proxy.\n\n                          This makes it possible to put it behind a reverse proxy transparently. Just have\n                          the reverse proxy proxy to\n\n                          host,port,/vhost-monster-child-path/http/external-host:port/\n\n                          and on redirects and other link calculation, the external-host:port will be\n                          transmitted to this client.\n\n    -v, --vhost=            Additional vhost(s) to run, eg.: host.domain.tld\n    -h, --host=             port number (not strports description!) to start an\n                          additional server on.\n    -u, --user              Makes a server with ~/public_html and ~/.twistd-web-pb\n                          support for users.\n      --allow-ignore-ext  Specify whether or not a request for 'foo' should\n                          return 'foo.ext'\n      --path=             \u003cpath\u003e is either a specific file or a directory to be\n                          set as the root of the web server.\n      --bonjour=          override or append additional bonjour (mDNS/zeroconf)\n                          record. the first occurrence per host overrides the\n                          default description, subsequent occurrences append\n                          additional records. eg.: 'computer %s on port %d'\n      --reverse=          run a reverse proxy, either as the whole server or on\n                          a direct child-path (leaf) only eg.:\n                          host.domain.tld[,port-number[,path/to/proxy[,path/on/this/server]]]\n\n\nDocumentation and Support\n------------------------\n\n\nSorry, but you have to use the force and read the source. Help might also be\navailable on the [Twisted mailing list](http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python)\nIf you need more inspiration, feel free to contact me.\n\n\nTODOs\n-----\n\n\n* Write a setup.py\n* Write unit-tests (a shame that it's not yet done, i know)\n* Get rid of the Apple-specific bonjour and hostname implementation, test and\nsupport Avahi-Daemon\n* Make mDNS-support optional anyway, as it creates an additional dependency\nto pybonjour-package\n* Test and support Win32-environments\n\nCopyright\n---------\n\n\nAll of the code in this distribution is © copyright 2011-2017 Stephan Jorek.\n\nThe included [LICENSE](LICENSE) file describes this in detail.\nTwisted itself is made available under the MIT license. \n\nWarranty\n--------\n\nTHIS SOFTWARE IS PROVIDED \"AS IS\" WITHOUT WARRANTY OF ANY KIND, EITHER\nEXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES\nOF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS\nTO THE USE OF THIS SOFTWARE IS WITH YOU.\n\nIN NO EVENT WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY\nAND/OR REDISTRIBUTE THE LIBRARY, BE LIABLE TO YOU FOR ANY DAMAGES, EVEN IF\nSUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH\nDAMAGES.\n\nAgain, see the included [LICENSE](LICENSE) file for specific legal details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsjorek%2Fmediacastserver","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsjorek%2Fmediacastserver","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsjorek%2Fmediacastserver/lists"}