CN106792111A - 一种使用ffmpeg接口录制直播网站视频的方法及装置 - Google Patents

一种使用ffmpeg接口录制直播网站视频的方法及装置 Download PDF

Info

Publication number
CN106792111A
CN106792111A CN201611117145.5A CN201611117145A CN106792111A CN 106792111 A CN106792111 A CN 106792111A CN 201611117145 A CN201611117145 A CN 201611117145A CN 106792111 A CN106792111 A CN 106792111A
Authority
CN
China
Prior art keywords
frame
video
unit
stream information
stream
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
Application number
CN201611117145.5A
Other languages
English (en)
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.)
Wuhan Douyu Network Technology Co Ltd
Original Assignee
Wuhan Douyu Network 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 Wuhan Douyu Network Technology Co Ltd filed Critical Wuhan Douyu Network Technology Co Ltd
Priority to CN201611117145.5A priority Critical patent/CN106792111A/zh
Publication of CN106792111A publication Critical patent/CN106792111A/zh
Pending legal-status Critical Current

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/433Content storage operation, e.g. storage operation in response to a pause request, caching operations
    • H04N21/4334Recording operations
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N21/00Selective content distribution, e.g. interactive television or video on demand [VOD]
    • H04N21/80Generation or processing of content or additional data by content creator independently of the distribution process; Content per se
    • H04N21/85Assembly of content; Generation of multimedia applications
    • H04N21/854Content authoring
    • H04N21/85406Content authoring involving a specific file format, e.g. MP4 format
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N21/00Selective content distribution, e.g. interactive television or video on demand [VOD]
    • H04N21/80Generation or processing of content or additional data by content creator independently of the distribution process; Content per se
    • H04N21/85Assembly of content; Generation of multimedia applications
    • H04N21/854Content authoring
    • H04N21/8547Content authoring involving timestamps for synchronizing content

Landscapes

  • Engineering & Computer Science (AREA)
  • Multimedia (AREA)
  • Signal Processing (AREA)
  • Computer Security & Cryptography (AREA)
  • Television Signal Processing For Recording (AREA)
  • Compression Or Coding Systems Of Tv Signals (AREA)

Abstract

本发明公开了一种使用FFMPEG接口录制直播网站视频的方法及装置,所述方法包括:获得所述直播间的流地址;其中,所述流地址包括视频流地址;根据所述视频流地址获得所述直播间直播过程中的流信息,其中所述流信息中包括N个帧;根据所述流信息创建本地FLV文件;根据所述N个帧,获得第一帧;判断所述第一帧是否为视频关键帧;当所述第一视频帧为视频关键帧时,将所述第一视频帧确定为录制开始点;将第一视频帧之后的M个视频帧进行数据处理,并写入所述本地FLV文件中。本发明解决了现有技术中的直播网站进行视频录制时,存在的视频开始的部分容易花屏的技术问题。

Description

