ffmpeg实现摄像头拉流_ffmpeg摄像头推流

使用ffmpeg从USB HD Webcam获取视频流并推送到本地rtmp服务器时遇到问题,VLC或ffplay拉流播放仅显示一瞬间的画面。代码中实现了av_read_frame、avcodec_send_packet和av_write_frame等过程,但画面同步存在延迟。寻求解决方案。
摘要由CSDN通过智能技术生成

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

使用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进行拉流播放时,只有画面显示那一瞬间的画面被显示了出来。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值