{"id":1932,"date":"2021-02-27T12:23:19","date_gmt":"2021-02-27T04:23:19","guid":{"rendered":"http:\/\/123.57.164.21\/?p=1932"},"modified":"2021-02-27T15:49:18","modified_gmt":"2021-02-27T07:49:18","slug":"nodejs-%e8%8e%b7%e5%8f%96%e8%a7%86%e9%a2%91%e4%bf%a1%e6%81%af","status":"publish","type":"post","link":"https:\/\/92it.top\/?p=1932","title":{"rendered":"nodejs \u83b7\u53d6\u89c6\u9891\u4fe1\u606f"},"content":{"rendered":"\n<p>ffprobe\u7ec4\u4ef6\u53ef\u4ee5\u83b7\u5f97\u89c6\u9891\u7684\u76f8\u5173\u4fe1\u606f\uff08\u6bd4\u5982\u65f6\u957f\uff0c\u58f0\u9053\uff0csize\u7b49\u7b49\uff09\uff0c\u6709\u65f6\u5019\u6211\u4eec\u5e0c\u671b\u5728\u4ee3\u7801\u4e2d\u8c03\u7528ffprobe\u7ec4\u4ef6\uff0c\u6bd4\u5982\u5728Nodejs\u4e2d\u8c03\u7528\u7ec4\u4ef6\u3002\u53ef\u4ee5\u5229\u7528node-ffprobe \u548c @ffprobe-installer\/ffprobe<\/p>\n\n\n\n<hr class=\"wp-block-separator\"\/>\n\n\n\n<ul><li><strong>node-ffprobe<\/strong><\/li><\/ul>\n\n\n\n<figure class=\"wp-block-embed\"><div class=\"wp-block-embed__wrapper\">\nhttps:\/\/www.npmjs.com\/package\/node-ffprobe\n<\/div><\/figure>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/123.57.164.21\/wp-content\/uploads\/2021\/02\/image-171-1024x660.png\" alt=\"\" class=\"wp-image-1933\" width=\"458\" height=\"294\" srcset=\"https:\/\/92it.top\/wp-content\/uploads\/2021\/02\/image-171-1024x660.png 1024w, https:\/\/92it.top\/wp-content\/uploads\/2021\/02\/image-171-300x193.png 300w, https:\/\/92it.top\/wp-content\/uploads\/2021\/02\/image-171-768x495.png 768w, https:\/\/92it.top\/wp-content\/uploads\/2021\/02\/image-171-830x535.png 830w, https:\/\/92it.top\/wp-content\/uploads\/2021\/02\/image-171-230x148.png 230w, https:\/\/92it.top\/wp-content\/uploads\/2021\/02\/image-171-350x226.png 350w, https:\/\/92it.top\/wp-content\/uploads\/2021\/02\/image-171-480x309.png 480w, https:\/\/92it.top\/wp-content\/uploads\/2021\/02\/image-171.png 1536w\" sizes=\"(max-width: 458px) 100vw, 458px\" \/><\/figure><\/div>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">const probe = require('node-ffprobe')\nconst ffprobeInstaller = require('@ffprobe-installer\/ffprobe')\n \nconsole.log(ffprobeInstaller.path, ffprobeInstaller.version)\n \nffprobe.FFPROBE_PATH = ffprobeInstaller.path\n \nvar track = '\/path\/to\/media\/file.mp3' \/\/ or video\n \nprobe(track).then(probeData => {\n    console.log(probeData)\n})<\/pre>\n\n\n\n<hr class=\"wp-block-separator\"\/>\n\n\n\n<ul><li><strong>ffprobe-installer\/ffprobe<\/strong><\/li><\/ul>\n\n\n\n<figure class=\"wp-block-embed\"><div class=\"wp-block-embed__wrapper\">\nhttps:\/\/www.npmjs.com\/package\/@ffprobe-installer\/ffprobe\n<\/div><\/figure>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/123.57.164.21\/wp-content\/uploads\/2021\/02\/image-173-1024x870.png\" alt=\"\" class=\"wp-image-1937\" width=\"506\" height=\"429\" srcset=\"https:\/\/92it.top\/wp-content\/uploads\/2021\/02\/image-173-1024x870.png 1024w, https:\/\/92it.top\/wp-content\/uploads\/2021\/02\/image-173-300x255.png 300w, https:\/\/92it.top\/wp-content\/uploads\/2021\/02\/image-173-768x652.png 768w, https:\/\/92it.top\/wp-content\/uploads\/2021\/02\/image-173-830x705.png 830w, https:\/\/92it.top\/wp-content\/uploads\/2021\/02\/image-173-230x195.png 230w, https:\/\/92it.top\/wp-content\/uploads\/2021\/02\/image-173-350x297.png 350w, https:\/\/92it.top\/wp-content\/uploads\/2021\/02\/image-173-480x408.png 480w, https:\/\/92it.top\/wp-content\/uploads\/2021\/02\/image-173.png 1512w\" sizes=\"(max-width: 506px) 100vw, 506px\" \/><\/figure><\/div>\n\n\n\n<hr class=\"wp-block-separator\"\/>\n\n\n\n<ul><li>Nodejs \u4e2d\u8c03\u7528\u7684\u4f8b\u5b50\uff08Docker\uff09<\/li><\/ul>\n\n\n\n<p>\u2460 Dockerfile<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">#\u8bbe\u7f6e\u57fa\u7840\u955c\u50cf,\u5982\u679c\u672c\u5730\u6ca1\u6709\u8be5\u955c\u50cf\uff0c\u4f1a\u4eceDocker.io\u670d\u52a1\u5668pull\u955c\u50cf\nFROM node\n\nRUN mkdir -p \/video\n\n#\u521b\u5efaapp\u76ee\u5f55,\u4fdd\u5b58\u6211\u4eec\u7684\u4ee3\u7801\nRUN mkdir -p \/var\/Sample\n#\u8bbe\u7f6e\u5de5\u4f5c\u76ee\u5f55\nWORKDIR \/var\/Sample\n\n#\u590d\u5236\u6240\u6709\u6587\u4ef6\u5230 \u5de5\u4f5c\u76ee\u5f55\u3002\nCOPY . \/var\/Sample\n\nRUN npm install\n\n#\u66b4\u9732container\u7684\u7aef\u53e3\nEXPOSE 8002\n\n#\u8fd0\u884c\u547d\u4ee4\nCMD [\"npm\", \"start\"]<\/pre>\n\n\n\n<p>\u2461 package.json<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">{\n  \"name\": \"Sample\",\n  \"version\": \"1.0.0\",\n  \"description\": \"Sample\",\n  \"main\": \"server.js\",\n  \"scripts\": {\n    \"start\": \"node server.js\"\n  },\n  \"dependencies\": {\n    \"@ffprobe-installer\/ffprobe\": \"^1.1.0\",\n    \"express\": \"^4.16.4\",\n    \"express-handlebars\": \"^3.1.0\",\n    \"node-ffprobe\": \"^3.0.0\",\n    \"request\": \"^2.88.2\"\n  }\n}\n<\/pre>\n\n\n\n<p>\u2462 server.js<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\"use strict\";\nObject.defineProperty(exports, \"__esModule\", {\n  value: true\n});\nvar express = require(\"express\");\nvar bodyParser = require('body-parser');\nvar path = require(\"path\");\nvar request = require('request');\nconst ffprobe = require('node-ffprobe')\nconst ffprobeInstaller = require('@ffprobe-installer\/ffprobe')\nconsole.log(ffprobeInstaller.path, ffprobeInstaller.version)\nffprobe.FFPROBE_PATH = ffprobeInstaller.path\n\nvar app = express();\napp.use(bodyParser.json());\nvar filePath = \"\/video\/\";\n\napp.post('\/getVideoTime', function (req, res) {\n  const jsonParm = req.body;\n  var videoPath = filePath + jsonParm.videoName;\n  \n  ffprobe(videoPath).then(probeData => {\n    if(probeData.error != undefined) {\n      var returnData = {\n        status: 'error',\n        message: probeData.error.string,\n        data: ''\n      };\n      res.json(returnData)\n      return;\n    }\n    if(probeData != undefined &amp;&amp; probeData.format != undefined &amp;&amp;  probeData.format.duration != undefined) {\n      var returnData = {\n        status: 'ok',\n        message: '',\n        data: probeData.format.duration\n      };\n      res.json(returnData)\n    } else {\n      var returnData = {\n        status: 'ok',\n        message: '',\n        data: '0'\n      };\n      res.json(returnData)\n    }\n  })\n});\n\nvar serverPort = 8002;\nvar server = app.listen(serverPort, function () {\n  console.log(\"Server Start\");\n});\nserver.setTimeout(5000)<\/pre>\n\n\n\n<p>\u2463 Docker\u547d\u4ee4\u521b\u5efa\u955c\u50cf\u548c\u8fd0\u884c\u5bb9\u5668<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u521b\u5efaSample\u955c\u50cf\ndocker build -t Sample .\n\/\/ \u8fd0\u884c\u5bb9\u5668 \u6620\u5c04\u4e3b\u673a\u548c\u955c\u50cf\u7aef\u53e38002:8002  \u6620\u5c04\u4e3b\u673a\u76ee\u5f55\/video\/flv \u5230\u955c\u50cf\u76ee\u5f55\/video \ndocker run -d -p 8002:8002 -v \/video\/flv:\/video Sample\n<\/pre>\n\n\n\n<p>\u2464 \u8fd0\u884c\u4ee5\u540e\u80fd\u770b\u5230\u4e0b\u9762\u7684\u53d6\u5f97\u5230\u7684\u89c6\u9891\u7ed3\u679c<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">Server Start\n{\n  programs: [],\n  streams: [\n    {\n      index: 0,\n      codec_name: 'h264',\n      codec_long_name: 'H.264 \/ AVC \/ MPEG-4 AVC \/ MPEG-4 part 10',\n      profile: 'Main',\n      codec_type: 'video',\n      codec_time_base: '0\/2',\n      codec_tag_string: '[0][0][0][0]',\n      codec_tag: '0x0000',\n      width: 1280,\n      height: 720,\n      coded_width: 1280,\n      coded_height: 720,\n      has_b_frames: 0,\n      pix_fmt: 'yuvj420p',\n      level: 31,\n      color_range: 'pc',\n      chroma_location: 'left',\n      field_order: 'progressive',\n      refs: 1,\n      is_avc: 'true',\n      nal_length_size: '4',\n      r_frame_rate: '1000\/1',\n      avg_frame_rate: '0\/0',\n      time_base: '1\/1000',\n      start_pts: 0,\n      start_time: '0.000000',\n      bits_per_raw_sample: '8',\n      disposition: [Object]\n    },\n    {\n      index: 1,\n      codec_name: 'aac',\n      codec_long_name: 'AAC (Advanced Audio Coding)',\n      profile: 'LC',\n      codec_type: 'audio',\n      codec_time_base: '1\/44100',\n      codec_tag_string: '[0][0][0][0]',\n      codec_tag: '0x0000',\n      sample_fmt: 'fltp',\n      sample_rate: '44100',\n      channels: 2,\n      channel_layout: 'stereo',\n      bits_per_sample: 0,\n      r_frame_rate: '0\/0',\n      avg_frame_rate: '0\/0',\n      time_base: '1\/1000',\n      start_pts: 53,\n      start_time: '0.053000',\n      disposition: [Object]\n    }\n  ],\n  chapters: [],\n  format: {\n    filename: '\/video\/20210226_174203098.flv',\n    nb_streams: 2,\n    nb_programs: 0,\n    format_name: 'flv',\n    format_long_name: 'FLV (Flash Video)',\n    start_time: '0.000000',\n    duration: '80.045000',\n    size: '8761493',\n    bit_rate: '875656',\n    probe_score: 100\n  }\n}\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>ffprobe\u7ec4\u4ef6\u53ef\u4ee5\u83b7\u5f97\u89c6\u9891\u7684\u76f8\u5173\u4fe1\u606f\uff08\u6bd4\u5982\u65f6\u957f\uff0c\u58f0\u9053\uff0csize\u7b49\u7b49\uff09\uff0c\u6709\u65f6\u5019\u6211\u4eec\u5e0c\u671b\u5728\u4ee3\u7801\u4e2d\u8c03\u7528ffpro [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[18],"tags":[],"_links":{"self":[{"href":"https:\/\/92it.top\/index.php?rest_route=\/wp\/v2\/posts\/1932"}],"collection":[{"href":"https:\/\/92it.top\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/92it.top\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/92it.top\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/92it.top\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1932"}],"version-history":[{"count":20,"href":"https:\/\/92it.top\/index.php?rest_route=\/wp\/v2\/posts\/1932\/revisions"}],"predecessor-version":[{"id":1963,"href":"https:\/\/92it.top\/index.php?rest_route=\/wp\/v2\/posts\/1932\/revisions\/1963"}],"wp:attachment":[{"href":"https:\/\/92it.top\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1932"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/92it.top\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1932"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/92it.top\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1932"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}