Video H.264-使用FFmpeg通过TCP流传输时的绿色帧
我使用的是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语言写了一个应用程序。 我在应用程序中做了以下事情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-
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
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)代码>