Audio transcoder with simple HTTP API written with Rust & Axum & FFmpeg.
.github/workflows | ||
src | ||
.dockerignore | ||
.editorconfig | ||
.gitignore | ||
Cargo.toml | ||
Dockerfile | ||
Dockerfile.scratch | ||
LICENSE.md | ||
README.md |
atranscoder-rpc
Audio transcoder with simple HTTP API. Work in progress.
How to Use
Transcoding can be done like this:
- Use
cargo run
orneur0toxine/atranscoder-rpc
Docker image. - Upload file for transcoding:
curl --location 'http://localhost:8090/enqueue' \
--form 'file=@"/home/user/Music/test.mp3"' \
--form 'format="adts"' \
--form 'codec="aac"' \
--form 'bitRate="64000"' \
--form 'maxBitRate="64000"' \
--form 'sampleRate="8000"' \
--form 'channelLayout="mono"' \
--form 'uploadUrl="http://127.0.0.1:8909/upload"'
- Your
uploadUrl
will receive JSON response with job ID and error in case of failure and the entire transcoded file contents in case of success. UseContent-Type
header to differentiate between the two data types.
You can change configuration using this environment variables:
LISTEN
- change this environment variable to change TCP listen address. Default is0.0.0.0:8090
.NUM_WORKERS
- can be used to change how many threads will be used to transcode incoming files. Default is equal to logical CPUs.TEMP_DIR
- this can be used to change which directory should be used to store incoming downloads and transcoding results. Useful if you want to use a Docker volume for this. Default is system temp directory (/tmp
for Linux).LOG_LEVEL
- changes log verbosity, default isinfo
.
Roadmap
- Implement somewhat acceptable error handling.
- Remove old conversion results and input files that are older than 1 hour.
- Remove input file after transcoding it.
- Implement file upload to
uploadUrl
(ifContent-Type: application/json
then conversion was not successful and body contains an error info). - Remove transcoding result after uploading it to the
uploadUrl
. - Docker image for
amd64
andaarch64
. Restart threads in case of panic.It's better to not panic. Current error handling seems ok for now.Statically linked binary for Docker image & result docker image based onNot yet, see Dockerfile.scratch.scratch
(reduce image size).- Tests!