Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Video H.264-使用FFmpeg通过TCP流传输时的绿色帧_Video_Ffmpeg_Video Streaming_H.264_Flv - Fatal编程技术网

Video H.264-使用FFmpeg通过TCP流传输时的绿色帧

Video H.264-使用FFmpeg通过TCP流传输时的绿色帧,video,ffmpeg,video-streaming,h.264,flv,Video,Ffmpeg,Video Streaming,H.264,Flv,我使用的是FC23机器,FFMPEG版本是2.8.10 使用下面的命令,我可以通过tcp成功地传输flv,并且能够在接收方成功地接收flv。我用vlc播放器播放。音频和视频都播放得很好 /ffmpeg-f x11grab-s 1920x1080-framerate 15-i:0.0-f alsa-ac 2-i hw:1-vcodec libx264-r 30-pix_fmt yuv420p-tune zeroplatency-preset ultrafast-acodec aac-strict-

我使用的是FC23机器,FFMPEG版本是2.8.10

使用下面的命令,我可以通过tcp成功地传输flv,并且能够在接收方成功地接收flv。我用vlc播放器播放。音频和视频都播放得很好

/ffmpeg-f x11grab-s 1920x1080-framerate 15-i:0.0-f alsa-ac 2-i hw:1-vcodec libx264-r 30-pix_fmt yuv420p-tune zeroplatency-preset ultrafast-acodec aac-strict-2-ar 48000-ab 96k-f flv-metadata streamName=naseeb.sdptcp://127.0.0.1:6666

但实际上,我需要使用一个应用程序来实现这一点。所以我用C语言写了一个应用程序。 我在应用程序中做了以下事情

 1. Open `AVOutputFormat` using below API
    fmt = av_guess_format("flv", NULL , NULL);
 2. Get `AVFormatContext` using below API
    avformat_alloc_output_context2(&oc, fmt, NULL, NULL);
 3. Then added streams(audio and video) using required APIs
 4. Then open codecs using required APIs
 5. Then set the output using below API
    ret = avio_open(&oc->pb, filename, AVIO_FLAG_WRITE);
(A) 如果我需要flv写入系统上的文件,那么我在步骤5中提供
文件名
作为
muxer.flv

  • 结果:当我使用VLC播放器播放
    muxer.flv
    时,视频和音频都播放得很好
(B) 如果我需要通过tcp传输flv,那么我将
filename
作为
tcp://127.0.0.1:6666

  • 结果:当通过网络传输时,视频会显示绿色帧(但音频效果很好)。当我需要通过网络传输时,是否需要额外的设置
我毫不怀疑接收器端,因为它与
FFmpeg
实用程序(上面提到的命令)配合得非常好。 目前我已经下载了ffmpeg 2.8.10源代码,并查看了
ffmpeg.c
文件中的一些额外设置。到目前为止,我还没有发现任何有用的东西


请说明为什么flv在网络上发送时显示绿色边框,而在系统硬盘上转储时,flv工作正常。

我已经解决了这个问题

早些时候,在提取flv容器所需的额外数据之前,我调用了
avformat\u write\u header


现在我首先更新
st->codec->extradata
st->codec->extradata\u size
然后调用
avformat\u write\u header
api,一切正常。

如何更新
st->codec->extradata
st->codec->extradata\u size
。你能分享一些代码示例吗?pkt.data是第一帧
st->codec->extradata\u size=oc->streams[0]->parser->parser->split(oc->streams[0]->codec,pkt.data,pkt.size);memcpy(st->codec->extradata,pkt.data,st->codec->extradata\u size)