一种使用FFMPEG接口录制直播网站视频的方法及装置
技术领域
本发明涉及通讯技术领域,尤其涉及一种使用FFMPEG接口录制直播网站视频的方法及装置。
背景技术
目前的直播网站都是使用的rtmp或http协议传递h264编码视频流,FFMPEG提供的exe是可以直接下载这些直播网站的音视频文件的。
然而,发明人员通过研究发现,这种FFMPEG提供的exe是直接下载这些直播网站的音视频文件至少存在如下问题:在视频录制的过程中,视频开始的部分容易出现花屏。
可见,现有技术中的直播网站进行视频录制时,存在视频开始的部分容易出现花屏的技术问题。
发明内容
本发明实施例提供了一种使用FFMPEG接口录制直播网站视频的方法及装置,用以解决现有技术中的直播网站进行视频录制时,存在的视频开始的部分容易出现花屏的技术问题。
第一方面,本发明提供了一种使用FFMPEG接口录制直播网站视频的方法,所述方法包括:
获得所述直播间的流地址;其中,所述流地址包括视频流地址;
根据所述流地址获得所述直播间直播过程中的流信息,其中所述流信息中包括N个帧,N为正整数;
根据所述流信息创建本地FLV文件;
根据所述N个帧,获得第一帧;
判断所述第一帧是否为视频关键帧;
当所述第一视频帧为视频关键帧时,将所述第一视频帧确定为录制开始点;
将第一视频帧之后的M个视频帧进行数据处理,并写入所述本地FLV文件中,其中M小于N,且M为正整数。
可选的,所述根据所述流信息创建本地FLV文件,还包括:创建FLV文件的文件头;所述将第一视频帧之后的M个视频帧进行数据处理,并写入所述本地FLV文件中,还包括:将所述第一视频帧进行数据处理后,从所述文件头处开始写入所述经处理的所述第一视频帧。
可选的,所述根据所述流地址获得所述直播间直播过程中的流信息,还包括:通过av_read_frame函数获得所述流信息,且所述流信息为AVPacket结构;其中,所述方法还包括:判断所述av_read_frame的返回值是否等于AVERROR;当所述av_read_frame的返回值等于AVERROR时,才结束录制。
可选的,所述判断所述第一帧是否为视频关键帧,还包括:判断所述第一帧是否为IDR帧;如是,则判断所述第一帧为视频关键帧。
可选的,所述将所述第一视频帧确定为录制开始点时,所述方法还包括:获得所述第一视频帧的第一时间戳;所述将第一视频帧之后的M个视频帧进行数据处理,还包括:获得所述M个视频帧中的第二视频帧的第二时间戳;根据所述第一时间戳和所述第二时间戳获得第三时间戳;将所述第二视频帧的第二时间戳更改为所述第三时间戳后,写入所述本地FLV文件中。
可选的,在所述判断所述第一帧是否为视频关键帧之前,还包括:获得所述第一帧的数据类型;当所述第一帧是视频帧时,则判断所述第一帧是否为视频关键帧;当所述第一帧是音频帧时,则忽略所述第一帧。
第二方面,本发明提供了一种使用FFMPEG接口录制直播网站视频的装置,所述装置包括:
第一获得单元,所述第一获得单元用于获得所述直播间的流地址;其中,所述流地址包括视频流地址;
第二获得单元,所述第二获得单元用于根据所述视频流地址获得所述直播间直播过程中的流信息,其中所述流信息中包括N个帧,N为正整数;
第一创建单元,所述第一创建单元用于根据所述流信息创建本地FLV文件;
第三获得单元,所述第三获得单元用于根据所述N个帧,获得第一帧;
第一判断单元,所述第一判断单元用于判断所述第一帧是否为视频关键帧;
第一确定单元,所述第一确定单元用于当所述第一视频帧为视频关键帧时,将所述第一视频帧确定为录制开始点;
第一写入单元,所述第一写入单元用于将第一视频帧之后的M个视频帧进行数据处理,并写入所述本地FLV文件中,其中M小于N,且M为正整数。
可选的,所述装置还包括:第二创建单元,所述第二创建单元用于创建FLV文件的文件头;第二写入单元,所述第二写入单元用于所述将第一视频帧之后的M个视频帧进行数据处理,并写入所述本地FLV文件中,还包括:第三写入单元,所述第三写入单元用于将所述第一视频帧进行数据处理后,从所述文件头处开始写入所述经处理的所述第一视频帧。
可选的,所述装置还包括:第四获得单元,所述第四获得单元用于通过av_read_frame函数获得所述流信息,且所述流信息为AVPacket结构;第二判断单元,所述第二判断单元用于判断所述av_read_frame的返回值是否等于AVERROR;第一结束单元,所述第一结束单元用于当所述av_read_frame的返回值等于AVERROR时,才结束录制。
可选的,所述装置还包括:第三判断单元,所述第三判断单元用于判断所述第一帧是否为IDR帧;第四判断单元,所述第四判断单元用于如是,则判断所述第一帧为视频关键帧。
可选的,所述装置还包括::第五获得单元,所述第五获得单元用于获得所述第一视频帧的第一时间戳;第六获得单元,所述第六获得单元用于获得所述M个视频帧中的第二视频帧的第二时间戳;第七获得单元,所述第七获得单元用于根据所述第一时间戳和所述第二时间戳获得第三时间戳;第四写入单元,所述第四写入单元用于将所述第二视频帧的第二时间戳更改为所述第三时间戳后,写入所述本地FLV文件中。
本发明实施例中的上述一个或多个技术方案,至少具有如下一种或多种技术效果:
在本发明实施例提供的方法及装置,在对直播网站的视频进行录制时,通过依据直播间直播过程中的流信息中N个帧,获得第一帧,并判断所述第一帧是否为视频关键帧,如果所述第一视频帧判断为视频关键帧时,则将所述第一视频帧确定为录制开始点,以此使得所录制的视频在播放的时候不会出现花屏的现象。可见,本发明实施例解决了现有技术中的直播网站进行视频录制时,存在的视频开始的部分容易出现花屏的技术问题。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例的使用FFMPEG接口录制直播网站视频的方法流程图;以及
图2为本发明实施例中将第一视频帧之后的M个视频帧进行数据处理的方法示意图;以及
图3为本发明实施例中使用FFMPEG接口录制直播网站视频的装置示意图。
具体实施方式
本发明实施例提供了一种使用FFMPEG接口录制直播网站视频的方法及装置,解决了现有技术中的直播网站进行视频录制时,存在的视频开始的部分极易花屏的技术问题。
本发明实施例中的技术方案,总体思路如下:
在对直播网站进行视频录制时,首先获得所述直播间的流地址;其中,所述流地址包括视频流地址;根据所述流地址获得所述直播间直播过程中的流信息,其中所述流信息中包括N个帧,N为正整数;根据所述流信息创建本地FLV文件;根据所述N个帧,获得第一帧;判断所述第一帧是否为视频关键帧;当所述第一视频帧为视频关键帧时,将所述第一视频帧确定为录制开始点;将第一视频帧之后的M个视频帧进行数据处理,并写入所述本地FLV文件中,其中M小于N,且M为正整数。
上述方法通过依据直播间直播过程中的流信息中N个帧,获得第一帧,并判断所述第一帧是否为视频关键帧,如果所述第一视频帧判断为视频关键帧时,则将所述第一视频帧确定为录制开始点,以此使得所录制的视频在播放的时候不会出现花屏的现象。
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
实施例一
本实施例提供的一种使用FFMPEG接口录制直播网站视频的方法,请参阅图1,所述方法包括:
步骤S110,获得所述直播间的流地址;其中,所述流地址包括视频流地址;
步骤S120,根据所述流地址获得所述直播间直播过程中的流信息,其中所述流信息中包括N个帧,N为正整数;
步骤S130,根据所述流信息创建本地FLV文件;
步骤S140,根据所述N个帧,获得第一帧;
步骤S150,判断所述第一帧是否为视频关键帧;
步骤S160,当所述第一视频帧为视频关键帧时,将所述第一视频帧确定为录制开始点;
步骤S170,将第一视频帧之后的M个视频帧进行数据处理,并写入所述本地FLV文件中,其中M小于N,且M为正整数。
具体来讲,现有技术中直播网站都是使用的rtmp或http协议传递h264编码视频流,FFMPEG提供的exe是可以直接下载这些直播网站的音视频文件的。但是,经发明人研究发现,这种方式至少存在视频开始的部分容易出现花屏。基于此,本发明实施例提供的方法用于解决在视频开始的部分容易出现花屏的技术问题。
在本申请实施例中,为了对本申请所公开的技术方案进行详细的介绍,以达到清楚、明白的目的,特针对所涉及的名词解释如下:
FFMPEG,是一个开源免费跨平台的视频和音频流方案,属于自由软件,采用LGPL或GPL许可证(依据用户选择的组件)。FFMPEG提供了录制、转换以及流化音视频的完整解决方案。FFMPEG包含了非常先进的音频/视频编解码库libavcodec,为了保证高可移植性和编解码质量,FFMPEG里面里很多代码都是从头开发的。在本发明实施例中即是基于FFMPEG进行视频流的获取,以及音视频文件的写入。
H.264,是国际标准化组织(ISO)和国际电信联盟(ITU)共同提出的继MPEG4之后的新一代数字视频压缩格式。H.264是ITU-T以H.26x系列为名称命名的视频编解码技术标准之一。H.264是ITU-T的VCEG(视频编码专家组)和ISO/IEC的MPEG(活动图像编码专家组)的联合视频组(JVT:joint video team)开发的一个数字视频编码标准。H.264最大的优势是具有很高的数据压缩比率,H.264在具有高压缩比的同时还拥有高质量流畅的图像,正因为如此,经过H.264压缩的视频数据,在网络传输过程中所需要的带宽更少,也更加经济。在本发明实施例中即是基于到对h264的格式解析。
FLV,是Flash Video的首字母缩写,Flash Video流媒体格式是随着Flash MX的推出而发展而来的一种新兴的视频格式。FLV是被众多新一代视频分享网站所采用,是目前增长最快、最为广泛的视频传播格式。
RTMP,是Real Time Messaging Protocol(实时消息传输协议)的首字母缩写。该协议基于TCP,是一个协议族,包括RTMP基本协议及RTMPT/RTMPS/RTMPE等多种变种。RTMP是一种设计用来进行实时数据通信的网络协议,主要用来在Flash/AIR平台和支持RTMP协议的流媒体/交互服务器之间进行音视频和数据通信。RTMP协议(Real Time MessagingProtocol)是被Flash用于对象,视频,音频的传输。这个协议建立在TCP协议或者轮询HTTP协议之上。RTMP协议可以理解为是一个用来装数据包的容器,这些数据既可以是AMF格式的数据,也可以是FLV中的视/音频数据。
下面,结合图1对本申请提供的使用FFMPEG接口录制直播网站视频的方法进行详细介绍:
首先,执行步骤S110,获得所述直播间的流地址;其中,所述流地址包括视频流地址;
具体而言,在对直播网站上正在开播的直播间视频进行录制时,首先需要获取对应直播间的流地址,而对于流地址的获取方式可以是多种多样的,本发明实施例并不局限,比如可以是通过向网站服务器提供房间号查询获取,也可以是通过输入直播间的直播名称查询获取。
接下来,执行步骤S120,根据所述流地址获得所述直播间直播过程中的流信息,其中所述流信息中包括N个帧,N为正整数;
具体而言,对于直播间直播过程中的流信息的获得,可以是使用av_read_frame函数,从avformat_open_input函数打开的AVFormatContext结构上下文中获取的音视频流,且该音视频数据为AVPacket结构。
在这里,avformat_open_input函数是用来打开一个输入文件或者音视频流,返回AVFormatContext结构的上下文,在本申请中是用来打开直播网站的实时音视频流。AVFormatContext结构是用来表示一个输入或者输出文件的上下文,AVFormatContext是FFMPEG格式转换过程中实现输入和输出功能、保存相关数据的主要结构。AVPacket是存储压缩编码数据相关信息的结构体,AVPacket一般是一帧完整的音视频编解码数据,对于H.264来说,1个AVPacket的data通常对应一个NAL。av_read_frame函数是用来从输入文件即AVFormatContext结构的上下文中获取音视频流数据,获取的音视频数据,一般是编码过的,因为h264高压缩比少带宽以及广泛性,目前直播网站一般都是使用的h264的视频编码,从数据流读出的数据是保存在AVPacket结构里的。
需要说明的是,在根据所述流地址获得所述直播间直播过程中的流信息的过程中,为了避免视频文件被轻易打断,造成断流比较频繁以至于常常遗失掉精彩的瞬间画面的技术问题,优选的,本发明实施例还包括:判断所述av_read_frame的返回值是否等于AVERROR;当所述av_read_frame的返回值等于AVERROR时,才结束录制。也即,对av_read_frame的返回值只有在等于AVERROR(EAGAIN)的时候,才结束录制。这种容错处理不会导致本发明实施例所提供的方法在视频录制的过程中被频繁打断,而错过一些重要的时刻,实现所录制的视频具有连续顺畅的特点。
当然,在执行步骤S120之前,或者之后,或者同时,可以执行步骤S130,根据所述流信息创建本地FLV文件;
其中,在该步骤S130中具体可以通过avformat_open_input函数根据步骤S110获得的直播间流地址打开直播间流,并通过AVFormatContext结构的对象保存直播间的流信息,利用输入文件的流信息使用avformat_alloc_output_context2函数创建本地flv文件,并使用avformat_write_header函数写入flv文件的文件头。
在这里,avformat_alloc_output_context2函数是用来创建一个输出文件,得到该输出文件的AVFormatContext结构的上下文,在本发明实施例中输出文件为本地flv录制文件。avformat_write_header函数是用来往输出文件写入该音视频流的头信息,包含音视频编解码信息,以及文件大小等。
然后,执行步骤S140,根据所述N个帧,获得第一帧;
以及,执行步骤S150,判断所述第一帧是否为视频关键帧;
具体而言,本申请实施例是针对直播网站的视频信息进行录制,所要解决的技术问题也是解决在视频录制过程中,视频开始的部分极易花屏的技术问题。因此,在流信息中所包括的N个帧中,首先要确认基于所述N个帧,所获得第一帧是否是视频帧,如果是视频帧,则继续下一步骤。如果不是(如是音频帧),则直接忽略(这里的忽略也即pass掉的意思),并重新继续获取上述的流信息。
这里,对于判断基于所述N个帧,所获得第一帧是否是视频帧,可以是通过如下方法判断。即,在解析流信息的时候,先获取视频音频的stream的id,然后在读帧的时候,使用帧的stream id进行比较进行判断。
紧接着,在判断完第一帧是视频帧之后,在继续执行步骤S150,也即判断所述第一帧是否为视频关键帧。可以包括如下步骤:判断所述第一帧是否为IDR帧;如是,则判断所述第一帧为视频关键帧。
具体而言,可以基于当前的流信息的视频压缩格式是h264,从h264视频帧获取nalu类型值,nalu&0x1f为5则表示该帧即为IDR帧,也即视频关键帧。而当判断所述第一帧不是视频关键帧时,则放弃该第一视频帧,并重新继续获取上述的流信息。
如果判断所述第一帧是视频关键帧时,则继续执行步骤S160,当所述第一视频帧为视频关键帧时,将所述第一视频帧确定为录制开始点;也正因如此,使得通过本发明实施例在直播网上中进行视频录制时,能够确定录制文件的第一帧视频帧是关键帧,这就使得本地录制的视频文件在开始播放的时候不会出现花屏的现象。
再然后,执行步骤S170,将第一视频帧之后的M个视频帧进行数据处理,并写入所述本地FLV文件中,其中M小于N,且M为正整数。
需要强调的是,在将所述第一视频帧确定为录制开始点时,还包括获得所述第一视频帧的第一时间戳;而所述步骤S170,请参阅图2,也还包括如下子步骤:步骤S170a,获得所述M个视频帧中的第二视频帧的第二时间戳;步骤S170b,根据所述第一时间戳和所述第二时间戳获得第三时间戳;步骤S170c,将所述第二视频帧的第二时间戳更改为所述第三时间戳后,写入所述本地FLV文件中。
具体而言,在将所述第一视频帧确定为录制开始点时,为了能让录制文件的开始时间从0开始,此时可获得该第一视频帧的第一时间戳并保存,如记录该第一时间戳为begin_record_pts,该第一时间戳作为录制文件的开始时刻。进一步地,将M个视频帧中的第二视频帧AVPacket结构对象的第二时间戳减去第一时间戳begin_record_pts值,并将所述第二视频帧的第二时间戳更改为所述第三时间戳。然后通过av_interleaved_write_frame函数,把处理过的第二视频帧写入所述本地FLV文件中。
值得注意的是,由于在步骤S170中由于通过av_interleaved_write_frame函数,把处理过的第二视频帧直接写入预先创建的AVFormatContext结构上下文,这就使得在本发明实施例中不需要对视频进行重新编解码,继而对cpu、内存消耗极低,具有性能高的特点。
最后,通过av_write_trailer函数,写入文件结尾例如文件长度等信息,关闭文件,销毁相关资源。
在这里,av_interleaved_write_frame函数是用来往输出文件写音视频流数据,且av_interleaved_write_frame函数写入的数据的结构为AVPacket。av_write_trailer函数是用来往输出文件写音视频流的结尾信息,文件的大小等信息一般是在结尾的时候才能决定的。
基于同一发明构思,本发明实施例还提供了实施例一中方法对应的装置,见实施例二。
实施例二
本实施例提供了一种使用FFMPEG接口录制直播网站视频的装置,请参考图3,所述装置备包括:
第一获得单元110,被配置为获得所述直播间的流地址;
第二获得单元120,被配置为根据所述流地址获得所述直播间直播过程中的流信息,其中所述流信息中包括N个帧,N为正整数;
第一创建单元130,被配置为根据所述流信息创建本地FLV文件;
第三获得单元140,被配置为根据所述N个帧,获得第一帧;
第一判断单元150,被配置为判断所述第一帧是否为视频关键帧;
第一确定单元160,被配置为当所述第一视频帧为视频关键帧时,将所述第一视频帧确定为录制开始点;
第一写入单元170,被配置为将第一视频帧之后的M个视频帧进行数据处理,并写入所述本地FLV文件中,其中M小于N,且M为正整数。
在本申请实施例中,所述装置还包括:
第二创建单元,所述第二创建单元用于创建FLV文件的文件头;
第二写入单元,所述第二写入单元用于所述将第一视频帧之后的M个视频帧进行数据处理,并写入所述本地FLV文件中,还包括:
第三写入单元,所述第三写入单元用于将所述第一视频帧进行数据处理后,从所述文件头处开始写入所述经处理的所述第一视频帧。
在本申请实施例中,所述装置还包括:
第四获得单元,所述第四获得单元用于通过av_read_frame函数获得所述流信息,且所述流信息为AVPacket结构;
第二判断单元,所述第二判断单元用于判断所述av_read_frame的返回值是否等于AVERROR;
第一结束单元,所述第一结束单元用于当所述av_read_frame的返回值等于AVERROR时,才结束录制。
在本申请实施例中,所述装置还包括:
第三判断单元,所述第三判断单元用于判断所述第一帧是否为IDR帧;
第四判断单元,所述第四判断单元用于如是,则判断所述第一帧为视频关键帧。
在本申请实施例中,所述装置还包括:
第五获得单元,所述第五获得单元用于获得所述第一视频帧的第一时间戳;
第六获得单元,所述第六获得单元用于获得所述M个视频帧中的第二视频帧的第二时间戳;
第七获得单元,所述第七获得单元用于根据所述第一时间戳和所述第二时间戳获得第三时间戳;
第四写入单元,所述第四写入单元用于将所述第二视频帧的第二时间戳更改为所述第三时间戳后,写入所述本地FLV文件中。
由于本发明实施例二所介绍的使用FFMPEG接口录制直播网站视频的装置,为实施本发明实施例一的使用FFMPEG接口录制直播网站视频的方法所采用的装置,故而基于本发明实施例一所介绍的方法,本领域所属人员能够了解该装置的具体结构及变形,故而在此不再赘述。凡是本发明实施例一的方法所采用的装置都属于本发明所欲保护的范围。
本申请实施例中提供的技术方案,至少具有如下技术效果或优点:
一方面,通过依据直播间直播过程中的流信息中N个帧,获得第一帧,并判断所述第一帧是否为视频关键帧,如果所述第一视频帧判断为视频关键帧时,则将所述第一视频帧确定为录制开始点,以此使得所录制的视频在播放的时候不会出现花屏的现象。
又一方面,在根据所述流地址获得所述直播间直播过程中的流信息的过程中,为了避免视频文件被轻易打断,造成断流比较频繁以至于常常遗失掉精彩的瞬间画面的技术问题,本发明实施例还包括:判断所述av_read_frame的返回值是否等于AVERROR;当所述av_read_frame的返回值等于AVERROR时,才结束录制。也即,对av_read_frame的返回值只有在等于AVERROR(EAGAIN)的时候,才结束录制。这种容错处理不会导致本发明实施例所提供的方法在视频录制的过程中被频繁打断,而错过一些重要的时刻,实现所录制的视频具有连续顺畅的特点。
再一方面,由于通过av_interleaved_write_frame函数,把处理过的第二视频帧直接写入预先创建的AVFormatContext结构上下文,这就使得在本发明实施例中不需要对视频进行重新编解码,继而对cpu、内存消耗极低,具有性能高的特点。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。
显然,本领域的技术人员可以对本发明实施例进行各种改动和变型而不脱离本发明实施例的精神和范围。这样,倘若本发明实施例的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。

