最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

node文件資源管理器讀取視頻信息從零實現(xiàn)

 更新時間:2023年12月21日 15:06:54   作者:寒露  
這篇文章主要為大家介紹了node文件資源管理器讀取視頻信息從零實現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

前置準(zhǔn)備

需要 ffmpeg 與配套的 ffprobe

  • ffprobe 用于獲取視頻的媒體信息。視頻流,音頻流,字幕等信息
  • ffmpeg 用于獲取視頻播放更多信息。對視頻某個時間段進行截圖等操作

需要開發(fā)機安裝 ffmpeg 或 docker 容器內(nèi)安裝 ffmpeg 開發(fā)。全環(huán)境的 ffmpeg 較大,對最終生成的 docker 鏡像的大小影響較大。

dockerfiel 添加一條安裝 ffmpeg 的方法

RUN apk add --no-cache ffmpeg

開發(fā)

這次主要使用 ffprobe 獲取視頻的媒體信息。

安裝依賴

explorer-manage

pnpm i ffprobe

pnpm i  @types/ffprobe -D

ffprobe 依賴主要用于將 ffprobe 命令輸出的信息進行格式化成 node 可以直接消費的結(jié)構(gòu)。

explorer-manage 創(chuàng)建一個文件 src/ffmpeg/main.mjs,內(nèi)容如下

import ff_probe from 'ffprobe'
import { formatPath, resetPath } from '../../lib/format-path.mjs'
// npm install ffprobe-static
// import ff_probe_static from 'ffprobe-static'
export const getVideoInfo = (path = '') => {
  return ff_probe(formatPath(path), {
    path: 'ffprobe',
  }).catch((err) => {
    console.log({ err })
  })
}

其中可以使用 npm install ffprobe-static 安裝 ffprobe 的靜態(tài)文件,供 ffprobe 依賴提供的 path: ff\_probe\_static.path 方法注入路徑。由于開發(fā)機上已安裝 ffmpeg,所以這里僅供參考。

explorer 客戶端

客戶端依舊使用 Next.js 的 server action 調(diào)用 getVideoInfo 方法實現(xiàn)。

常規(guī)套路

  • 使用上下文控制側(cè)邊抽屜彈窗顯示
  • 側(cè)邊抽屜彈窗內(nèi)的視頻流、音頻流、字幕等信息使用 Tab 組件區(qū)分

server action

'use server'
import { getVideoInfo } from '@/explorer-manager/src/ffmpeg/main.mjs'
export const getVideoInfoAction: typeof getVideoInfo = (path) => {
  return getVideoInfo(path)
}

這里偷懶了,直接使用 typeof getVideoInfo 給 getVideoInfoAction 進行狀態(tài)聲明。

modal

'use client'
import React from 'react'
import { Card, Descriptions, Drawer, Space, Tabs } from 'antd'
import { map, isEmpty, isObject } from 'lodash'
import { useRequest } from 'ahooks'
import { VideoInfoContext } from '@/components/video-info-modal/video-info-context'
import { getVideoInfoAction } from '@/components/video-info-modal/action'
const VideoInfoItem: React.FC = () => {
  const video_path = VideoInfoContext.useStore()
  const { data, loading, run } = useRequest(() => getVideoInfoAction(video_path))
  return (
    <Card loading={loading}>
      <Tabs
        items={data?.streams.map((item) => {
          return {
            key: [item.codec_type, item.index].join('-'),
            label: (
              <Space>
                {item.codec_type}
                {item.index > 0 ? item.index : ''}
              </Space>
            ),
            children: (
              <>
                <Descriptions
                  column={1}
                  labelStyle={{ width: '15em', textAlign: 'right' }}
                  style={{ maxHeight: '85vh', overflow: 'scroll', overscrollBehavior: 'contain' }}
                >
                  {map(item, (value, key) => (
                    <Descriptions.Item key={key} label={key}>
                      {isObject(value) ? <pre>{JSON.stringify(value, null, 2)}</pre> : value?.toString()}
                    </Descriptions.Item>
                  ))}
                </Descriptions>
              </>
            ),
          }
        })}
      />
    </Card>
  )
}
const VideoInfoModal: React.FC = () => {
  const video_path = VideoInfoContext.useStore()
  const dispatch = VideoInfoContext.useDispatch()
  return (
    <Drawer
      title="視頻信息"
      placement="right"
      open={!isEmpty(video_path)}
      width={1000}
      onClose={() => dispatch('')}
      footer={false}
      destroyOnClose={true}
    >
      <VideoInfoItem />
    </Drawer>
  )
}
export default VideoInfoModal
  • 使用 ahooks 的 useRequest 封裝 server action 方法。內(nèi)置 loading、 data 等狀態(tài)。
  • 當(dāng)組件首次被裝載時,useRequest 調(diào)用 getVideoInfoAction 獲取數(shù)據(jù)
  • 內(nèi)部使用 Antd 提供的 Card 組件用于 loading 狀態(tài)。 Tab 對數(shù)據(jù)的視頻、音頻等信息進行區(qū)分顯示。

