欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時間:2023年12月21日 15:06:54   作者:寒露  
這篇文章主要為大家介紹了node文件資源管理器讀取視頻信息從零實現(xià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é)構。

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)。
  • 當組件首次被裝載時,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)容,更多關于node文件資源讀取視頻的資料請關注腳本之家其它相關文章!

相關文章

  • 簡述pm2常用命令集合及配置文件說明

    簡述pm2常用命令集合及配置文件說明

    這篇文章主要介紹了簡述pm2常用命令集合及配置文件說明,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-05-05
  • Node.js發(fā)起HTTP請求的6種不同方法小結(jié)

    Node.js發(fā)起HTTP請求的6種不同方法小結(jié)

    本文主要介紹了Node.js發(fā)起HTTP請求的6種不同方法小結(jié),文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • node.js mongoose index索引操作

    node.js mongoose index索引操作

    在 Mongoose 中,索引(Index)是一種用于提高查詢性能的數(shù)據(jù)結(jié)構,它可以加速對數(shù)據(jù)庫中文檔的檢索操作,本文給大家介紹
    node.js mongoose index索引操作
    ,感興趣的朋友一起看看吧
    2023-12-12
  • node.js [superAgent] 請求使用示例

    node.js [superAgent] 請求使用示例

    這篇文章主要介紹了node.js [superAgent] 請求使用示例,分別給大家匯總了post請求、get請求、delete請求和put請求的示例,推薦給大家,希望大家能夠喜歡。
    2015-03-03
  • node koa2 ssr項目搭建的方法步驟

    node koa2 ssr項目搭建的方法步驟

    這篇文章主要介紹了node koa2 ssr項目搭建的方法步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-12-12
  • 淺談Node.js ORM框架Sequlize之表間關系

    淺談Node.js ORM框架Sequlize之表間關系

    下面小編就為大家?guī)硪黄獪\談Node.js ORM框架Sequlize之表間關系。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-07-07
  • Node如何后臺數(shù)據(jù)庫使用增刪改查功能

    Node如何后臺數(shù)據(jù)庫使用增刪改查功能

    這篇文章主要介紹了Node如何后臺數(shù)據(jù)庫使用增刪改查功能,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-11-11
  • Nodejs 微信小程序消息推送的實現(xiàn)

    Nodejs 微信小程序消息推送的實現(xiàn)

    這篇文章主要介紹了Nodejs 微信小程序消息推送的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-01-01
  • node鏈接mongodb數(shù)據(jù)庫的方法詳解【阿里云服務器環(huán)境ubuntu】

    node鏈接mongodb數(shù)據(jù)庫的方法詳解【阿里云服務器環(huán)境ubuntu】

    這篇文章主要介紹了node鏈接mongodb數(shù)據(jù)庫的方法,結(jié)合實例形式分析了nodejs基于阿里云服務器環(huán)境ubuntu下實現(xiàn)連接MongoDB數(shù)據(jù)庫的相關操作技巧,需要的朋友可以參考下
    2019-03-03
  • 一文帶你了解Node.js有哪些架構模式

    一文帶你了解Node.js有哪些架構模式

    Node.js 憑借其非阻塞、事件驅(qū)動的架構,已成為構建各種應用程序的流行選擇,使用 Node.js 進行開發(fā)時,選擇正確的架構模式來滿足項目需求至關重要,在本文中,我們將探討幾種 Node.js 架構模式并提供示例來說明它們的用法,需要的朋友可以參考下
    2023-09-09

最新評論