【发布时间】:2018-01-24 04:02:23
【问题描述】:
我用的是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。
- 结果:当我使用 VLC 播放器播放
muxer.flv时,视频和音频都播放良好
(B) 如果我需要通过 tcp 流式传输 flv,那么我将 filename 提供为 tcp://127.0.0.1:6666。
- 结果:当它通过网络流式传输时,视频会显示绿框(但音频效果很好)。当我需要通过网络流式传输时,是否需要额外设置?
我对接收方毫无疑问,因为它与FFmpeg 实用程序(上面提到的命令)配合得很好。
目前我已经下载了 ffmpeg 2.8.10 源代码并查看了ffmpeg.c 文件以获取一些额外的设置。到目前为止,我还没有发现任何有用的东西。
请说明为什么在网络上发送flv时显示绿框,而在系统硬盘上转储时效果很好。
【问题讨论】:
标签: video ffmpeg video-streaming h.264 flv