Claims (10)

1.一种使用FFMPEG接口录制直播网站视频的方法,其特征在于,所述方法包括:
获得所述直播间的流地址,其中,所述流地址包括视频流地址;
根据所述视频流地址获得所述直播间直播过程中的流信息,其中所述流信息中包括N个帧,N为正整数;
根据所述流信息创建本地FLV文件;
根据所述N个帧,获得第一帧;
判断所述第一帧是否为视频关键帧;
当所述第一视频帧为视频关键帧时,将所述第一视频帧确定为录制开始点;
将第一视频帧之后的M个视频帧进行数据处理,并写入所述本地FLV文件中,其中M小于N,且M为正整数。
2.如权利要求1所述的方法,其特征在于,所述根据所述流信息创建本地FLV文件,还包括:
创建FLV文件的文件头;
所述将第一视频帧之后的M个视频帧进行数据处理,并写入所述本地FLV文件中,还包括:
将所述第一视频帧进行数据处理后,从所述文件头处开始写入所述经处理的所述第一视频帧。
3.如权利要求1所述的方法,其特征在于,所述根据所述流地址获得所述直播间直播过程中的流信息,还包括:
通过av_read_frame函数获得所述流信息,且所述流信息为AVPacket结构;
其中,所述方法还包括:
判断所述av_read_frame的返回值是否等于AVERROR;
当所述av_read_frame的返回值等于AVERROR时,才结束录制。
4.如权利要求1所述的方法,其特征在于,所述判断所述第一帧是否为视频关键帧,还包括:
判断所述第一帧是否为IDR帧;
如是,则判断所述第一帧为视频关键帧。
5.如权利要求1所述的方法,其特征在于,所述将所述第一视频帧确定为录制开始点时,所述方法还包括:
获得所述第一视频帧的第一时间戳;
所述将第一视频帧之后的M个视频帧进行数据处理,还包括:
获得所述M个视频帧中的第二视频帧的第二时间戳;
根据所述第一时间戳和所述第二时间戳获得第三时间戳;
将所述第二视频帧的第二时间戳更改为所述第三时间戳后,写入所述本地FLV文件中。
6.一种使用FFMPEG接口录制直播网站视频的装置,其特征在于,所述装置包括:
第一获得单元,所述第一获得单元用于获得所述直播间的流地址;其中,所述流地址包括视频流地址;
第二获得单元,所述第二获得单元用于根据所述视频流地址获得所述直播间直播过程中的流信息,其中所述流信息中包括N个帧,N为正整数;
第一创建单元,所述第一创建单元用于根据所述流信息创建本地FLV文件;
第三获得单元,所述第三获得单元用于根据所述N个帧,获得第一帧;
第一判断单元,所述第一判断单元用于判断所述第一帧是否为视频关键帧;
第一确定单元,所述第一确定单元用于当所述第一视频帧为视频关键帧时,将所述第一视频帧确定为录制开始点;
第一写入单元,所述第一写入单元用于将第一视频帧之后的M个视频帧进行数据处理,并写入所述本地FLV文件中,其中M小于N,且M为正整数。
7.如权利要求6所述的装置,其特征在于,所述装置还包括:
第二创建单元,所述第二创建单元用于创建FLV文件的文件头;
第二写入单元,所述第二写入单元用于所述将第一视频帧之后的M个视频帧进行数据处理,并写入所述本地FLV文件中,还包括:
第三写入单元,所述第三写入单元用于将所述第一视频帧进行数据处理后,从所述文件头处开始写入所述经处理的所述第一视频帧。
8.如权利要求6所述的装置,其特征在于,所述装置还包括:
第四获得单元,所述第四获得单元用于通过av_read_frame函数获得所述流信息,且所述流信息为AVPacket结构;
第二判断单元,所述第二判断单元用于判断所述av_read_frame的返回值是否等于AVERROR;
第一结束单元,所述第一结束单元用于当所述av_read_frame的返回值等于AVERROR时,才结束录制。
9.如权利要求6所述的装置,其特征在于,所述装置还包括:
第三判断单元,所述第三判断单元用于判断所述第一帧是否为IDR帧;
第四判断单元,所述第四判断单元用于如是,则判断所述第一帧为视频关键帧。
10.如权利要求6所述的装置,其特征在于,所述装置还包括:
第五获得单元,所述第五获得单元用于获得所述第一视频帧的第一时间戳;
第六获得单元,所述第六获得单元用于获得所述M个视频帧中的第二视频帧的第二时间戳;
第七获得单元,所述第七获得单元用于根据所述第一时间戳和所述第二时间戳获得第三时间戳;
第四写入单元,所述第四写入单元用于将所述第二视频帧的第二时间戳更改为所述第三时间戳后,写入所述本地FLV文件中。
CN201611117145.5A 2016-12-07 2016-12-07 一种使用ffmpeg接口录制直播网站视频的方法及装置 Pending CN106792111A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201611117145.5A CN106792111A (zh) 2016-12-07 2016-12-07 一种使用ffmpeg接口录制直播网站视频的方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201611117145.5A CN106792111A (zh) 2016-12-07 2016-12-07 一种使用ffmpeg接口录制直播网站视频的方法及装置