效果

git-repo

yangWs29/share-explorer

以上就是node文件資源管理器讀取視頻信息從零實現(xiàn)的詳細內(nèi)容,更多關(guān)于node文件資源讀取視頻的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • node.js中路由,中間件,get請求和post請求的參數(shù)詳解

    node.js中路由,中間件,get請求和post請求的參數(shù)詳解

    本文給大家匯總介紹了node.js中的路由,中間件,get請求和post請求的參數(shù)的使用方法,非常的詳細,有需要的小伙伴可以參考下
    2017-12-12
  • nodejs async異步常用函數(shù)總結(jié)(推薦)

    nodejs async異步常用函數(shù)總結(jié)(推薦)

    這篇文章主要介紹了nodejs async異步常用函數(shù)總結(jié)的相關(guān)資料,需要的朋友可以參考下
    2017-11-11
  • Node.js 實現(xiàn)搶票小工具 & 短信通知提醒功能

    Node.js 實現(xiàn)搶票小工具 & 短信通知提醒功能

    這篇文章主要介紹了Node.js 實現(xiàn)搶票小工具 & 短信通知提醒功能,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-10-10
  • 關(guān)于npm源查詢與切換方式

    關(guān)于npm源查詢與切換方式

    這篇文章主要介紹了關(guān)于npm源查詢與切換方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-03-03
  • node.js express中app.param的用法詳解

    node.js express中app.param的用法詳解

    express.js是nodejs的一個MVC開發(fā)框架,并且支持jade等多種模板。下面這篇文章主要給大家介紹了關(guān)于node.js express中app.param用法的相關(guān)資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-07-07
  • Windows下安裝Bun像Node或Deno的現(xiàn)代JS運行時

    Windows下安裝Bun像Node或Deno的現(xiàn)代JS運行時

    這篇文章主要為大家介紹了一款像Node或Deno的現(xiàn)代JavaScript運行時的bun在Windows下安裝過程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-07-07
  • node.js的exports、module.exports與ES6的export、export default深入詳解

    node.js的exports、module.exports與ES6的export、export default深入詳解

    這篇文章主要給大家介紹了關(guān)于node.js中的exports、module.exports與ES6中的export、export default到時是什么的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-10-10
  • Node.js中Swagger的使用指南詳解

    Node.js中Swagger的使用指南詳解

    Swagger(目前用OpenAPI?Specification代替)是一個用于設(shè)計、構(gòu)建、記錄和使用REST?API的強大工具,本文將探討使用Swagger的一些關(guān)鍵技巧,需要的可以參考一下
    2024-01-01
  • NodeJS使用文件流解決大文件處理的內(nèi)存與時間效率問題

    NodeJS使用文件流解決大文件處理的內(nèi)存與時間效率問題

    在 NodeJS 中,文件操作是常見的任務(wù)之一,然而,當(dāng)處理大文件時,直接將整個文件加載到內(nèi)存中可能會導(dǎo)致內(nèi)存溢出或性能瓶頸,為了解決這一問題,NodeJS 提供了文件流(Stream)機制,本文將詳細介紹文件流的優(yōu)點、使用方法、應(yīng)用場景,并探討背壓(Backpressure)的概念
    2025-01-01
  • 在Nodejs中實現(xiàn)一個緩存系統(tǒng)的方法詳解

    在Nodejs中實現(xiàn)一個緩存系統(tǒng)的方法詳解

    在數(shù)據(jù)庫查詢遇到瓶頸時,我們通常可以采用緩存來提升查詢速度,同時緩解數(shù)據(jù)庫壓力,在一些簡單場景中,我們也可以自己實現(xiàn)一個緩存系統(tǒng),避免使用額外的緩存中間件,這篇文章將帶你一步步實現(xiàn)一個完善的緩存系統(tǒng),需要的朋友可以參考下
    2024-03-03

最新評論

兴仁县| 安岳县| 门头沟区| 依安县| 南漳县| 镇巴县| 玛多县| 大同市| 抚宁县| 泽普县| 桃园县| 巧家县| 蓝山县| 遂昌县| 和平区| 石河子市| 屏边| 孟连| 宣汉县| 英德市| 塔河县| 商南县| 夏河县| 赤壁市| 阿拉善右旗| 沿河| 思南县| SHOW| 沅陵县| 马边| 沈阳市| 潼南县| 友谊县| 吉安市| 合作市| 永康市| 洞口县| 永清县| 瓦房店市| 金阳县| 左云县|