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 (success request will haveX-Task-Id
header with task ID). 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
andarm64
(currently onlyamd64
is supported). 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!