Publications (1)

Publication Number Publication Date
CN106792111A true CN106792111A (zh) 2017-05-31

Family

ID=58877068

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201611117145.5A Pending CN106792111A (zh) 2016-12-07 2016-12-07 一种使用ffmpeg接口录制直播网站视频的方法及装置

Country Status (1)

Country Link
CN (1) CN106792111A (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110971939A (zh) * 2018-09-30 2020-04-07 武汉斗鱼网络科技有限公司 一种违规图片的识别方法及相关装置
CN113132746A (zh) * 2021-04-16 2021-07-16 北京北笛科技有限公司 一种对网络直播业务中音视频数据的自动取证方法及装置

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20100146145A1 (en) * 2008-12-04 2010-06-10 Swarmcast, Inc. Adaptive playback rate with look-ahead
CN102547444A (zh) * 2012-01-16 2012-07-04 广西骋天信息科技有限公司 优化播放实时视频监控录像的方法
CN102710966A (zh) * 2012-06-13 2012-10-03 百视通网络电视技术发展有限责任公司 基于http协议的视频直播方法及系统
CN105072456A (zh) * 2015-07-14 2015-11-18 中国科学院信息工程研究所 基于Hadoop的密文视频流处理方法、装置、服务器及系统

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20100146145A1 (en) * 2008-12-04 2010-06-10 Swarmcast, Inc. Adaptive playback rate with look-ahead
CN102547444A (zh) * 2012-01-16 2012-07-04 广西骋天信息科技有限公司 优化播放实时视频监控录像的方法
CN102710966A (zh) * 2012-06-13 2012-10-03 百视通网络电视技术发展有限责任公司 基于http协议的视频直播方法及系统
CN105072456A (zh) * 2015-07-14 2015-11-18 中国科学院信息工程研究所 基于Hadoop的密文视频流处理方法、装置、服务器及系统

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110971939A (zh) * 2018-09-30 2020-04-07 武汉斗鱼网络科技有限公司 一种违规图片的识别方法及相关装置
CN110971939B (zh) * 2018-09-30 2022-02-08 武汉斗鱼网络科技有限公司 一种违规图片的识别方法及相关装置
CN113132746A (zh) * 2021-04-16 2021-07-16 北京北笛科技有限公司 一种对网络直播业务中音视频数据的自动取证方法及装置

Similar Documents

Publication Publication Date Title
CN108769616A (zh) 一种基于rtsp协议的实时视频无插件预览方法及系统
US9478256B1 (en) Video editing processor for video cloud server
US7558760B2 (en) Real-time key frame generation
CN101198045B (zh) 一种流媒体数字水印系统
Quinlan et al. Datasets for AVC (H. 264) and HEVC (H. 265) evaluation of dynamic adaptive streaming over HTTP (DASH)
CN101247511B (zh) Iptv内容相关信息展现方法及系统
CN110636346B (zh) 一种码率自适应切换方法、装置、电子设备及存储介质
CN107645491A (zh) 媒体流传输设备和媒体服务设备
CN108040286A (zh) 视频预览方法、装置、电子设备和计算机可读存储介质
CN103024603B (zh) 一种用于解决播放网络视频时短时停顿的装置及方法
GB2462732A (en) Simultaneous recording of multiple broadcast programs on a digital video recorder
CN101505365A (zh) 一种基于网络电视机顶盒的实时视频监控系统的实现方法
CN107690073A (zh) 一种视频直播方法及视频直播服务器
CN108337545A (zh) 用于同步再现视频和音频的媒体重放设备和媒体服务设备
CN106254867A (zh) 基于画面组对视频文件进行转码的方法及系统
KR100739172B1 (ko) 의사 스트리밍 기술을 이용한 이동 단말기의 동영상 전송방법
CN107634930A (zh) 一种媒体数据的获取方法和装置
WO2018028547A1 (zh) 频道切换的方法及装置
JP2013192062A (ja) 映像配信システム、映像配信装置、映像配信方法およびプログラム
CN108924592A (zh) 一种视频处理的方法及设备
CN104683726A (zh) 一种网络游戏录像录制及播放方法
CN110214448A (zh) 信息处理装置和方法
CN106792111A (zh) 一种使用ffmpeg接口录制直播网站视频的方法及装置
WO2017092433A1 (zh) 视频实时播放方法及装置
KR20090017027A (ko) 미디어 객체 기반 메타데이터의 생성 방법, 재생 방법 및그 장치

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
RJ01 Rejection of invention patent application after publication
RJ01 Rejection of invention patent application after publication

Application publication date: 20170531