CN115002558A - 一种直播过程中的音视频录制方法及相关设备 - Google Patents
一种直播过程中的音视频录制方法及相关设备 Download PDFInfo
- Publication number
- CN115002558A CN115002558A CN202210545931.4A CN202210545931A CN115002558A CN 115002558 A CN115002558 A CN 115002558A CN 202210545931 A CN202210545931 A CN 202210545931A CN 115002558 A CN115002558 A CN 115002558A
- Authority
- CN
- China
- Prior art keywords
- audio
- video
- data
- input stream
- ffmpeg
- 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.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 86
- 230000008569 process Effects 0.000 title claims abstract description 42
- 238000004590 computer program Methods 0.000 claims description 23
- 238000006243 chemical reaction Methods 0.000 claims description 9
- 238000012952 Resampling Methods 0.000 claims description 4
- 238000012856 packing Methods 0.000 claims description 3
- 239000002699 waste material Substances 0.000 abstract description 4
- 230000006870 function Effects 0.000 description 16
- 238000010586 diagram Methods 0.000 description 12
- 238000012545 processing Methods 0.000 description 8
- 230000008901 benefit Effects 0.000 description 5
- 238000005070 sampling Methods 0.000 description 5
- 238000004364 calculation method Methods 0.000 description 3
- 238000004891 communication Methods 0.000 description 3
- 230000008878 coupling Effects 0.000 description 3
- 238000010168 coupling process Methods 0.000 description 3
- 238000005859 coupling reaction Methods 0.000 description 3
- 230000003287 optical effect Effects 0.000 description 3
- 238000009877 rendering Methods 0.000 description 3
- 230000005540 biological transmission Effects 0.000 description 2
- 238000007781 pre-processing Methods 0.000 description 2
- 238000013139 quantization Methods 0.000 description 2
- 230000003139 buffering effect Effects 0.000 description 1
- 238000004422 calculation algorithm Methods 0.000 description 1
- 230000006835 compression Effects 0.000 description 1
- 238000007906 compression Methods 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 238000002474 experimental method Methods 0.000 description 1
- 239000000835 fiber Substances 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 230000002123 temporal effect Effects 0.000 description 1
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N21/00—Selective content distribution, e.g. interactive television or video on demand [VOD]
- H04N21/80—Generation or processing of content or additional data by content creator independently of the distribution process; Content per se
- H04N21/85—Assembly of content; Generation of multimedia applications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N21/00—Selective content distribution, e.g. interactive television or video on demand [VOD]
- H04N21/80—Generation or processing of content or additional data by content creator independently of the distribution process; Content per se
- H04N21/85—Assembly of content; Generation of multimedia applications
- H04N21/854—Content authoring
- H04N21/85406—Content authoring involving a specific file format, e.g. MP4 format
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N21/00—Selective content distribution, e.g. interactive television or video on demand [VOD]
- H04N21/80—Generation or processing of content or additional data by content creator independently of the distribution process; Content per se
- H04N21/85—Assembly of content; Generation of multimedia applications
- H04N21/854—Content authoring
- H04N21/8547—Content authoring involving timestamps for synchronizing content
Landscapes
- Engineering & Computer Science (AREA)
- Multimedia (AREA)
- Signal Processing (AREA)
- Computer Security & Cryptography (AREA)
- Signal Processing For Digital Recording And Reproducing (AREA)
Abstract
本发明公开了一种直播过程中的音视频录制方法及相关设备。该方法包括:获取WebRtc推流过程中的音视频编码数据;利用FFmpeg创建音视频录制文件对应的媒体文件;通过上述FFmpeg创建上述媒体文件的音频输入流和视频输入流;利用上述FFmpeg创建编码器并将编码器参数写入上述媒体文件的音频输入流和视频输入流;通过上述FFmpeg创建媒体封装器,以封装上述音频输入流和上述视频输入流为音频数据和视频数据;利用FFmpeg将上述音频数据和上述视频数据写入上述媒体文件并编写媒体文件的结尾以获取上述音视频录制文件。本方法避免了录制时进行二次编码,从而节省了主播侧客户端设备的性能消耗,避免了资源浪费。
Description
技术领域
本说明书涉及直播领域,更具体地说,本发明涉及一种在直播过程中的音视频录制方法及相关设备。
背景技术
在主播直播的过程中,有时候需要将直播过程中的精彩时刻录制到本地,以便主播进行后续的精彩时刻剪辑等需要,这时候就需要对精彩时刻进行录制。而目前直播中,采用的是WebRtc推流,WebRtc推流时,会有音频采集、编码、传输等一套流程,但却没有实现本地音视频录制的方法,现有技术中的FFmpeg框架中可实现从音视频采集、编码到录制的一套完整的录制方法,但如果采用WebRtc推流直播,再采用FFmpeg的一套完整的流程进行视频录制,就会出现两次音视频编码,这样整个过程会对计算资源消耗较高,录制效率较低,增大了音视频卡顿的风险。
发明内容
在发明内容部分中引入了一系列简化形式的概念,这将在具体实施方式部分中进一步详细说明。本发明的发明内容部分并不意味着要试图限定出所要求保护的技术方案的关键特征和必要技术特征,更不意味着试图确定所要求保护的技术方案的保护范围。
为了解决现有技术中在直播过程中对音视频进行录制时产生的计算资源消耗较高、录制效率低的问题,第一方面,本发明提出一种直播过程中音视频录制方法,用于客户端,上述方法包括:
获取WebRtc推流过程中的音视频编码数据,其中,上述音视频编码数据包括音频编码数据和视频编码数据;
利用FFmpeg创建音视频录制文件对应的媒体文件;
通过上述FFmpeg创建上述媒体文件的音频输入流和视频输入流,其中,上述音频输入流为上述音频编码数据,上述视频输入流为上述视频编码数据;
利用上述FFmpeg创建编码器并将编码器参数写入上述媒体文件的音频输入流和视频输入流;
通过上述FFmpeg创建媒体封装器,以封装上述音频输入流和上述视频输入流为音频数据和视频数据;
利用FFmpeg将上述音频数据和上述视频数据写入上述媒体文件并编写媒体文件的结尾以获取上述音视频录制文件。
可选的,上述利用上述FFmpeg创建编码器并将编码器参数写入上述媒体文件的音频输入流和视频输入流,包括:
利用上述FFmpeg创建AVCodecContext编码器;
将编码器参数写入上述音频输入流和上述视频输入流,其中,上述编码器参数包括上述公共参数、上述音频参数和上述视频参数。
可选的,上述利用FFmpeg将上述音频数据和上述视频数据写入上述媒体文件并编写媒体文件的结尾以获取上述音视频录制文件,包括:
利用上述FFmpeg根据上述音频数据创建音频AVPacket数据包;
根据上述视频数据创建视频AVPacket数据包;
将上述音频AVPacket数据包和上述视频AVPacket数据包交替写入上述媒体文件;其中,同一组交替写入上述媒体文件的上述音频AVPacket数据包和上述视频AVPacket数据包中包括相同的解码时间戳;
在交替写入后的上述媒体文件中编写媒体文件的结尾以获取上述音视频录制文件。
可选的,上述音频AVPacket数据包中包括音频解码时间戳,上述音频解码时间戳是根据录制初始化时间戳和音频编码器抛出数据时间戳进行时间粒度转化获取的。
可选的,上述视频AVPacket数据包中包括视频解码时间戳,上述视频解码时间戳是根据录制初始化时间戳和视频编码器抛出数据时间戳进行时间粒度转化获取的。
可选的,上述获取WebRtc推流过程中的音视频编码数据之前还包括:
基于预设时间间隔对外部输入音频进行缓存以获取缓存音频;
对上述缓存音频进行重新采样获取待编码音频文件;
上述WebRtc将上述待编码音频文件编码为上述音频编码数据。
可选的,上述获取WebRtc推流过程中的音视频编码数据之前还包括:
获取待编码视频文件;
上述WebRtc将上述待编码视频文件编码为上述视频编码数据。
第二方面,本发明还提出一种音视频录制装置,包括:
第一获取单元,用于获取WebRtc推流过程中的音视频编码数据,其中,上述音视频编码数据包括音频编码数据和视频编码数据;
第一创建单元,用于利用FFmpeg创建音视频录制文件对应的媒体文件;
第二创建单元,用于通过上述FFmpeg创建上述媒体文件的音频输入流和视频输入流,其中,上述音频输入流为上述音频编码数据,上述视频输入流为上述视频编码数据;
写入单元,用于利用上述FFmpeg创建编码器并将编码器参数写入上述媒体文件的音频输入流和视频输入流;
封装单元,用于通过上述FFmpeg创建媒体封装器,以封装上述音频输入流和上述视频输入流为音频数据和视频数据;
第二获取单元,用于利用FFmpeg将上述音频数据和上述视频数据写入上述媒体文件并编写媒体文件的结尾以获取上述音视频录制文件。
第三方面,一种电子设备,包括:储存器、处理器以及存储在上述存储器中并可在上述处理器上运行的计算机程序,上述处理器用于执行存储器中存储的计算机程序时实现如上述的第一方面任一项的音视频录制方法的步骤。
第四方面,本发明还提出一种计算机可读存储介质,其上存储有计算机程序,上述计算机程序被处理器执行时实现第一方面上述任一项的音视频录制方法。
综上,本申请提出的音视频录制方法包括:获取WebRtc推流过程中的音视频编码数据,其中,上述音视频编码数据包括音频编码数据和视频编码数据;利用FFmpeg创建音视频录制文件对应的媒体文件;通过上述FFmpeg创建上述媒体文件的音频输入流和视频输入流,其中,上述音频输入流为上述音频编码数据,上述视频输入流为上述视频编码数据;利用上述FFmpeg创建编码器并将编码器参数写入上述媒体文件的音频输入流和视频输入流;通过上述FFmpeg创建媒体封装器,以封装上述音频输入流和上述视频输入流为音频数据和视频数据;利用FFmpeg将上述音频数据和上述视频数据写入上述媒体文件并编写媒体文件的结尾以获取上述音视频录制文件。本申请实施例提供的方法,主播在通过WebRtc进行直播的同时可以通过FFmpeg进行音视频录制,并且在进行音视频录制时利用WebRtc直播流中的音视频编码数据,从而避免了录制时进行二次编码,从而节省了主播侧客户端设备的性能消耗,避免了资源浪费。同时,利用了WebRtc的低延迟直播的特点和FFmpeg在视频录制中的优势,为主播提供了一种低延时直播并能够实现低性能消耗的音视频录制方法。
本发明的音视频录制方法,本发明的其它优点、目标和特征将部分通过下面的说明体现,部分还将通过对本发明的研究和实践而为本领域的技术人员所理解。
附图说明
通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本说明书的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
图1为本申请实施例提供的一种音视频录制方法流程示意图;
图2为本申请实施例提供的一种FFmpeg录制流程示意图;
图3为本申请实施例提供的一种音视频录制装置结构示意图;
图4为本申请实施例提供的一种音视频录制电子设备结构示意图。
具体实施方式
本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”、“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的实施例能够以除了在这里图示或描述的内容以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。
请参阅图1,为本申请实施例提供的一种直播过程中的音视频录制方法流程示意图,具体可以包括:步骤S110至步骤S150。
步骤S110、获取WebRtc推流过程中的音视频编码数据,其中,上述音视频编码数据包括音频编码数据和视频编码数据;
示例性的,WebRtc(Web Real-Time Communication,网页即时通信)提供了音视频的采集、编解码、网络传输、显示等功能,并且还支持跨平台(Windows、Linux、MAC和Android等),同时具有低延时的特点,在主播需要低延时直播时常常采用WebRtc进行直播。虽然WebRtc在直播方面有着其他软件无法比拟的优点,但是WebRtc并没有实时音视频录制功能,无法满足主播在直播过程中对精彩时刻的音视频录制的需求。
WebRtc在推流的过程中会对音频文件和视频文件进行编码,从而形成音频编码数据和视频编码数据,而在音视频录制的过程中也需要进行音视频编码,且编码的过程会消耗大量的资源并浪费时间。本申请实施例提出的方法通过获取主播在利用WebRtc推流的过程中编码后生成的音频编码数据和视频编码数据进行录制,可以省去音频编码和视频编码的操作。
在步骤S110之前为了满足WebRTC的直播需求,主播端可通过步骤S100-A1至步骤S100-C1获取音频编码数据,
S100-A1、基于预设时间间隔对外部输入音频进行缓存以获取缓存音频;
S100-B1、对上述缓存音频进行重新采样获取待编码音频文件;
S100-C1、上述WebRtc将上述待编码音频文件编码作为上述音频编码数据;
相应的,在步骤S110之前为了满足WebRTC的直播需求,主播端可通过步骤S100-A2至步骤S100-B2获取视频编码数据,其中,
S100-A2、获取待编码视频文件;
S100-B2、上述WebRtc将上述待编码视频文件编码为上述视频编码数据。
示例性的,主播通过外部的音频采集设备对音频进行采集并经过通过音频采集设备相应的音频算法处理后生成PCM原始数据(即外部输入音频),外部输入音频的采样频率可以为44100Hz,采样数nSamples为1024,通道数channels为2。由于音频采集不是WebRtc中的音频采集模块获取的,WebRtc推流时需要对外部音频采集设备采集到的外部输入音频进行预处理。预处理包括基于预设时间间隔对外部输入音频进行缓存,对缓存音频进行重新采样获取到待编码音频文件。将经过预处理后得到的待编码音频文件通过WebRtc编码为音频编码数据。
进一步地,视频则是直接通过摄像头获取主播的待编码视频文件,输入到WebRtc,经过H264编码后形成上述视频编码数据,用于音视频录制。
S120、利用FFmpeg创建音视频录制文件对应的媒体文件;
示例性的,如图2所示,可以利用FFmepeg软件通过调用函数avformat_alloc_output_context2实现;
S130、通过上述FFmpeg创建上述媒体文件的音频输入流和视频输入流,其中,上述音频输入流为上述音频编码数据,上述视频输入流为上述视频编码数据;
示例性的,如图2所示,可以利用FFmepeg软件通过调用函数avformat_new_stream实现。
S140、利用上述FFmpeg创建编码器并将编码器参数写入上述媒体文件的音频输入流和视频输入流;
示例性的,如图2所示,可以通过调用函数avcodec_par-amenters_from_context创建编码器,通过调用函数avio_open将编码器参数写入上述媒体文件的音频输入流和视频输入流。
在一些实施方式中,步骤S140具体可以包括步骤S1401和步骤S1402:
S1401、利用所述FFmpeg创建AVCodecContext编码器;
S1402、将编码器参数写入所述音频输入流和所述视频输入流,其中,所述编码器参数包括所述公共参数、所述音频参数和所述视频参数。
示例性的,上述AVCodecContext编码器用于将WebRtc获取的音视频编码数据转换为FFmpeg可利用的编码文件,创建的AVCodecContext编码器通过对参数进行针对性设置可以分别实现视频编码器和音频编码器的功能。AVCodecContext编码器包括用于描述编码器的数据结构struct AVcodecContext,还包括写在媒体文件的结尾字段数据结构structAVPacket。其中,struct AVPacket包括音频视频公共参数、音频参数和视频参数。
具体的,AVCodecContext数据结构部分字段说明如下:
当AVCodecContext编码器为音频编码器时,音频编码器需要设置的字段如下:
codec_type:表示编码器类型,设置为音频AVMEDIA_TYPE_AUDIO。
codec_id:表示音频编码格式,设置为OPUS格式AV_CODEC_ID_OPUS。
sample_rate:表示音频采样率,本案中设置为48000。
channels:表示音频输入通道数,本案中设置为2。
pix_fmt:采样点数据类型,设置为AV_SAMPLE_FMT_S16类型。
time_base:表示时间粒度,设置为采样率的倒数。
strict_std_compliance:表示编译选项设置,需要设置为FF_COMPLIANCE_EXPERIMENTAL,表示允许进行非标准的实验。
flag:表示其他参数选项设置,需要设置AV_CODEC_FLAG_GLOBAL_HEADER,表示从extradata中读取编码相关信息,然后将信息填充到每一帧的header,才能正确解码。
codec_tag:表示编码器格式标识,需要设置为Opus对应的id。
extradata:表示编码信息,由于音频数据不是经过FFmpeg采集编码,不会自动生成,因此此处需要根据音频格式、采样率、通道数等进行填写,不然写入的音频文件播放会出错。
当AVCodecContext编码器为视频编码器时,视频编码器需要设置的字段如下:
{
width:视频宽度。
height:视频高度。
gop_size:一组连续的画面帧数。
qmin:q为量化参数,反映了空间细节压缩情况。值越小,量化越精细,图像质量越高,产生的码流也越长,qmin表示最小qp。
qmax:表示最大qp。
rc_max_rate:编码最大码率。
rc_min_rate:编码最小码率。
profile:画质属性。
max_b_frames:非B帧之间的最大B帧数。
sample_aspect_ratio:样本的宽相对于高的比。
}
需要说明的是,视频编码器AVCodecContext参数中codec_id设置为H264编码,codec_tag设置为H264对应的tag,time_base设置为视频输入帧率fps的倒数,pix_fmt设置为AV_PIX_FMT_YUV420P,width、height、gop_size、profile等参数根外部输入的视频属性设置,需要特殊说明的是sample_aspect_ratio需要进行初始化设置为{0,1},不然创建AVCodecContext分配内存时概率性生成随机值,导致播放时参数display_aspect_ratio值计算错误,播放画面被拉伸。
AVPacket结构部分参数如下:
字段说明及设置如下:
pts:表示该包渲染时间戳。
dts:表示该包解码时间戳。
data:表示音频数据,类型为uint8_t。
size:表示音频数据长度。
stream_index:表示在AVFormatContext中streams的位置索引。
duration:表示该包持续时间。
可以理解的是,通过步骤S1401和步骤S1402创建了一个音视频通用的AVCodecContext编码器,通过设置编码器参数可分别执行视频编码器和音频编码器的功能,通过AVCodecContext编码器可以将WebRtc获取到的音频编码数据和视频编码数据转换为FFmpeg可以使用的AVpacket格式,从而可以实现利用WebRtc获取到的音视频编码通过FFmpeg完成音视频文件录制。
在一些实施方式中,上述音频AVPacket数据包中包括音频解码时间戳,上述音频解码时间戳是根据录制初始化时间戳和音频编码器抛出数据时间戳进行时间粒度转化获取的。
示例性的,根据上述音频数据创建音频AVPacket数据包时,由于FFmpeg写入到媒体文件的数据包格式为AVPacket,因此需要创建音频AVPacket数据包,将音频编码数据拷贝到音频AVPacket数据包中的data,同时需要设置AVPacket的部分参数:size为拷贝的音频数据包长度,stream_index为0,音频数据包AVPacket的解码时间戳dts可以等同于渲染时间戳pts。解码时间戳dts可以通过下述方式计算计算方式:
S310、设置录制初始化时间戳为start_time;
S320、音频Opus编码器每抛出一个音频数据,组装成音频AVPacket数据包,获取当前时间为now_time;
S330、计算解码时间戳dts,AVPacket的dts=av_rescale_q((now_time-start_time),time_base_q,audio_time_base),其中,av_rescale_q表示将当前的时间粒度time_base_q转换为audio_time_base,相当于时间单位转换;
S340、计算音频AVPacket中数据包持续时长duration;
在S340中计算音频AVPacket中数据包持续时长duration可以分为两种情况:
A:在音频AVPacket数据包为媒体文件中首个音频AVPacket数据包时,数据包持续时长duration=audio_channel_*audio_samplerate_/100;
B;在音频AVPacket数据包不是媒体文件中首个音频AVPacket包时,数据包持续时长duration=curr_avpacket_dts-pre_avpacket_dts,即当前音频AVPacket包的dts时间戳减去前一个音频AVPacket包的dts时间戳。
在一些实施方式中,上述视频AVPacket数据包中包括视频解码时间戳,上述视频解码时间戳是根据录制初始化时间戳和视频编码器抛出数据时间戳进行时间粒度转化获取的。
示例性的,根据上述视频数据创建视频AVPacket数据包时,WebRtc视频帧经过编码后的视频数据类型为webrtc::EncodedImage,需要将webrtc::EncodedImage转换为AVPacket类型,以便写入媒体文件。录制过程中,首先创建视频AVPacket数据包,然后将webrtc::EncodedImage中视频编码数据uint8_t数组拷贝到视频数据包AVPacket中的data,并设置AVPacket中数据长度size,stream_index为1,视频AVPacket数据包的解码时间戳dts可以等同于渲染时间戳pts,dts计算方式方法包括:
S410、设置录制初始化时间戳为start_time;
S420、视频编码器每抛出一个视频数据包,组装成视频AVPacket数据包包,获取当前时间为now_time;
S430、计算解码时间戳:AVPacket的dts=av_rescale_q((now_time-start_time),time_base_q,video_time_base),其中av_rescale_q表示将当前的时间粒度time_base_q转换为video_time_base,相当于时间单位变换,video_time_base为90kHZ。
S440、计算视频AVPacket数据包的持续时长duration:
在S440中计算音频AVPacket中数据包持续时长duration可以分为两种情况
C:当视频AVPacket数据包为媒体文件中的首个视频AVPacket包时,根据帧率计算当前包的时长,然后进行对应时间粒度转换,从而获得duration;
D:当视频AVPacket数据包不是媒体文件中的首个视频AVPacket包时,duration=curr_avpacket_dts-pre_avpacket_dts,即当前视频AVPacket包的dts时间戳减去前一个视频AVPacket包的dts时间戳;
需要说明的是,首次写入视频AVPacket数据包时,需要解析webrtc::EncodedImage中视频编码数据,根据能否解析出序列参数集SPS、图像参数集PPS等信息,判断该编码后的视频数据是否是关键帧,如果首次写入到媒体文件中的视频帧不是关键帧,播放时开始部分的视频数据没有SPS、PPS等解码信息,解码将会失败。因此,需要保证首次写入到媒体文件中的视频数据包含SPS、PPS等解码信息。
S150、通过上述FFmpeg创建媒体封装器,以封装上述音频输入流和上述视频输入流为音频数据和视频数据;
示例性的,利用FFmpeg通过调用函数avio_write_header创建媒体封装器。
S160、利用FFmpeg将上述音频数据和上述视频数据写入上述媒体文件并编写媒体文件的结尾以获取上述音视频录制文件。
示例性的,利用FFmpeg通过调用函数av_inerleaved_write_frame在媒体文件中写入音频数据和视频数据,并调用函数avio_write_trailer编写上述媒体文件的结尾字段以获取上述音视频录制文件,
在一些实施方式中,步骤S160具体可以包括步骤S1601至步骤S1604:
S1501、利用所述FFmpeg根据所述音频数据创建音频AVPacket数据包;
S1502、根据所述视频数据创建视频AVPacket数据包;
S1503、将所述音频AVPacket数据包和所述视频AVPacket数据包交替写入所述媒体文件;其中,同一组交替写入所述媒体文件的所述音频AVPacket数据包和所述视频AVPacket数据包中包括相同的解码时间戳;
S1504、在交替写入后的所述媒体文件中编写媒体文件的结尾以获取所述音视频录制文件。
示例性的,可以理解的是,步骤S310-步骤S340和步骤S410-步骤S440可以同时进行也可以异步进行,但在将音频AVPacket数据包和视频AVPacket数据包写入媒体文件时需要交替进行,且同一组交替写入媒体文件的音频AVPacket数据包和视频AVPacket数据包中包括相同的解码时间戳,以确保同时间的产生的视频和音频在媒体文件中时间线对齐。在交替写入后的媒体文件中编写媒体文件的结尾从而可以获取所述音视频录制文件。
综上,本申请将WebRtc推流中的编码音频编码数据作为FFmpeg录制过程中的音频输入流,将编码视频文件作为FFmpeg录制过程中的视频输入流,并利用FFmpeg对音频输入流和视频输入流进行录制从而获取音视频录制文件。通过步骤S110在WebRtc推流过程中获取到的音频编码数据和视频编码数据并利用FFmepeg录制从而获取到音视频录制文件。从而主播在进行直播的同时可以完成音视频录制,在主播下播后便可以对音视频录制文件进行编辑处理,从而获取精彩操作视频集锦。通过此方法,主播不仅可以利用WebRtc进行低延迟的直播,并且在利用FFmpeg进行音视频录制的过程中直接利用WebRtc在直播推流中的编码后的音视频文件,省去了在音视频录制过程中的二次编码操作,节省了主播侧客户端设备的性能消耗,避免了资源浪费。进一步地,FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。它提供了录制、转换以及流化音视频的完整解决方案。它包含了非常先进的音频/视频编解码库libavcodec,可以保证高可移植性和编解码质量。
请参阅图3,本申请实施例中音视频录制装置的一个实施例,可以包括:
第一获取单元21,用于获取WebRtc推流过程中的音视频编码数据,其中,上述音视频编码数据包括音频编码数据和视频编码数据;
第一创建单元22,用于利用FFmpeg创建音视频录制文件对应的媒体文件;
第二创建单元23,用于通过上述FFmpeg创建上述媒体文件的音频输入流和视频输入流,其中,上述音频输入流为上述音频编码数据,上述视频输入流为上述视频编码数据;
写入单元24,用于利用上述FFmpeg创建编码器并将编码器参数写入上述媒体文件的音频输入流和视频输入流;
封装单元25,用于通过上述FFmpeg创建媒体封装器,以封装上述音频输入流和上述视频输入流为音频数据和视频数据;
第二获取单元26,用于利用FFmpeg将上述音频数据和上述视频数据写入上述媒体文件并编写媒体文件的结尾以获取上述音视频录制文件。
如图4所示,本申请实施例还提供一种电子设备300,包括存储器310、处理器320及存储在存储器320上并可在处理器上运行的计算机程序311,处理器320执行计算机程序311时实现上述音视频录制的任一方法的步骤。
由于本实施例所介绍的电子设备为实施本申请实施例中一种音视频录制装置所采用的设备,故而基于本申请实施例中所介绍的方法,本领域所属技术人员能够了解本实施例的电子设备的具体实施方式以及其各种变化形式,所以在此对于该电子设备如何实现本申请实施例中的方法不再详细介绍,只要本领域所属技术人员实施本申请实施例中的方法所采用的设备,都属于本申请所欲保护的范围。
在具体实施过程中,该计算机程序311被处理器执行时可以实现图1对应的实施例中任一实施方式。
需要说明的是,在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详细描述的部分,可以参见其它实施例的相关描述。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式计算机或者其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
本申请实施例还提供了一种计算机程序产品,该计算机程序产品包括计算机软件指令,当计算机软件指令在处理设备上运行时,使得处理设备执行如图1对应实施例中的音视频录制的流程。
计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行计算机程序指令时,全部或部分地产生按照本申请实施例的流程或功能。计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一计算机可读存储介质传输,例如,计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(digital subscriber line,DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。计算机可读存储介质可以是计算机能够存储的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,DVD)、或者半导体介质(例如固态硬盘(solid state disk,SSD))等。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
以上实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围。
Claims (10)
1.一种直播过程中的音视频录制方法,用于客户端,其特征在于,包括:
获取WebRtc推流过程中的音视频编码数据,其中,所述音视频编码数据包括音频编码数据和视频编码数据;
利用FFmpeg创建音视频录制文件对应的媒体文件;
通过所述FFmpeg创建所述媒体文件的音频输入流和视频输入流,其中,所述音频输入流为所述音频编码数据,所述视频输入流为所述视频编码数据;
利用所述FFmpeg创建编码器并将编码器参数写入所述媒体文件的音频输入流和视频输入流;
通过所述FFmpeg创建媒体封装器,以封装所述音频输入流和所述视频输入流为音频数据和视频数据;
利用FFmpeg将所述音频数据和所述视频数据写入所述媒体文件并编写媒体文件的结尾以获取所述音视频录制文件。
2.如权利要求1所述的方法,其特征在于,所述利用所述FFmpeg创建编码器并将编码器参数写入所述媒体文件的音频输入流和视频输入流,包括:
利用所述FFmpeg创建AVCodecContext编码器;
将编码器参数写入所述音频输入流和所述视频输入流,其中,所述编码器参数包括所述公共参数、所述音频参数和所述视频参数。
3.如权利要求1所述的方法,其特征在于,所述利用FFmpeg将所述音频数据和所述视频数据写入所述媒体文件并编写媒体文件的结尾以获取所述音视频录制文件,包括:
利用所述FFmpeg根据所述音频数据创建音频AVPacket数据包;
根据所述视频数据创建视频AVPacket数据包;
将所述音频AVPacket数据包和所述视频AVPacket数据包交替写入所述媒体文件;其中,同一组交替写入所述媒体文件的所述音频AVPacket数据包和所述视频AVPacket数据包中包括相同的解码时间戳;
在交替写入后的所述媒体文件中编写媒体文件的结尾以获取所述音视频录制文件。
4.如权利要求3所述的方法,其特征在于,所述音频AVPacket数据包中包括音频解码时间戳,所述音频解码时间戳是根据录制初始化时间戳和音频编码器抛出数据时间戳进行时间粒度转化获取的。
5.如权利要求3所述的方法,其特征在于,所述视频AVPacket数据包中包括视频解码时间戳,所述视频解码时间戳是根据录制初始化时间戳和视频编码器抛出数据时间戳进行时间粒度转化获取的。
6.如权利要求1所述的方法,其特征在于,所述获取WebRtc推流过程中的音视频编码数据之前还包括:
基于预设时间间隔对外部输入音频进行缓存以获取缓存音频;
对所述缓存音频进行重新采样获取待编码音频文件;
所述WebRtc将所述待编码音频文件编码为所述音频编码数据。
7.如权利要求1所述的方法,其特征在于,所述获取WebRtc推流过程中的音视频编码数据之前还包括:
获取待编码视频文件;
所述WebRtc将所述待编码视频文件编码为所述视频编码数据。
8.一种直播过程中的音视频录制装置,其特征在于,包括:
第一获取单元,用于获取WebRtc推流过程中的音视频编码数据,其中,所述音视频编码数据包括音频编码数据和视频编码数据;
第一创建单元,用于利用FFmpeg创建音视频录制文件对应的媒体文件;
第二创建单元,用于通过所述FFmpeg创建所述媒体文件的音频输入流和视频输入流,其中,所述音频输入流为所述音频编码数据,所述视频输入流为所述视频编码数据;
写入单元,用于利用所述FFmpeg创建编码器并将编码器参数写入所述媒体文件的音频输入流和视频输入流;
封装单元,用于通过所述FFmpeg创建媒体封装器,以封装所述音频输入流和所述视频输入流为音频数据和视频数据;
第二获取单元,用于利用FFmpeg将所述音频数据和所述视频数据写入所述媒体文件并编写媒体文件的结尾以获取所述音视频录制文件。
9.一种电子设备,包括:储存器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,其特征在于,所述处理器用于执行存储器中存储的计算机程序时实现如权利要求1-7中任一项所述的音视频录制方法的步骤。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于:所述计算机程序被处理器执行时实现如权利要求1-7中任一项所述的音视频录制方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210545931.4A CN115002558A (zh) | 2022-05-18 | 2022-05-18 | 一种直播过程中的音视频录制方法及相关设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210545931.4A CN115002558A (zh) | 2022-05-18 | 2022-05-18 | 一种直播过程中的音视频录制方法及相关设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115002558A true CN115002558A (zh) | 2022-09-02 |
Family
ID=83027995
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210545931.4A Pending CN115002558A (zh) | 2022-05-18 | 2022-05-18 | 一种直播过程中的音视频录制方法及相关设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115002558A (zh) |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105007465A (zh) * | 2015-07-21 | 2015-10-28 | 江苏物联网研究发展中心 | 基于live555框架和ffmpeg库的密文H264视频直播和点播平台 |
US20180176636A1 (en) * | 2016-12-15 | 2018-06-21 | Guangzhou Ucweb Computer Technology Co., Ltd | Method, device, and electronic terminal for video recording |
CN109547844A (zh) * | 2018-12-19 | 2019-03-29 | 网宿科技股份有限公司 | 基于WebRTC协议的音视频推送方法和推流客户端 |
CN110662084A (zh) * | 2019-10-15 | 2020-01-07 | 北京齐尔布莱特科技有限公司 | 一种mp4文件流直播的方法、移动终端及存储介质 |
CN112073543A (zh) * | 2020-11-16 | 2020-12-11 | 全时云商务服务股份有限公司 | 一种云视频录制方法、系统和可读存储介质 |
CN114300007A (zh) * | 2021-11-30 | 2022-04-08 | 上海绚显科技有限公司 | 基于WebRTC的音视频录制方法及装置 |
-
2022
- 2022-05-18 CN CN202210545931.4A patent/CN115002558A/zh active Pending
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105007465A (zh) * | 2015-07-21 | 2015-10-28 | 江苏物联网研究发展中心 | 基于live555框架和ffmpeg库的密文H264视频直播和点播平台 |
US20180176636A1 (en) * | 2016-12-15 | 2018-06-21 | Guangzhou Ucweb Computer Technology Co., Ltd | Method, device, and electronic terminal for video recording |
CN109547844A (zh) * | 2018-12-19 | 2019-03-29 | 网宿科技股份有限公司 | 基于WebRTC协议的音视频推送方法和推流客户端 |
CN110662084A (zh) * | 2019-10-15 | 2020-01-07 | 北京齐尔布莱特科技有限公司 | 一种mp4文件流直播的方法、移动终端及存储介质 |
CN112073543A (zh) * | 2020-11-16 | 2020-12-11 | 全时云商务服务股份有限公司 | 一种云视频录制方法、系统和可读存储介质 |
CN114300007A (zh) * | 2021-11-30 | 2022-04-08 | 上海绚显科技有限公司 | 基于WebRTC的音视频录制方法及装置 |
Non-Patent Citations (1)
Title |
---|
周恕义等: "《基于FFmpeg的音视频流封装技术的实现》", 现代计算机, vol. 2014, no. 19, pages 49 - 52 * |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101076121B (zh) | 流生成装置、成像装置、数据处理装置和流生成方法 | |
US10911817B2 (en) | Information processing system | |
TW200822736A (en) | Method and apparatus for receiving, storing, and presenting multimedia programming without indexing prior to storage | |
US8676038B2 (en) | Recording/reproducing apparatus, recording apparatus, reproducing apparatus, recording method, reproducing method and computer program | |
US20100098161A1 (en) | Video encoding apparatus and video encoding method | |
JP4440863B2 (ja) | 符号化復号化装置、符号化復号化方法、符号化復号化集積回路、および符号化復号化プログラム | |
US9275081B2 (en) | Data management apparatus and data management method | |
CN109040818B (zh) | 直播时的音视频同步方法、存储介质、电子设备及系统 | |
JP4548226B2 (ja) | データ処理方法、その装置およびプログラム | |
US20240080487A1 (en) | Method, apparatus for processing media data, computer device and storage medium | |
CN101677385A (zh) | 运动图像再现设备和运动图像再现方法 | |
KR20140007893A (ko) | 비디오 스트림을 최적화하기 위한 방법 | |
CN109600651B (zh) | 文档类直播交互数据和音视频数据同步方法和系统 | |
JP2012170054A (ja) | 映像記録装置、映像再生装置および映像復旧装置 | |
JP3850015B2 (ja) | ディジタルビデオ信号記録再生装置および伝送装置 | |
CN115002558A (zh) | 一种直播过程中的音视频录制方法及相关设备 | |
JP2894958B2 (ja) | 画像復号化方式および装置 | |
JP2002077803A (ja) | 映像情報記録装置及び撮像装置 | |
JP2010011287A (ja) | 映像伝送方法および端末装置 | |
JP2008283276A (ja) | 撮像装置 | |
CN101146230A (zh) | 动图像编码和/或译码设备、方法以及程序 | |
JP2003009085A (ja) | デジタル信号記録装置および方法、デジタル信号再生装置および方法 | |
JP5857591B2 (ja) | 映像配信装置 | |
CN115379236B (zh) | 视频处理方法、装置、介质及设备 | |
JP5100852B2 (ja) | デジタル信号記録再生装置および方法、デジタル信号再生装置および方法 |
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 |