Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/Eyevinn/function-scenes
A serverless media function to detect scene changes and extract keyframes in a video file or a stream.
https://github.com/Eyevinn/function-scenes
service
Last synced: 3 months ago
JSON representation
A serverless media function to detect scene changes and extract keyframes in a video file or a stream.
- Host: GitHub
- URL: https://github.com/Eyevinn/function-scenes
- Owner: Eyevinn
- Created: 2020-01-27T20:55:54.000Z (almost 5 years ago)
- Default Branch: master
- Last Pushed: 2024-03-08T08:33:39.000Z (8 months ago)
- Last Synced: 2024-07-27T11:43:18.847Z (4 months ago)
- Topics: service
- Language: JavaScript
- Homepage:
- Size: 246 KB
- Stars: 7
- Watchers: 2
- Forks: 5
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Eyevinn MediaFunction::Scenes
A serverless media function to detect scene changes and extract keyframes in a video file or a stream.
## Build
Build the media function container and push to your docker registry.
```
$ docker build -t function-scenes:1 .
$ docker tag function-scenes:1 /function-scenes:1
$ docker push /function-scenes
```To test the function you can run the container locally.
```
$ docker run --rm -d -p 3000:3000 --name=function-scenes function-scenes:1
```API documentation is the available at `http://localhost:3000/api/docs/` and API on `http://localhost:3000/api/v1`.
![Screenshot](screenshot.png)
Normally you would deploy the container to a cluster of your choice. This service requires sticky sessions when doing horizontal scaling.
## Usage
To detect the scene changes and extract images from a file.
1. Start a job by providing the media locator of the file.
```
$ curl -X POST "http://localhost:3000/api/v1" -H "accept: application/json" -H "Content-Type: application/json" -d "{\"medialocator\":\"https://s3-bucket/testfile.mp4\"}"
```In return you should receive a JSON containing two endpoints:
```
{
"thumbnails": "/api/v1/1/thumbnails",
"status": "/api/v1/1/status"
}
```2. Obtain the links to the extracted images using the `thumbnails` endpoint:
```
$ curl -v "http://localhost:3000/api/v1/1/thumbnails"
```In return you receive a JSON with links to each image. This array is appended as scenes are detected and images extracted so a client typically polls this endpoint until the status of the job is completed.
These files are not to be considered persistent and it is expected that the client downloads and store these somewhere else. This function does not host any images.
3. To watch the status of the job use the `status` endpoint.
```
$ curl -v "http://localhost:3000/api/v1/1/status"
```## Develop
When developing without rebuilding the image for every change this is one way of doing it. In essence mounting the source directory to a directory in the container that is run interactively.
```
$ docker build -t function-scenes:dev .
$ docker run --rm -it -p 3000:3000 -v $PWD:/appdev function-scenes:dev /bin/bash
root@811b2120dc75:/app# cd /appdev/
root@811b2120dc75:/appdev# DEBUG=* node index.js
function-scenes restify listening at http://[::]:3000 +0ms
```## About Eyevinn Technology
Eyevinn Technology is an independent consultant firm specialized in video and streaming. Independent in a way that we are not commercially tied to any platform or technology vendor.
At Eyevinn, every software developer consultant has a dedicated budget reserved for open source development and contribution to the open source community. This give us room for innovation, team building and personal competence development. And also gives us as a company a way to contribute back to the open source community.
Want to know more about Eyevinn and how it is to work here. Contact us at [email protected]!
## LICENSE
Copyright 2019 Eyevinn Technology
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License athttp://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.