需要将音视频推送到直播服务器,使用ffmpeg较为简单,不用详细了解rtmp推送的细节,网上有一版雷神的代码,使用最新的ffmpeg会发现有些api已经弃用,或者提代为其他调用方式,现列出如下:
1、AVOutputFormat *ofmt = NULL; 前需要加上const ;
2、ifmt_ctx->streams[i]->codec- 调整为 ifmt_ctx->streams[i]->codecpar ;
3、avformat_new_stream(ofmt_ctx, in_stream->codec->codec); 调整为 avformat_new_stream(ofmt_ctx, avcodec_find_decoder(in_stream->codecpar->codec_id)) ;
4、ret = avcodec_copy_context(out_stream->codecpar->codec_type, in_stream->codecpar->codec_type);
if (ret < 0) {
printf( "Failed to copy context from input to output stream codec context\n");
goto end;
}
out_stream->codecpar->codec_type->codec_tag = 0;
if (ofmt_ctx->oformat->flags & AVFMT_GLOBALHEADER)
out_stream->codecpar->codec_type->flags |= AV_CODEC_FLAG_GLOBAL_HEADER;
替换为:
AVCodecContext* codec_ctx = avcodec_alloc_context3(avcodec_find_encoder(out_stream->codecpar->codec_id));
if (avcodec_parameters_to_context(codec_ctx, in_stream->codecpar) < 0) {
printf("Failed to copy in_stream codecpar to codec context\n");
goto end;
}
codec_ctx->codec_tag = 0;
if (ofmt_ctx->oformat->flags & AVFMT_GLOBALHEADER)
codec_ctx->flags |= AV_CODEC_FLAG_GLOBAL_HEADER;
if (avcodec_parameters_from_context(out_stream->codecpar, codec_ctx) < 0) {
printf("Failed to copy codec context to out_stream codecpar context\n");
goto end;
}
5、av_free_packet(&pkt); 替换为 av_packet_unref(&pkt);
最后附上源代码下载地址:
项目主页
SourceForge:simplest ffmpeg streamer
Github:GitHub - leixiaohua1020/simplest_ffmpeg_streamer: Simplest streamer based on FFmpeg
开源中国:http://git.oschina.net/leixiaohua1020/simplest_ffmpeg_streamer
CSDN下载地址:http://download.csdn.net/detail/leixiaohua1020/8005311
————————————————
版权声明:本文为CSDN博主「音视频开发老马」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/yinshipin007/article/details/130906369