Skip to content

adam993/ipfs-uploader

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ipfs-uploader

Files manipulation and adds to IPFS gracefully

Confirmed working on Windows 7+ and Linux. Untested on mac.

Dependencies required:

  • either dotnet-sdk-2.0 for dev
  • or dotnet-runtime for production
  • ffmpeg
  • ffprobe
  • imagemagick
  • ipfs (go-ipfs) with a running deamon

Starting it in dev mode

Navigate to the Uploader.Web directory and just do dotnet run

Available Calls

Once your instance is started, it should listen on localhost:5000 by default and serve all these calls.

GET

  • /getStatus and /getStatus?details=true will give some information about the running instance such as queues times and usage statistics
  • /getErrors will give information about recent errors
  • /index.html allows you to easily test video, image and subtitles uploads. Only available in dev mode
  • /getProgressByToken/:token answers with a json object representing the progress of the upload
    • token: is the token given after a succesful /uploadVideo or /uploadImage
  • /getProgressBySourceHash/:token same as above but takes the source video hash as input

POST

  • /uploadVideo The main video upload call
    • POST file input files. Needs to be a video otherwise it will end up as an error.
    • Query String Options
      • videoEncodingFormats: controls which video resolutions are requested for the encoding
      • sprite: true/false. Controls whether a sprite file should be generated for this video.

Curl example: curl -F "video=@./video.mp4" http://localhost:5000/uploadVideo?videoEncodingFormats=240p,480p,720p&sprite=true

  • /uploadImage

    • POST file input files. Needs to be an image otherwise it will end up as an error.
  • /uploadSubtitle

    • POST text input subtitle. Needs to be a string starting with WEBVTT otherwise it will end up as an error.

Configuration

The main config file is available as appsettings.json.

  • Front :
    • "CORS": "https://d.tube" Cross-origin domains to authorize requests from.
  • General :
    • "MaxGetProgressCanceled": 20, The number of seconds after which an upload gets cancelled if the user doesn't request a /getProgressByX.
    • "ImageMagickPath": "", The path to imagemagick (leave blank if you use linux).
    • "TempFilePath": "/tmp/dtube", Path of temporary files created during the encoding and ipfs processes.
    • "ErrorFilePath": "/home/dtube/errors", Path where uploaded files creating errors get stored .
    • "FinalFilePath": "/home/dtube/success", Path where succesfully uploaded files to IPFS get stored (if OnlyHash option is true).
    • "Version": "0.7.5" The version of the running instance.
  • Encode (array) : the list of possible video qualities encoded by this instance.
    • "urlTag": "720p", The tag that represents a quality.
    • "maxRate": "2000k", The video bitrate.
    • "width": 1280, Video width.
    • "height": 720, Video height.
    • "MinSourceHeightForEncoding": 600, Minimum source height for allowing encoding to this quality.
    • "qualityOrder": 5 To order different qualities. Higher is higher quality.
  • Ipfs :
    • "IpfsTimeout": 108000, IPFS add timeout in seconds
    • "VideoAndSpriteTrickleDag": true, If true, uses -t (trickle dag) option for adding video and sprite files to IPFS. Recommended.
    • "AddVideoSource": true, If true, the source file also gets added to IPFS.
    • "OnlyHash": false If true, uses --only-hash option of IPFS and moves files to the FinalFilePath instead or adding to the ipfs datastore directly.
  • Video :
    • "FfProbeTimeout": 10, ffprobe timeout in seconds.
    • "EncodeGetImagesTimeout": 600, Timeout in seconds for generating all pictures composing the sprite.
    • "EncodeTimeout": 108000, Timeout in seconds for video encoding.
    • "MaxVideoDurationForEncoding": 1800, Maximum video duration in seconds for video encoding.
    • "NbSpriteImages": 100, Number of total images used in the sprite.
    • "HeightSpriteImages": 118, Sprite height.
    • "GpuEncodeMode": true, Enables GPU-encoding.
    • "NbSpriteDaemon": 0, Number of daemons generating sprites.
    • "NbAudioVideoCpuEncodeDaemon": 0, Number of daemons for CPU audio and video encoding.
    • "NbAudioCpuEncodeDaemon": 0, Number of daemons for CPU audio only encoding (used when doing GPU video encoding).
    • "NbVideoGpuEncodeDaemon": 0, Number of daemons for GPU video encoding.
    • "AuthorizedQuality": "240p,480p,720p", Authorized encoding qualities. Any other requested quality will be ignored.
    • "NVidiaCard":"QuadroP5000" GPU card model.

Building and running it in production

Building

dotnet publish -c Release will create a /bin/Release/netcoreapp2.0/publish folder

Running

Navigate to the publish folder and dotnet Uploader.Web.dll

Logging

Everything gets logged inside the logs folder and each process has it's own log file (ffmpeg, ipfs, etc). If you want logs in a different folder, you need to edit the log4net.config file.

About

Files manipulation and adds to IPFS gracefully

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C# 95.1%
  • HTML 4.9%