精华内容
下载资源
问答
  • ffmpeg usb摄像头采集 +6818硬件编码 +ffmpeg RTMP H264推流 需要提前移植QT 和FFMPEG ffmpeg移植不需要添加H264编码
  • VS2013,代码齐全,rtsp采集网络摄像机以后向流媒体服务器推流,vlc拉流。 VS2013,代码齐全,rtsp采集网络摄像机以后向流媒体服务器推流,vlc拉流。
  • 关于FFMPEG采集摄像头推流方法说明

    千次阅读 2019-03-17 19:21:38
    命令 ffmpeg -list_devices true -f dshow -i dummy #获取摄像头名称 ffmpeg -f dshow -i video="获取的摄像头的名称" -vcodec libx264 -acodec copy -...推流地址> #获取视频流并推流 样例 ...

    命令

    ffmpeg -list_devices true -f dshow -i dummy #获取摄像头名称
    ffmpeg -f dshow -i video="获取的摄像头的名称" -vcodec libx264 -acodec copy -preset:v ultrafast -tune:v zerolatency -f flv <推流地址> #获取视频流并推流

    样例

    ffmpeg -f dshow -i video="EasyCamera" -vcodec libx264 -acodec copy -preset:v ultrafast -tune:v zerolatency -f flv rtmp://172.18.0.x.x:1935/vod/video # 传输的分辨率大,视频较为卡顿
    ffmpeg -f dshow -i video="EasyCamera" -vcodec libx264 -acodec copy -preset:v ultrafast -tune:v zerolatency -vf scale=iw/2:-1 -f flv rtmp://172.18.0.x.x:1935/vod/video # 分辨率减少一半,视频较流畅

    参考博客

    参考博客

    展开全文
  • ffmpeg摄像头推流

    2020-12-23 17:35:29
    该楼层疑似违规已被系统折叠隐藏此楼查看此楼使用ffmpeg摄像头视频得到如下信息:Input #0, dshow, from 'video=USB HD Webcam':Duration: N/A, start: 22955.163000, bitrate: N/AStream #0:0: Video: mjpeg ...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

    使用ffmpeg,摄像头视频得到如下信息:

    Input #0, dshow, from 'video=USB HD Webcam':

    Duration: N/A, start: 22955.163000, bitrate: N/A

    Stream #0:0: Video: mjpeg (MJPG / 0x47504A4D), yuvj422p(pc, bt470bg/unknown/unknown), 640x480, 30 fps, 30 tbr, 10000k tbn, 10000k tbc

    另外本地搭建了rtmp服务器;

    然后利用下面的函数实现解码、编码、推流的过程:

    while (ret>=0)

    {

    ret=av_read_frame(fci, pkt);

    index_frame++;

    avcodec_send_packet(cci, pkt);

    avcodec_receive_frame(cci, frm);

    avcodec_send_frame(cco, frm);

    avcodec_receive_packet(cco, pkt);

    int64_t duration = AV_TIME_BASE / av_q2d(fci->streams[0]->r_frame_rate);

    AVRational time_base1 = fci->streams[0]->time_base;

    pkt->pts = index_frame*duration / (av_q2d(time_base1)*AV_TIME_BASE);

    pkt->dts = pkt->pts;

    pkt->duration = duration / (av_q2d(time_base1)*AV_TIME_BASE);

    cout << "send " << index_frame << " frames" << endl;

    cout <pts <duration<< endl;

    //av_interleaved_write_frame(fco, pkt);

    av_write_frame(fco, pkt);

    av_packet_unref(pkt);

    av_frame_unref(frm);

    //av_usleep(300);

    }

    但是使用VLC或者ffplay进行拉流播放时,只有画面显示那一瞬间的画面被显示了出来。

    各位大哥们,有知道怎么解决这个问题的吗?

    展开全文
  • ffmpeg查看USB摄像头同时推流

    千次阅读 2020-01-19 09:12:58
    最近有个项目,需求是USB摄像头在观看画面的同时做直播,一直以来都是通过ffmpeg+nginx的方式来做,但是本次遇到了一个大坑。 查看本地设备列表 ffmpeg -list_devices true -f dshow -i dummy 可以看见本地有两...

    欢迎访问自建博客原文:
    http://www.e-lionel.com/index.php/2018/08/07/64/

    最近有个项目,需求是USB摄像头在观看画面的同时做直播,一直以来都是通过ffmpeg+nginx的方式来做,但是本次遇到了一个大坑。


    查看本地设备列表

    ffmpeg -list_devices true -f dshow -i dummy
    

    可以看见本地有两个摄像头可以用
    分别是:
    Integrated Camera
    Gsou Audio Webcam
    这里用Gsou Audio Webcam做测试。

    ffplay观看摄像头画面

    ffplay -f dshow -i video="Gsou Audio Webcam"
    

    ffmpeg推USB摄像头

     -vcodec libx264 -an -f flv "rtmp://192.168.63.71:10035/live/test1"
    

    将摄像头的视频保存到本地

     ffmpeg -f dshow -i video="Gsou Audio Webcam" -vcodec libx264 -an -c copy -f avi "C:\Users\Lionel\Desktop\copytest\test1.avi"
    

    三个shell分别执行都没有什么问题,但是当同时运行的时候就出现了问题
    提示摄像头I/O被其他设备占用。
    这样问题就来了,我的需求是看的同时推流并保存。而且要求本地看到的摄像头画面需要没有延迟(rtmp流大概有3s左右的延迟)。

    所以我考虑了以下思路:
    1、使用虚拟摄像头
    通过VCam等虚拟摄像头软件将摄像头虚拟化,让多方都同时使用这个虚拟摄像头。
    思路是OK的,但是在使用的过程中发现虚拟摄像头的效果都不是很理想,所以这个思路被我PASS了。

    2、本地播放摄像头,全屏播放,然后实用ffmpeg将本地桌面推流出去,达到直播的效果。
    这个思路我觉得也是OK的,于是进行了尝试。
    网络上收集了一些资料,说ffmpeg推流本地桌面需要其他插件支持,于是进行了尝试,也就是上边设备列表里出现的“screen-capture-recorder”。但实际上并没有成功,或许也是我操作方法不正确。
    于是继续搜寻资料,终于在chinaFFmpeg的论坛看到了另一种方式。

    ffmpeg推流本地桌面

    ffmpeg -draw_mouse 1 -offset_x 0 -offset_y 0 -f GDIgrab -i desktop -f flv rtmp://192.168.63.71:10035/live/test1
    

    尝试发现这种方式是OK的,可以时间本地桌面的推流。但是如果多现实做的扩展显示,则会将所有桌面图像并列推出去,目测“-offset_x 0 -offset_y 0”参数可以解决这个问题,但是我只是把屏幕扩展关掉了,实验是好用的。
    这样我们就获得了rtmp流,可以观看和进行录像,具体的shell命令可以在我其他帖子里看到。
    测试播放可以使用VLC,但是使用发现这个软件播放会加大延迟。
    也可以使用ffplay播放。
    也可以使用EASYDSS提供的在线播放器,我通常是使用这个测试,因为比较方便嘛。
    地址:http://www.easydss.com:10088/#/player

    综上,基本算是变相实现了本次的需求,希望这个帖子对大家有帮助。

    展开全文
  • FFMPEGUSB摄像头视频进行UDP推流 利用FFMPEGUSB摄像头进行推流直播,采用命令行的方式无论是rtmp还是udp推流,延迟均较为严重,延迟3-6秒。小白一枚,无奈之下参考雷神和众多网友的文字,反复折腾,终于发现使用...

    FFMPEG对USB摄像头视频进行UDP推流

    利用FFMPEG对USB摄像头进行推流直播,采用命令行的方式无论是rtmp还是udp推流,延迟均较为严重,延迟3-6秒。小白一枚,无奈之下参考雷神和众多网友的文章,反复折腾,终于发现使用奥尼摄像头进行UDP推流可以实现视频传输延迟<1秒.

    程序代码

    
    ```cpp
    ```/*
     * 目的:测试USB摄像头采用 UDP 推流
     * 注意:① 摄像头使用video=aoni webcam A30,其本身是mjpeg格式,不转码直接推流;
     *      ② 配置摄像头的帧数为15帧(帧率大延迟严重),忽略PTS部分,因其压缩包自带了pts;
     *      ③ 播放命令:ffplay udp://localhost:6666 ,不要使用ffplay -vcodec mpeg2video udp://localhost:6666;
     *		指定了播放解码器会出错,原因可能是解码器本身不匹配;
     *      ④ UDP 推流无需服务器,直接推,直接播。
     * 运行结果:延时 < 1秒 。
     */
    
    
    #include <stdio.h>
    #include <time.h>
    
    #define __STDC_CONSTANT_MACROS
    
    #ifdef _WIN32
    //Windows
    extern "C"
    {
    #include "libavcodec/avcodec.h"
    #include "libavformat/avformat.h"
    #include "libswscale/swscale.h"
    #include "libavdevice/avdevice.h"
    #include "libavutil/time.h"
    };
    #endif
    
    //Output YUV420P 
    #define OUTPUT_YUV420P 0
    #define USE_DSHOW 0
    
    //枚举摄像头
    void show_dshow_device(){
    	AVFormatContext *pFormatCtx = avformat_alloc_context();					// (pFormatCtx - ★★★)
    	AVDictionary* options = NULL;
    	av_dict_set(&options,"list_devices","true",0);
    	AVInputFormat *iformat = av_find_input_format("dshow");
    	printf("========Device Info=============\n");
    	//参数:上下文、文件名、文件格式、选项
    	//作用:参数挂载,打印显示系统摄像头信息
    	avformat_open_input(&pFormatCtx,"video=dummy",iformat,&options);		// (pFormatCtx - ★★★)
    	printf("==============摄像头枚举结束!==================\n");
    	avformat_close_input(&pFormatCtx);										// (pFormatCtx - ☆☆☆)
    }
    
    
    //根据枚举摄像头信息,挑选所需摄像头,将名称写入avformat_open_input()函数的文件名参数中
    void show_dshow_device_option() {
    	AVFormatContext *pFormatCtx = avformat_alloc_context();					// (pFormatCtx - ★★★)
    	AVDictionary* options = NULL;
    	av_dict_set(&options, "list_options", "true", 0);
    	AVInputFormat *iformat = av_find_input_format("dshow");
    	printf("========Device Option Info=============\n");
    	//参数:上下文、文件名、文件格式、选项
    	avformat_open_input(&pFormatCtx, "video=aoni webcam A30", iformat, &options);	
    	printf("================摄像头信息显示结束!================\n");
    	avformat_close_input(&pFormatCtx);										// (pFormatCtx - ☆☆☆)
    }
    
    
    /* 显示流失时间 */
    void elapsed_time() {
    	printf("流失的时间: %u 毫秒 \n",clock());
    	printf("================================\n");
    }
    
    
    int main(int argc, char* argv[])
    {
    	AVFormatContext	*pFormatCtx, *ofmt_ctx;
    	AVOutputFormat	*ofmt;
    	unsigned int	i;
    	int	videoindex, ret, w_output, h_output;
    	AVPacket		pkt;
    	int				frame_index = 0;
    	const char		*out_filename = "udp://localhost:6666";
    
    	AVDictionary *options = NULL;
    	//av_dict_set(&options, "r", "15", 0);
    	av_dict_set(&options, "framerate", "15", 0);
    		
    	printf("初始化部分开始:\n");
    	elapsed_time();
    
    	/*●1 初始化部分 */
    	av_register_all();
    	avformat_network_init();	
    	avdevice_register_all();
    	printf("初始化结束:\n");
    	elapsed_time();
    
    	/*●2  显示可用的摄像头和麦克风 */
    	show_dshow_device();		 // 枚举摄像头
    	show_dshow_device_option();	 // 输出USB摄像头信息
    	printf("相机枚举和信息输出结束! \n");
    	elapsed_time();
    
    	输入封装上下文//
    	/*●3  创建输入封装上下文 */
    	pFormatCtx = avformat_alloc_context();									// (pFormatCtx - ★★★)
    	// 找出文件格式(一般可省略,NULL即可)
    	AVInputFormat *ifmt=av_find_input_format("dshow");
    	printf("AVFormatContext 创建结束! \n");
    	elapsed_time();
    
    	/*●4  打开输入文件 */
    	//参数:上下文、文件名、文件格式、选项;这里文件名是摄像头名,选项可以配置参数;
    	//作用:实际是给封装上下文中写入相关信息,挂载输入文件
    	if(avformat_open_input(&pFormatCtx,"video=aoni webcam A30",ifmt, &options)!=0){
    		printf("Couldn't open input stream.\n");
    		getchar();
    		return -1;
    	}
    	printf("avformat_open_input 文件打开结束! \n");
    	elapsed_time();
    
    	/* ●5  检查封装上下文是否正确 */
    	if(avformat_find_stream_info(pFormatCtx,NULL)<0)
    	{
    		printf("Couldn't find stream information.\n");
    		getchar();
    		return -1;
    	}
    	printf("AVFormatContext检测结束! \n");
    	elapsed_time();
    
    	/* ●6  封装上下文中找出视频流 */ 
    	videoindex = -1;
    	for (i = 0; i < pFormatCtx->nb_streams; i++) 
    	{
    		if (pFormatCtx->streams[i]->codec->codec_type == AVMEDIA_TYPE_VIDEO)
    		{
    			videoindex = i;
    			w_output = pFormatCtx->streams[i]->codec->width;
    			h_output = pFormatCtx->streams[i]->codec->height;
    			printf("图像宽度和高度为:%d * %d \n", w_output, h_output);
    			printf("6-视频流检索结束!\n");
    			elapsed_time();
    			break;
    		}
    	}
    
    	// 判断是否有视频流,没有就退出主程序
    	if(videoindex == -1)
    	{
    		printf("Couldn't find a video stream.\n");
    		getchar();
    		return -1;
    	}
    
    	/* ●7 打印输入流的信息 */
    	// 参数:封装上下文、流索引、文件名、0输入1输出;
    	// 这里文件名用1或相机名均可,原因不明
    	av_dump_format(pFormatCtx,videoindex,"video=aoni webcam A30",0);
    	printf("7-AVFormatContext 设备信息 dump 结束!\n");
    	elapsed_time();
    
    	输出封装上下文//
    	avformat_alloc_output_context2(&ofmt_ctx, NULL, "mjpeg", out_filename);		//(ofmt_ctx - ★★★)
    	if (!ofmt_ctx) {
    		printf("Could not create output context\n");
    		ret = AVERROR_UNKNOWN;
    		goto end;
    	}
    	ofmt = ofmt_ctx->oformat;
    	for (i = 0; i < pFormatCtx->nb_streams; i++) {
    		AVStream *in_stream = pFormatCtx->streams[i];
    		AVStream *out_stream = avformat_new_stream(ofmt_ctx, in_stream->codec->codec);
    		if (!out_stream) {
    			printf("Failed allocating output stream\n");
    			ret = AVERROR_UNKNOWN;
    			goto end;
    		}
    		ret = avcodec_copy_context(out_stream->codec, in_stream->codec);
    		if (ret < 0) {
    			printf("Failed to copy context from input to output stream codec context\n");
    			goto end;
    		}
    		out_stream->codec->codec_tag = 0;
    		if (ofmt_ctx->oformat->flags & AVFMT_GLOBALHEADER)
    			out_stream->codec->flags |= CODEC_FLAG_GLOBAL_HEADER;
    	}
    	//Dump Format
    	av_dump_format(ofmt_ctx, 0, out_filename, 1);
    
    	printf("输出上下文 dump 结束!\n");
    	elapsed_time();
    
    	数据推送///
    	
    	//Open output URL 打开IO口
    	if (!(ofmt->flags & AVFMT_NOFILE)) {
    		ret = avio_open(&ofmt_ctx->pb, out_filename, AVIO_FLAG_WRITE);
    		if (ret < 0) {
    			printf("Could not open output URL '%s'", out_filename);
    			goto end;
    		}
    	}
    	//Write file header   写文件头
    	ret = avformat_write_header(ofmt_ctx, NULL);
    	if (ret < 0) {
    		printf("Error occurred when opening output URL\n");
    		goto end;
    	}
    
    	while (1) {
    		//Get an AVPacket 获取压缩包到pkt
    		ret = av_read_frame(pFormatCtx, &pkt);		//(pkt - ★★★)
    		if (ret < 0)
    			break;
    		//Print to Screen  控制台显示发送第几帧
    		if (pkt.stream_index == videoindex) {
    			printf("Send %8d video frames to output URL\n", frame_index);
    			frame_index++;
    		}
    		// write frame to IO  写帧到IO
    		ret = av_interleaved_write_frame(ofmt_ctx, &pkt);
    		if (ret < 0) {
    			printf("Error muxing packet\n");
    			break;
    		}
    		// free packet  每次用完释放pkt,将其内容清空
    		av_free_packet(&pkt);						//(pkt - ☆☆☆)
    	}
    	//Write file trailer 写文件尾
    	av_write_trailer(ofmt_ctx);
    
    end:
    	// 关闭输入和输出封装上下文
    	/* close input */
    	avformat_close_input(&pFormatCtx);				//(pFormatCtx - ☆☆☆)
    	/* close output */
    	if (ofmt_ctx && !(ofmt->flags & AVFMT_NOFILE))
    		avio_close(ofmt_ctx->pb);
    	avformat_free_context(ofmt_ctx);				//(ofmt_ctx - ☆☆☆)
    	if (ret < 0 && ret != AVERROR_EOF) {
    		printf("Error occurred.\n");
    		return -1;
    	}
    	return 0;
    }
    
    

    运行情况

    在这里插入图片描述懒癌在身,其他参考和说明就不写啦!

    展开全文
  • 在三月份接到了这样一个任务,需要通过USB摄像头采集数据之后,放入6818进行硬件编码后,再通过FFMPEG进行RTMP推流。因为对于ffmpeg并不是非常的了解,加上中间偷了一段时间的懒,直到最近才完成初步的工作。 在这里...
  • 利用FFmpeg实现rtp推流.重点为时间戳转换.
  • FFmpeg读取USB摄像头H264帧rtmp推流

    万次阅读 2019-01-18 20:12:11
    经过这几天的验证,终于走通了FFmpeg读取USB摄像头H264帧,然后用rtmp推流。使用的版本是4.0.2 FFmpeg的源码在ubuntu16.04上的编译就不说了,这个网上的文章很多,这里我要说的是,好像FFmpeg对v4l2的封装,不能从...
  • 先在官网下载ffmpeg32位的库,在Qt上打开usb摄像头。在线程里每一帧的图片通过信号传回GUI界面并显示,记住一定要在线程里面实现,不然会卡界面。
  • ffmpeg调用USB摄像头RTMP

    千次阅读 热门讨论 2020-06-02 16:48:31
    Ubuntu上实现ffmpeg采集摄像头编码RTMP到nginx服务器 1.环境准备 ffmpeg源码编译 https://trac.ffmpeg.org/wiki/CompilationGuide/Ubuntu官网编译教程 一定要支持h264 虽说这个教程会有点问题,但我觉得你应该能...
  • 利用ffmpeg的API从USB摄像头获取视频并保存为H264的TS的C语言源代码
  • RTP在媒体传输中是广为应用的一种协议,包括大家熟知的GB28181协议以及很多视频会议的应用,都是采用RTP。常用的RTSP协议实际上也是在RTP基础上实现的。RTP并不复杂,本质上可以理解为RAW数据加上一些头,封装以后...
  • 简介今天要给大家介绍如何在Android平台下获取采集的图像,并进行编码推流。同时项目工程也是在之前的代码基础上新增功能QQ截图20171124114855.png打开摄像头并设置参数具体代码查看CameraActivity.javaprivate ...
  • 通过USB摄像头(注:windows7/10下使用内置摄像头,linux下接普通的usb摄像头(Logitech))获取视频用到的模块包括avformat和avdevice。头文件仅include avdevice.h即可,因为avdevice.h中会include avformat.h。...
  • https://www.scivision.co/youtube-live-ffmpeg-livestream/
  • ffmpeg在以前介绍过,是一个相当强大的工具,我们这次利用它实现rtmp推流(最终推流地址统一为rtmp://127.0.0.1:1935/live/123)。1、首先下载ffmpeg和ffplayffmpeg在以前介绍过,是一个相当强大的工具,我们这次利用...
  • FFmpeg 摄像头 rtsp

    千次阅读 2021-01-26 15:12:08
    Windows 环境下使用 FFmpeg 送本地 USB 摄像头为 rtsp ,并使用 vlc 播放。 本文主要使用环境是 Windows 下的 FFmpeg 送本地摄像头为 rtsp 。 下载 FFmpeg FFmpeg官网 下载 Windows 版本的 FFmpeg,并把 ...
  • 另外,命令行的最大问题是不能精细化的管理ffmpeg推流,比如网络不好的情况下,不好感知和处理。ffmpeg网上买了一些课程,发现大部分都是针对ffmpeg3的,目前的ffmpeg主要是4。语法有较大的不同...
  • windows :列设备 ffmpeg -list_devices true -f dshow -i dummy编码为H.264,保存为本地文件 ffmpeg -f dshow -i video="Integrated Camera" -vcodec libx264 mycamera.mkv播放 ffplay ...
  • 这是基于QT+FFMPEG推流客户端。 QT版本5.12.6. 编译器: MinGW 32 支持: 1. 推流摄像头图像+音频到流媒体服务器 2. 推流桌面图像+音频到流媒体服务器 3. 录制摄像头图像+音频到本地 4. 录制桌面图像+音频到本地 ...
  • FFMPEG摄像头推流RTMP

    千次阅读 2019-01-22 19:00:15
    实现这个过程需要自己搭建rtmp服务器...推流的过程是: 1. 打开输入文件(这里把摄像头当作一个输入文件),需要用到的函数如下 1)av_find_input_format() //如果是打开摄像头或者屏幕需要增加 2)avformat_open_inp...
  • 1.开发环境:vs2015; 2.FFMPEG获取本地摄像头视频,OPENCV嵌入MFC对话框中显示; 3.程序包中包括FFMPEG和OPENCV资源包; 4.环境已配置好,拿到代码修改查找摄像头名称即可编译运行;
  • 使用FFmpeg API采集摄像头图像和麦克风音频,支持图像预览,把图像和音频编码后保存成文件,实现视音频同步机制。为更好理解代码,请阅读我博客上相关的一篇文章:...
  • 用C#Winform写的GB28181监控项目,采用FFMpeg解码,推RTMP流,推流需要Nginx-RTMP配合,在我的另一个资源里有,可以实现稳定接收和解码推流播放,播放用FFPlay直接播放即可测试。因为是测试项目,只支持一路视频播放...
  • Linux下用 FFMPEG 采集 usb摄像头视频 和 摄像头内置麦克风音频 到RTMP服务 ffmpeg -f video4linux2 -qscale 10 -r 12 -s 640x480 -i /dev/video0 -f alsa -i hw:1 -ab 16 -ar 22050 -ac 1 -f mp3...
  • ffmpeg 采集摄像头和麦克风,并推流

    千次阅读 2020-06-04 13:57:26
    ffmpeg 读取摄像头和麦克风 并进行rtmp推流 音视频直播 的简单应用
  • SOM-rk3399开发板usb摄像头推流记录 参考文献: rk3399 nanopi neo4 usb摄像头推流记录 官方推流方法gstreamer 操作系统:SOM-rk3399 -friendly-core 查看usb摄像头信息指令 sudo v4l2-ctl --list-formats-ext -d /...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 716
精华内容 286
关键字:

ffmpegusb摄像头推流