H.264 - 使用FFmpeg

时间:2017-08-16 06:16:47

标签: video ffmpeg video-streaming h.264 flv

我使用的是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

  • 结果:当它通过网络流式传输时,会显示视频的绿色帧(但音频效果非常好)。当我需要通过网络传输时,是否需要额外的设置?

我对Receiver方面毫无疑问,因为它与FFmpeg实用程序(上面提到的命令)配合得很好。 目前我已下载ffmpeg 2.8.10源代码并查看ffmpeg.c文件以获取一些额外设置。直到现在我还没有发现任何有用的东西。

请在网络上发送flv时显示绿色帧的原因,以便在系统硬盘上转储时运行良好。

1 个答案:

答案 0 :(得分:1)

我已经解决了这个问题。

早些时候,我在提取flv容器所需的extradata之前正在调用st->codec->extradata

现在我首先更新st->codec->extradata_sizeavformat_write_header然后我调用{{1}} api,一切正常。