我使用的是FC23机器,FFMPEG版本是2.8.10
使用下面的命令,我可以成功地通过tcp流式传输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 zerolatency -preset ultrafast -acodec aac -strict -2 -ar 48000 -ab 96k -f flv -metadata streamName = naseeb.sdp tcp://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中将filename
提供为muxer.flv
。
muxer.flv
时,视频和音频都能很好地播放(B)如果我需要通过tcp 流式传输 flv,那么我提供filename
作为tcp://127.0.0.1:6666
。
我对Receiver方面毫无疑问,因为它与FFmpeg
实用程序(上面提到的命令)配合得很好。
目前我已下载ffmpeg 2.8.10源代码并查看ffmpeg.c
文件以获取一些额外设置。直到现在我还没有发现任何有用的东西。
请在网络上发送flv时显示绿色帧的原因,以便在系统硬盘上转储时运行良好。
答案 0 :(得分:1)
我已经解决了这个问题。
早些时候,我在提取flv容器所需的extradata之前正在调用st->codec->extradata
。
现在我首先更新st->codec->extradata_size
和avformat_write_header
然后我调用{{1}} api,一切正常。