CN116567341B - 一种基于golang的高并发信号处理平台 - Google Patents

一种基于golang的高并发信号处理平台 Download PDF

Info

Publication number
CN116567341B
CN116567341B CN202310841942.1A CN202310841942A CN116567341B CN 116567341 B CN116567341 B CN 116567341B CN 202310841942 A CN202310841942 A CN 202310841942A CN 116567341 B CN116567341 B CN 116567341B
Authority
CN
China
Prior art keywords
video
file
output
concurrency
barrage
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN202310841942.1A
Other languages
English (en)
Other versions
CN116567341A (zh
Inventor
朱利人
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Aoshi Tianjin Technology Co ltd
Original Assignee
Aoshi Tianjin Technology Co ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Aoshi Tianjin Technology Co ltd filed Critical Aoshi Tianjin Technology Co ltd
Priority to CN202310841942.1A priority Critical patent/CN116567341B/zh
Publication of CN116567341A publication Critical patent/CN116567341A/zh
Application granted granted Critical
Publication of CN116567341B publication Critical patent/CN116567341B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N21/00Selective content distribution, e.g. interactive television or video on demand [VOD]
    • H04N21/40Client devices specifically adapted for the reception of or interaction with content, e.g. set-top-box [STB]; Operations thereof
    • H04N21/43Processing of content or additional data, e.g. demultiplexing additional data from a digital video stream; Elementary client operations, e.g. monitoring of home network or synchronising decoder's clock; Client middleware
    • H04N21/435Processing of additional data, e.g. decrypting of additional data, reconstructing software from modules extracted from the transport stream
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N21/00Selective content distribution, e.g. interactive television or video on demand [VOD]
    • H04N21/40Client devices specifically adapted for the reception of or interaction with content, e.g. set-top-box [STB]; Operations thereof
    • H04N21/43Processing of content or additional data, e.g. demultiplexing additional data from a digital video stream; Elementary client operations, e.g. monitoring of home network or synchronising decoder's clock; Client middleware
    • H04N21/44Processing of video elementary streams, e.g. splicing a video clip retrieved from local storage with an incoming video stream or rendering scenes according to encoded video stream scene graphs
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N21/00Selective content distribution, e.g. interactive television or video on demand [VOD]
    • H04N21/40Client devices specifically adapted for the reception of or interaction with content, e.g. set-top-box [STB]; Operations thereof
    • H04N21/43Processing of content or additional data, e.g. demultiplexing additional data from a digital video stream; Elementary client operations, e.g. monitoring of home network or synchronising decoder's clock; Client middleware
    • H04N21/44Processing of video elementary streams, e.g. splicing a video clip retrieved from local storage with an incoming video stream or rendering scenes according to encoded video stream scene graphs
    • H04N21/44012Processing of video elementary streams, e.g. splicing a video clip retrieved from local storage with an incoming video stream or rendering scenes according to encoded video stream scene graphs involving rendering scenes according to scene graphs, e.g. MPEG-4 scene graphs
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N21/00Selective content distribution, e.g. interactive television or video on demand [VOD]
    • H04N21/40Client devices specifically adapted for the reception of or interaction with content, e.g. set-top-box [STB]; Operations thereof
    • H04N21/43Processing of content or additional data, e.g. demultiplexing additional data from a digital video stream; Elementary client operations, e.g. monitoring of home network or synchronising decoder's clock; Client middleware
    • H04N21/44Processing of video elementary streams, e.g. splicing a video clip retrieved from local storage with an incoming video stream or rendering scenes according to encoded video stream scene graphs
    • H04N21/44016Processing of video elementary streams, e.g. splicing a video clip retrieved from local storage with an incoming video stream or rendering scenes according to encoded video stream scene graphs involving splicing one content stream with another content stream, e.g. for substituting a video clip
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N21/00Selective content distribution, e.g. interactive television or video on demand [VOD]
    • H04N21/40Client devices specifically adapted for the reception of or interaction with content, e.g. set-top-box [STB]; Operations thereof
    • H04N21/47End-user applications
    • H04N21/478Supplemental services, e.g. displaying phone caller identification, shopping application
    • H04N21/4788Supplemental services, e.g. displaying phone caller identification, shopping application communicating with other users, e.g. chatting
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N21/00Selective content distribution, e.g. interactive television or video on demand [VOD]
    • H04N21/40Client devices specifically adapted for the reception of or interaction with content, e.g. set-top-box [STB]; Operations thereof
    • H04N21/47End-user applications
    • H04N21/488Data services, e.g. news ticker
    • H04N21/4884Data services, e.g. news ticker for displaying subtitles
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Multimedia (AREA)
  • Signal Processing (AREA)
  • General Engineering & Computer Science (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明提供了一种基于golang的高并发信号处理平台,包括视频处理模块、弹幕渲染模块、并发协调模块;视频处理模块记录和转换数字音频和视频,并将其转化为流数据;视频处理模块对多个任务进行多线程处理;视频处理模块将一些常用的资源存储至内存中,进行复杂操作前,通过操作系统进行预先提取;当用户输入弹幕时,弹幕渲染将弹幕图片投放至视频流中;并发协调模块将任务按照优先级分配到不同的队列中,通过协程池来消费,消息队列中的任务。本发明有益效果:具有高效并发控制和协程调度的能力,内存消耗低,跨平台支持,运行速度快。

Description

一种基于golang的高并发信号处理平台
技术领域
本发明属于视频监控领域,尤其是涉及一种基于golang的高并发信号处理平台。
背景技术
在视频监控领域,对于视频的处理与协调是非常重要的一环,尤其是直播过程中,更需要对信号以及现场数据有着快速的反应,同时需要对视频进行快速处理,现有技术往往需要耗费大量的时间和计算资源,由于传统的视频处理技术采用多线程或者分布式系统来支持高并发处理,因此其内存消耗非常庞大;
从而导致了现有技术很难在短时间内完成对大量视频数据的处理,并且经常需要使用专门的集群环境才能够支撑大规模的视频处理需求,导致后台往往需要非常多的工作人员对视频进行处理,工作效率低,耗费大量人力成本,且需要高额的维护成本。
发明内容
有鉴于此,本发明旨在提出一种基于golang的高并发信号处理平台,以期解决上述部分技术问题中的至少之一。
为达到上述目的,本发明的技术方案是这样实现的:
本发明第一方面提供了,一种基于golang的高并发信号处理平台,包括视频处理模块、弹幕渲染模块、并发协调模块;
视频处理模块通过ffmpeg记录和转换数字音频和视频,并将数字音频和视频转化为流数据;
视频处理模块使用Goroutine对多个任务进行多线程处理;
视频处理模块将一些常用的资源存储至内存中,进行复杂操作前,通过操作系统进行预先提取;
弹幕渲染模块内存储有,对原始弹幕进行预先处理后得到的弹幕图片,当用户输入弹幕时,将弹幕图片投放至视频流中;
并发协调模块使用MQ工具将任务按照优先级分配到不同的队列中,通过golang的协程池来消费,消息队列中的任务。
进一步的,视频处理模块使用ffmpeg处理数据的过程如下:
A1、视频编码和解码:打开指定的输入文件,调用ffmpeg方法库创建一个NewTranscoder对象,并将视频解码器转换为h264编码后开始转码;
A2、剪裁视频:打开指定的输入文件,创建一个新的filter对象作为过滤器,创建一个新的输出文件开始剪裁操作;
A3、合并视频:打开需要合并的多个输入文件,创建一个新的Transcoder对象作为转码器,定义一个输出选项结构体来配置输出格式和合并选项,创建一个新的输出文件进行开始合并操作。
进一步的,视频处理模块进行多线程处理的过程如下:
读取输入视频文件列表中的所有mp4视频文件,对于视频文件列表中的每一个视频文件,都使用Goroutine并发执行转码任务,等待所有Goroutine执行完毕之后,结束程序。
进一步的,视频处理模块进行预处理操作的过程如下:
将要提取的资源文件加载到内存中的缓冲区并存储,在应用程序启动时,使用操作系统的I/O操作从磁盘上提取资源到内存中,并保留在内存中,当需要更改或访问某个图像资源时,从内存中获取相应的缓存,并进行操作。
进一步的,弹幕渲染模块进行预处理操作的过程如下:
根据原始弹幕的文字内容,使用一些图形库或字体渲染技术将其渲染成图片;将弹幕图片的背景设置为透明,以免遮挡住其他内容;对弹幕图片进行压缩处理;
弹幕渲染模块进行弹幕投放的过程如下:
根据视频内容和当前时间等因素计算出新弹幕图片应该在视频中出现的位置;控制当前弹幕的总数量,规定弹幕速度和密度;根据计算出的弹幕位置和已有弹幕的状态信息,将弹幕图片添加到视频流中。
进一步的,并发协调模块进行高并发处理的过程如下:
选择RabbitMQ作为消息队列工具,设计任务结构,包括任务类型、优先级、执行参数;
使用Golang实现并发协调模块,利用协程池控制并发数量;
根据任务的优先级,在消息队列中创建不同的队列;
进一步的,在服务器端,将任务按照优先级分配到对应的队列中;
在客户端,根据队列中的任务启动Golang协程,并从协程池中分配协程执行任务。
本发明第二方面提供了,一种电子设备,包括处理器以及与处理器通信连接,且用于存储所述处理器可执行指令的存储器,其特征在于:所述处理器用于执行上述第一方面任一所述的一种基于golang的高并发信号处理平台。
本发明第三方面提供了,一种服务器,其特征在于:包括至少一个处理器,以及与所述处理器通信连接的存储器,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述处理器执行,以使所述至少一个处理器执行如第一方面任一所述的一种基于golang的高并发信号处理平台。
本发明第四方面提供了,一种计算机可读取存储介质,存储有计算机程序,其特征在于:所述计算机程序被处理器执行时实现第一方面任一项所述的一种基于golang的高并发信号处理平台。
相对于现有技术,本发明所述的一种基于golang的高并发信号处理平台具有以下有益效果:
本发明所述的一种基于golang的高并发信号处理平台:
具有高并发处理能力:轻松地实现高效的并发控制和协程调度。
内存消耗低:由于Golang语言采用基于并发和通信的轻量级机制,因此其内存消耗较低,能够较好地支持高并发处理任务。
跨平台支持:Golang具有跨平台的特性,能够支持多种不同操作系统和硬件架构下的视频处理需求,从而提高了其应用范围。
运行速度快:Golang编译生成的二进制文件具有高速执行和低资源消耗的特性,能够有效缩短视频处理时间。
附图说明
构成本发明的一部分的附图用来提供对本发明的进一步理解,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1为本发明实施例所述的一种基于golang的高并发信号处理平台示意图。
具体实施方式
需要说明的是,在不冲突的情况下,本发明中的实施例及实施例中的特征可以相互组合。
下面将参考附图并结合实施例来详细说明本发明。
实施例一:
一种基于golang的高并发信号处理平台,包括视频处理模块、弹幕渲染模块、并发协调模块;
视频处理模块通过ffmpeg记录和转换数字音频和视频,并将数字音频和视频转化为流数据;
视频处理模块使用Goroutine对多个任务进行多线程处理;
视频处理模块将一些常用的资源存储至内存中,进行复杂操作前,通过操作系统进行预先提取;
弹幕渲染模块内存储有,对原始弹幕进行预先处理后得到的弹幕图片,当用户输入弹幕时,将弹幕图片投放至视频流中;
并发协调模块使用MQ工具将任务按照优先级分配到不同的队列中,通过golang的协程池来消费,消息队列中的任务。
视频处理模块使用ffmpeg处理数据的过程如下:
A1、视频编码和解码:
A101、打开输入文件
inputFile,err:=os.Open("input.mp4")
iferr!=nil{panic(err)}
deferinputFile.Close()
使用os.Open()函数打开指定的输入文件,如果操作失败则会panic,否则在函数结束时及时关闭(defer关键字加入)打开的文件。
A102、创建一个newtranscoder对象
transcoder,err:=ffmpeg.NewTranscoder(inputFile,nil)
iferr!=nil{panic(err)}
使用ffmpeg.NewTranscoder()创建一个新的转码器;传入第一个参数为输入文件,第二个参数是输出文件或输出流(如果该参数为nil则表示只对输入文件进行处理)。
A103、转换为h264编码
options:=&ffmpeg.OutputOptions{
VideoCodec:"h264",
AudioBitrate:128000,
AudioChannels:2,}
定义了一个输出选项结构体来配置输出格式,其中包括视频编解码器、音频码率和声道数等信息。具体的选项可以根据实际需求调整。
A104、开始转码
outputFile,err:=os.Create("output.mp4")
iferr!=nil{panic(err)}
deferoutputFile.Close()
transcoder.Start(outputFile,options)
使用os.Create()函数创建一个新的输出文件,用于写入转码后的视频数据。在defer关键字的作用下函数结束时及时关闭打开的输出文件。使用transcoder.Start()启动转码操作,传入第一个参数为输出文件(可以是文件流),第二个参数为输出选项。
A2、剪裁视频:
A201、打开输入文件
inputFile,err:=os.Open("input.mp4")
iferr!=nil{panic(err)}
deferinputFile.Close()
打开指定的输入文件并在处理完后及时关闭。
A202、创建一个新的filter对象
videoFilter:=ffmpeg.VideoFilter{
FilterName:"crop",
FilterParam:"100:100:0:0",//cropwidth=100,height=100,start_x=0,start_y=0}
创建一个新的过滤器对象,即要使用的剪裁滤镜;这里定义了一个VideoFilter结构体对象,其中包括了它的名称以及相关的参数,例如剪裁宽度、高度、起始点坐标等信息。
A203、开始剪裁操作
outputFile,err:=os.Create("output.mp4")
iferr!=nil{panic(err)}
deferoutputFile.Close()
err=ffmpeg.Process(inputFile,outputFile,&ffmpeg.Options{Filters:[]ffmpeg.Filter{videoFilter}})
iferr!=nil{panic(err)}
同样使用os.Create()函数创建一个新的输出文件;不同之处在于使用ffmpeg.Options结构体将剪裁滤镜作为选项进行设置,并使用ffmpeg.Process()函数对指定的输入文件进行处理。最终将处理结果写入输出文件中。
A3、合并视频:
A301、打开输入文件
inputFile1,err:=os.Open("input1.mp4")
iferr!=nil{panic(err)}
deferinputFile1.Close()
inputFile2,err:=os.Open("input2.mp4")
iferr!=nil{panic(err)}
deferinputFile2.Close()
同样使用os.Open()函数打开需要合并的多个输入文件。打开后要及时关闭以免内存泄漏。
A302、创建一个新的Transcoder对象
transcoder,err:=ffmpeg.NewTranscoder(nil,nil)
iferr!=nil{panic(err)}
创建一个新的转码器,不传入任何输入和输出相关信息。
A303、处理多个输入文件
options:=&ffmpeg.OutputOptions{
VideoCodec:"copy",
AudioCodec:"aac",
OutputFormat:"mp4",
Concat:"(concat:/path/to/file1.mp4|/path/to/file2.mp4)",}
定义一个输出选项结构体来配置输出格式和合并选项;这里的示例中使用了VideoCodec和AudioCodec分别作为输入文件视频、音频数据的编解码器,使用了OutputFormat来指定输出文件的格式。在此之上通过设置Concat属性来告诉ffmpeg需要对多个文件进行合并操作。
A304、开始转码
outputFile,err:=os.Create("output.mp4")
iferr!=nil{panic(err)}
deferoutputFile.Close()
transcoder.Start(outputFile,options)
最后再次使用os.Create()函数创建一个新的输出文件;和前面的例子一样,在函数正常结束时及时关闭打开的输出文件。使用transcoder.Start()启动转码操作,传入第一个参数为输出文件(可以是文件流),第二个参数为输出选项。
视频处理模块进行多线程处理的过程如下:
读取输入视频文件列表中的所有mp4视频文件,对于视频文件列表中的每一个视频文件,都使用Goroutine并发执行转码任务,等待所有Goroutine执行完毕之后,结束程序。
具体实现方式如下:
B1、读取视频文件列表
Go语言提供了目录操作相关的函数,可以方便地获取一个文件夹中的所有文件列表。可以使用os.ReadDir()函数在指定的文件夹中读取所有文件列表,并逐一判断文件是否位.mp4文件类型;如果是,则保存该文件名称到一个字符串数组中。
files,err:=os.ReadDir(inputFolder)
//inputFolder是输入文件夹路径
iferr!=nil{panic(err)}
videos:=make([]string,0)//存储视频文件的名称
for_,file:=rangefiles{if!file.IsDir()&&filepath.Ext(file.Name())==".mp4"{videos=append(videos,file.Name())}}
B2、启动Goroutine并发执行转码任务
接下来,对于音频列表中的每一个视频文件,都使用Goroutine并发执行转码任务。可以定义一个transcodeVideo()函数,用于进行单个视频的转码操作。然后使用go关键字启动多个Goroutine并发进行转码处理。
for_,video:=rangevideos{gotranscodeVideo(video,inputFolder,outputFolder)}
B3、等待Goroutine执行完毕
Goroutine是并发执行的,因此在主线程中不能直接等待完成任务,因为当主程序结束时,所有正在运行的Goroutine也会被强制关闭。因此,需要让主程序等待一段时间来确保所有的Goroutine都已经完成任务。
//等待所有Goroutine执行完毕
time.Sleep(time.Second*5)//等待五秒钟,确保所有任务都已完成
fmt.Println("Allvideoshavebeentranscoded.")
这里暂停主程序5秒钟,以确保所有任务已经完成。在实际应用中,可以根据具体情况调整等待时间,确保所有Goroutine都有足够时间完成耗时较长的任务。
B4、转换单个视频文件
下面是transcodeVideo()函数的代码示例:
functranscodeVideo(videostring,inputFolderstring,outputFolderstring){inputPath:=filepath.Join(inputFolder,video)
outputPath:=filepath.Join(outputFolder,strings.TrimSuffix(video,".mp4")+".avi")
inputFile,err:=os.Open(inputPath)
iferr!=nil{fmt.Println("Failedtoopeninputfile:",inputPath)return}
deferinputFile.Close()
transcoder,err:=ffmpeg.NewTranscoder(inputFile,nil)
iferr!=nil{fmt.Println("Failedtocreatetranscoderforfile:",inputPath)return}
outputFile,err:=os.Create(outputPath)
iferr!=nil{fmt.Println("Failedtocreateoutputfile:",outputPath)return}
deferoutputFile.Close()
options:=&ffmpeg.OutputOptions{
VideoCodec:"h264",
AudioCodec:"aac",
OutputFormat:"avi",}
transcoder.Start(outputFile,options)}
该函数接收三个参数:视频文件名称、输入文件夹路径和输出文件夹路径;首先根据标准库的filepath.Join()函数拼接出输入文件路径和输出文件路径;然后使用os.Open()函数打开视频文件,并根据需要创建一个新的输出文件;接下来,使用第三方包go-ffmpeg/transcoder创建一个转码器,并指定编解码器参数进行转换;最后使用transcoder.Start()方法启动转码操作。
视频处理模块进行预处理操作的过程如下:
C1、存储资源到内存中
首先,需要将要提取的资源文件加载到内存中并存储;在Go语言中,可以通过创建一个缓冲区来实现;对于资源的加载方式有很多方法,比如读取文件、下载文件或直接在代码中定义变量等。
funcreadImageToMemory(imagePathstring)*bytes.Buffer{
//打开文件
f,err:=os.Open(imagePath)
iferr!=nil{panic(err)}
deferf.Close()
//将文件内容读取到缓冲区
buffer:=new(bytes.Buffer)
_,err=io.Copy(buffer,f)
iferr!=nil{panic(err)}returnbuffer}
这个函数接收一个图片文件路径作为参数,并返回一个bytes.Buffer类型的缓冲区对象;该函数首先使用标准库的os.Open()方法打开指定路径的文件;然后创建一个新的缓冲区,并使用标准库的io.Copy()函数将打开的文件内容复制到缓冲区中;最后,函数返回该缓冲区对象,使其可以在内存中被访问。
对于其他类型的资源文件(如音频、视频等),可以使用类似的方法将它们读取到内存中。
C2、使用操作系统进行预先提取
接下来,需要在应用程序启动时,使用操作系统的I/O操作从磁盘上提取资源到内存中,并保留在内存中;这样一来,当需要使用这些资源时,它们已经在内存中并且可以立即访问,而不需要再次读取磁盘上的文件。
在Go语言中,可以使用init()函数在应用程序启动时执行初始化操作。例如,要在启动应用程序时从磁盘上读取并存储所有图像资源,可以编写以下代码:
varimageCache=make(map[string]*bytes.Buffer)
funcinit(){
//获取所有图片文件列表
files,err:=ioutil.ReadDir(IMAGE_DIRECTORY)
iferr!=nil{panic(err)}
//对每个图像文件进行预提取
for_,file:=rangefiles{
imagePath:=filepath.Join(IMAGE_DIRECTORY,file.Name())
buffer:=readImageToMemory(imagePath)
imageName:=file.Name()
imageCache[imageName]=buffer}}
这段代码中,首先使用标准库的ioutil.ReadDir()函数获取指定路径下的所有图片文件列表;然后循环遍历所有文件,并使用readImageToMemory()函数将每个文件读取到内存中并转换为缓冲区;最后,将内存中的图像缓冲区保存在一个全局的map中,其中,key是图片名称,value是对应图片内容的缓冲区。
C3、使用内存中的资源
当需要更改或者访问某个图像资源时,只需要从内存中获取相应的缓存,并进行操作即可:
funcgetImageBuffer(imageNamestring)(*bytes.Buffer,error){
buffer,ok:=imageCache[imageName]
if!ok{returnnil,errors.New("imagenotfound")}
returnbuffer,nil}
这段代码中,定义了一个函数getImageBuffer(),用于获取指定图片名称的缓冲区;该函数首先在之前预提取过的imageCachemap中查找是否存在该名称的图片文件内容,如果存在,则返回与图片名称关联的缓冲区对象;如果没有,将会返回一个错误提示。
弹幕渲染模块进行预处理操作的过程如下:
首先,确定目标视频的分辨率、帧率等参数,并设计出要投放的弹幕的样式和布局;
接着,进行预处理阶段的操作,按照文字渲染、背景透明化、图片压缩的顺序逐一完成如下操作:
使用Python PIL库对原始弹幕文本进行字体渲染,得到一张弹幕图片;
将该图片的背景设置为透明,以确保其可以与视频内容无缝结合;
使用现代图片压缩算法,如JPEG或PNG格式进行压缩,以减小文件大小。
弹幕渲染模块进行弹幕投放的过程如下:
按照计算弹幕位置、控制弹幕数量、投放弹幕图片、弹幕移动和变化的顺序逐一完成如下操作:
根据视频内容以及已有弹幕的状态信息,计算新弹幕图片应该出现的位置;
设定弹幕数量、速度和密度的规则,以确保弹幕的数量和质量符合预期;
使用Python Flask框架搭建后端服务,WebSocket实现管理画布数据的推拉和呈现。在需要投放新弹幕时,将其对应的图片直接添加到视频流中;
考虑弹幕的移动、字体大小、颜色等因素,确保其可以流畅滚动并且容易阅读。
并发协调模块进行高并发处理的过程如下:
选择RabbitMQ作为消息队列工具,设计任务结构,包括任务类型、优先级、执行参数;
使用Golang实现并发协调模块,利用协程池控制并发数量;
根据任务的优先级,在消息队列中创建不同的队列;
在服务器端,将任务按照优先级分配到对应的队列中;
在客户端,根据队列中的任务启动Golang协程,并从协程池中分配协程执行任务。
实施例二:
一种电子设备,包括处理器以及与处理器通信连接,且用于存储所述处理器可执行指令的存储器,其特征在于:所述处理器用于执行上述实施例一任一所述的一种基于golang的高并发信号处理平台。
实施例三:
一种服务器,其特征在于:包括至少一个处理器,以及与所述处理器通信连接的存储器,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述处理器执行,以使所述至少一个处理器执行如实施例一任一所述的一种基于golang的高并发信号处理平台。
实施例四:
一种计算机可读取存储介质,存储有计算机程序,其特征在于:所述计算机程序被处理器执行时实现实施例一任一项所述的一种基于golang的高并发信号处理平台。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及方法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
在本申请所提供的几个实施例中,应该理解到,所揭露的方法和系统,可以通过其它的方式实现。例如,以上所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。上述单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本发明实施例方案的目的。
最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围,其均应涵盖在本发明的权利要求和说明书的范围当中。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

Claims (3)

1.一种基于golang的高并发信号处理平台,其特征在于:
包括视频处理模块、弹幕渲染模块、并发协调模块;
视频处理模块通过ffmpeg记录和转换数字音频和视频,并将数字音频和视频转化为流数据;
视频处理模块使用Goroutine对多个任务进行多线程处理;
视频处理模块将一些常用的资源存储至内存中,进行复杂操作前,通过操作系统进行预先提取;
弹幕渲染模块内存储有对原始弹幕进行预先处理后得到的弹幕图片,当用户输入弹幕时,将弹幕图片投放至视频流中;
并发协调模块使用MQ工具将任务按照优先级分配到不同的队列中,通过golang的协程池来消费消息队列中的任务;
视频处理模块使用ffmpeg处理数据的过程如下:
A1、视频编码和解码:打开指定的输入文件,调用ffmpeg方法库创建一个NewTranscoder对象,并将视频解码器转换为h264编码后开始转码;
A101、打开指定的输入文件,如果操作失败则panic,否则在函数结束时及时关闭打开的文件;
A102、调用ffmpeg方法库创建一个新的转码器,传入第一个参数为输入文件,第二个参数为输出文件,如果第二个参数nil则只对输入文件进行处理;
A103、定义一个输出选项结构体来配置输出格式,其中包括视频编解码器、音频码率和声道数信息,将视频解码器转换为h264编码;
A104、开始转码,创建一个用于写入转码后的视频数据的输出文件,函数结束时及时关闭打开的输出文件,启动转码操作,传入第一个参数为输出文件,第二个参数为输出选项;
A2、剪裁视频:打开指定的输入文件,创建一个新的filter对象作为过滤器,创建一个新的输出文件开始剪裁操作;
A201、打开指定的输入文件并在处理完后及时关闭;
A202、创建一个新的过滤器对象作为剪裁滤镜,定义一个剪裁滤镜的结构体对象,其中包括了剪裁滤镜的名称以及相关参数,包括剪裁宽度、高度、起始点坐标信息;
A203、开始剪裁操作,创建一个新的输出文件,使用Options结构体将剪裁滤镜作为选项进行设置,并使用Process()函数对指定的输入文件进行处理,最终将处理结果写入输出文件中;
A3、合并视频:打开需要合并的多个输入文件,创建一个新的Transcoder对象作为转码器,定义一个输出选项结构体来配置输出格式和合并选项,创建一个新的输出文件进行开始合并操作;
A301、打开需要合并的多个输入文件,并在处理完后及时关闭;
A302、创建一个新的转码器,不传入任何输入和输出相关信息;
A303、定义一个输出选项结构体来配置输出格式和合并选项,结构体包括输入文件视频、音频数据的编解码器,并指定输出文件的格式,通过设置Concat属性通知ffmpeg需要对多个文件进行合并操作;
A304、开始转码,创建一个新的输出文件,启动转码操作,传入第一个参数为输出文件,第二个参数为输出选项,在转码正常结束时及时关闭打开的输出文件;
并发协调模块进行高并发处理的过程如下:
选择RabbitMQ作为消息队列工具,设计任务结构,包括任务类型、优先级、执行参数;
使用Golang实现并发协调模块,利用协程池控制并发数量;
根据任务的优先级,在消息队列中创建不同的队列;
在服务器端,并发协调模块,将任务按照优先级分配到对应的队列中;
在客户端,并发协调模块,根据队列中的任务启动Golang协程,从协程池中分配协程执行任务;
视频处理模块进行多线程处理的过程如下:
读取输入视频文件列表中的所有mp4视频文件,对于视频文件列表中的每一个视频文件,都使用Goroutine并发执行转码任务,等待所有Goroutine执行完毕之后,结束程序;
具体实现方式如下:
B1、读取视频文件列表:使用os.ReadDir()函数在指定的文件夹中读取所有文件列表,并逐一判断文件是否为.mp4文件类型;如果是,则保存该文件名称到一个字符串数组中;
B2、启动Goroutine并发执行转码任务:对于音频列表中的每一个视频文件,都使用Goroutine并发执行转码任务,定义一个transcodeVideo()函数,用于进行单个视频的转码操作,使用go关键字启动多个Goroutine并发进行转码处理;
B3、等待Goroutine执行完毕:等待五秒钟,确保所有任务都已完成;
B4、转换单个视频文件:transcodeVideo()函数接收三个参数:视频文件名称、输入文件夹路径和输出文件夹路径,首先根据标准库的filepath.Join()函数拼接出输入文件路径和输出文件路径;然后使用os.Open()函数打开视频文件,并根据需要创建一个新的输出文件;其次使用第三方包创建一个转码器,并指定编解码器参数进行转换;最后使用transcoder.Start()方法启动转码操作。
2.根据权利要求1所述的一种基于golang的高并发信号处理平台,其特征在于:
视频处理模块进行预处理操作的过程如下:
将要提取的资源文件加载到内存中的缓冲区并存储,在应用程序启动时,使用操作系统的I/O操作从磁盘上提取资源到内存中,并保留在内存中,当需要更改或访问某个图像资源时,从内存中获取相应的缓存,并进行操作。
3.根据权利要求1所述的一种基于golang的高并发信号处理平台,其特征在于:
弹幕渲染模块进行预处理操作的过程如下:
根据原始弹幕的文字内容,使用一些图形库或字体渲染技术将其渲染成图片;将弹幕图片的背景设置为透明,以免遮挡住其他内容;对弹幕图片进行压缩处理;
弹幕渲染模块进行弹幕投放的过程如下:
根据视频内容和当前时间等因素计算出新弹幕图片应该在视频中出现的位置;控制当前弹幕的总数量,规定弹幕速度和密度;根据计算出的弹幕位置和已有弹幕的状态信息,将弹幕图片添加到视频流中。
CN202310841942.1A 2023-07-11 2023-07-11 一种基于golang的高并发信号处理平台 Active CN116567341B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202310841942.1A CN116567341B (zh) 2023-07-11 2023-07-11 一种基于golang的高并发信号处理平台

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202310841942.1A CN116567341B (zh) 2023-07-11 2023-07-11 一种基于golang的高并发信号处理平台

Publications (2)

Publication Number Publication Date
CN116567341A CN116567341A (zh) 2023-08-08
CN116567341B true CN116567341B (zh) 2023-10-10

Family

ID=87496938

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202310841942.1A Active CN116567341B (zh) 2023-07-11 2023-07-11 一种基于golang的高并发信号处理平台

Country Status (1)

Country Link
CN (1) CN116567341B (zh)

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105262825A (zh) * 2015-10-29 2016-01-20 曲阜师范大学 基于h.265的spice云桌面传输和展现方法及系统
CN110019197A (zh) * 2017-09-28 2019-07-16 武汉斗鱼网络科技有限公司 一种数据写入的方法、装置、服务器及介质
CN112771881A (zh) * 2018-11-13 2021-05-07 深圳市欢太科技有限公司 弹幕处理方法、装置、电子设备及计算机可读取存储介质
CN113703997A (zh) * 2021-08-16 2021-11-26 北京图菱视频科技有限公司 集成多种消息代理的双向异步通信中间件系统及实现方法
CN114090483A (zh) * 2021-09-30 2022-02-25 上海浦东发展银行股份有限公司 一种基于协程的rdma通信方法、装置及存储介质
CN114598899A (zh) * 2022-03-15 2022-06-07 中科大数据研究院 一种基于爬虫的弹幕播报分析方法

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105262825A (zh) * 2015-10-29 2016-01-20 曲阜师范大学 基于h.265的spice云桌面传输和展现方法及系统
CN110019197A (zh) * 2017-09-28 2019-07-16 武汉斗鱼网络科技有限公司 一种数据写入的方法、装置、服务器及介质
CN112771881A (zh) * 2018-11-13 2021-05-07 深圳市欢太科技有限公司 弹幕处理方法、装置、电子设备及计算机可读取存储介质
CN113703997A (zh) * 2021-08-16 2021-11-26 北京图菱视频科技有限公司 集成多种消息代理的双向异步通信中间件系统及实现方法
CN114090483A (zh) * 2021-09-30 2022-02-25 上海浦东发展银行股份有限公司 一种基于协程的rdma通信方法、装置及存储介质
CN114598899A (zh) * 2022-03-15 2022-06-07 中科大数据研究院 一种基于爬虫的弹幕播报分析方法

Also Published As

Publication number Publication date
CN116567341A (zh) 2023-08-08

Similar Documents

Publication Publication Date Title
US9652312B2 (en) Realtime processing of streaming data
US6961943B2 (en) Multimedia processing system parsing multimedia content from a single source to minimize instances of source files
US7197752B2 (en) System and related methods for reducing source filter invocation in a development project
US6774919B2 (en) Interface and related methods for reducing source accesses in a development system
US7680898B2 (en) Systems for processing multi-media editing projects
US7712106B2 (en) System and methods for generating and managing filter strings in a filter graph
US7940275B2 (en) Interface and related methods for dynamically generating a filter graph in a development system
US5384890A (en) Method and apparatus for providing multiple clients simultaneous access to a sound data stream
US8612859B2 (en) Methods and systems for effecting video transitions represented by bitmaps
CN103778107A (zh) 一种基于excel快速动态生成表单的方法与平台
CN109274973A (zh) 嵌入式arm平台上的快速视频解码方法
WO2023065629A1 (zh) 一种对话管理方法、系统、终端及存储介质
US7103677B2 (en) Methods and systems for efficiently processing compressed and uncompressed media content
CN116567341B (zh) 一种基于golang的高并发信号处理平台
CN114501149A (zh) 一种音频/视频文件的解码方法、装置、设备及可读介质
CN112188235B (zh) 媒体处理方式的选择方法及媒体处理方法
CN113518160A (zh) 视频生成方法、装置、设备及存储介质
CN115243102B (zh) 基于Web技术的视频播放方法、装置、设备以及存储介质
CN114339389B (zh) 音视频系统
Zhong et al. An animation video resource conversion system based on supercomputers
CN115408472A (zh) 一种写入多数据源的实现方法与系统
AU2005201165B2 (en) Rendering Images Containing Video
CN116668417A (zh) 一种构建多媒体中间件内部数据处理传输通道的方法
CN114157910A (zh) 视频非编系统和视频非编方法
CN117033829A (zh) 一种业务系统创建方法、装置、计算机设备和存储介质

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant