网络版ffmpeg解码的问题

鄢老 2008-10-20 03:47:53
上次用ffmpeg做了一个播放文件的本地播放器,效果不错。这次公司让我做一个网络版的播放器,一想到ffmpeg来解码服务器发过来的mp4视频数据包就没了主意,自己做的实验老是通不过。
诸位,谁有这方面的经验,可否告知一二,如分数不够,还可以加分。
...全文
813 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
glacierful 2012-05-03
  • 打赏
  • 举报
回复
楼主能说说用什么方式来播放ffmpeg解码的数据吗?
直接当成一副图像来显示吗?
a1111111984 2009-04-01
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 lookforyou 的回复:]
直接使用av_open_input_file打开网络流就可,ffmpeg会自己寻找对应的格式
[/Quote]

你确定?
lookforyou 2008-12-18
  • 打赏
  • 举报
回复
直接使用av_open_input_file打开网络流就可,ffmpeg会自己寻找对应的格式
wolfman301 2008-11-04
  • 打赏
  • 举报
回复
比较乱,看不太明白
鄢老 2008-10-31
  • 打赏
  • 举报
回复
发现这里没高手,帖子发那么久了,还得不到一点有效的帮助。
lius1984 2008-10-25
  • 打赏
  • 举报
回复
这网站上有ffmpeg视频解码器源代码下载,希望对你有用 www.shgx.net
鄢老 2008-10-21
  • 打赏
  • 举报
回复
楼上的,压缩的现在不需要考虑,只考虑客户端在接收到服务器的mp4数据流时能正确解码,得到图象就行了。
VsirSoft 2008-10-20
  • 打赏
  • 举报
回复
网络的 不需要压缩么?? 视频这方面不是很熟
鄢老 2008-10-20
  • 打赏
  • 举报
回复
代码如下,是模拟网络发送数据包的,期待您的指导:
void main(void)
{
AVCodec *codec;
AVFrame *pFrameRGB,*pFramePic;
AVCodecContext *pCodecCtx= NULL;
int frame, size, got_picture, len;
FILE *fp;
int nFrames=0;
int nWidth=320,nHeight=280;
uint8_t inbuf[INBUF_SIZE + FF_INPUT_BUFFER_PADDING_SIZE], *inbuf_ptr;
avcodec_init();
av_register_all();

memset(inbuf + INBUF_SIZE, 0, FF_INPUT_BUFFER_PADDING_SIZE);
printf("Video decoding\n");


int numBytes=0;
uint8_t *buffer;

codec = avcodec_find_decoder(CODEC_ID_H264);//CODEC_ID_MPEG2VIDEO CODEC_ID_H264 CODEC_ID_MPEG4
if (!codec) {
fprintf(stderr, "codec not found\n");
return;
}

pCodecCtx= avcodec_alloc_context();
pFramePic= avcodec_alloc_frame();
pFrameRGB=avcodec_alloc_frame();

avpicture_alloc((AVPicture *)pFramePic,PIX_FMT_RGB24,nWidth,nHeight);
avpicture_alloc((AVPicture *)pFrameRGB,PIX_FMT_RGB24,nWidth,nHeight);
if(codec->capabilities&CODEC_CAP_TRUNCATED)
pCodecCtx->flags|= CODEC_FLAG_TRUNCATED; /* we dont send complete frames */

if (avcodec_open(pCodecCtx, codec) < 0) {
fprintf(stderr, "could not open codec\n");
return;
}

/* the codec gives us the frame size, in samples */

char *strFileName="d:\\6.mp4";
fp= fopen(strFileName, "rb");
if (!fp)
{
fprintf(stderr, "could not open %s\n", strFileName);
return;
}

fseek(fp,0,SEEK_SET);
frame = 0;
for(;;) {
size = fread(inbuf,1,INBUF_SIZE,fp);
if (size == 0)
{
break;
}
inbuf_ptr = inbuf;
while (size > 0)
{
got_picture=0;
len = avcodec_decode_video(pCodecCtx, pFramePic, &got_picture,inbuf_ptr, size);
if (len < 0)
{
fprintf(stderr, "Error while decoding frame %d\n", frame);
// return;
goto end_loop;
}
if (got_picture)
{
printf("saving frame %3d\n", nFrames);
// frame++;

// Determine required buffer size and allocate buffer
/*
if(numBytes==0)
{
numBytes=avpicture_get_size(PIX_FMT_RGB24, pCodecCtx->width,pCodecCtx->height);
buffer=new uint8_t[numBytes];
avpicture_fill((AVPicture *)pFramePic, buffer, PIX_FMT_RGB24,pCodecCtx->width, pCodecCtx->height);
delete [] buffer;
}
*/
//
static struct SwsContext *img_convert_ctx=NULL;
pFramePic->data[0] += pFramePic->linesize[0]*(pCodecCtx->height-1);
pFramePic->linesize[0] *= -1;

pFramePic->data[1] += pFramePic->linesize[1]*(pCodecCtx->height/2 - 1);
pFramePic->linesize[1] *= -1;
pFramePic->data[2] += pFramePic->linesize[2]*(pCodecCtx->height/2 - 1);//m_pFrameDec
pFramePic->linesize[2] *= -1;

img_convert_ctx = sws_getCachedContext(img_convert_ctx,
pCodecCtx->width,pCodecCtx->height,pCodecCtx->pix_fmt ,
pCodecCtx->width,pCodecCtx->height,PIX_FMT_BGR24,SWS_X, NULL, NULL, NULL); //PIX_FMT_RGB24

sws_scale(img_convert_ctx, pFramePic->data,pFramePic->linesize,/*0*/pCodecCtx->width,
pCodecCtx->height,pFrameRGB->data,pFrameRGB->linesize);
nFrames++;
//char strBmpFile[80];
//sprintf(strBmpFile,"d:\\new\\%d.bmp",nFrames);
//CreateBmp(strBmpFile,(uint8_t *)pFrameRGB->data[0],pCodecCtx->width,pCodecCtx->height,24);

// fprintf(g_file,"P5\n%d %d\n%d\n",pCodecCtx->width,pCodecCtx->height,255);

}
size -= len;
inbuf_ptr += len;
}
}
end_loop: fclose(fp);
avcodec_close(pCodecCtx);
av_free(pCodecCtx);
av_free(pFramePic);
av_free(pFrameRGB);
printf("\n");

}
内容概要:本文研究了一种基于遗传算法的新型异构分布式系统任务调度算法,旨在解决异构计算环境中任务分配与调度的复杂优化问题。通过Matlab代码实现该算法,充分利用遗传算法强大的全局搜索能力和鲁棒性,对任务执行时间、资源利用率、系统负载均衡等关键性能指标进行综合优化,有效提升分布式系统的整体运行效率与稳定性。研究详细阐述了算法的整体架构设计、染色体编码策略、适应度函数构造、选择机制以及交叉与变异等遗传操作的实现细节,并通过大量仿真实验验证了所提出算法相较于传统调度方法在收敛速度、解的质量和调度性能方面的显著优越性。; 适合人群:具备一定编程基础和优化算法理论知识,从事分布式计算、高性能计算、云计算资源调度或智能优化算法研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①应用于高性能计算、云计算、边缘计算等异构计算平台中的任务调度优化,提升资源利用效率;②为研究人员提供遗传算法在复杂组合优化问题中应用的完整实现案例,深化对智能优化算法设计原理与仿真实践的理解; 阅读建议:建议读者结合提供的Matlab代码深入研读,重点理解适应度函数的设计逻辑与遗传算子的参数调优策略,并可通过更换不同的任务集和系统模型来测试算法的泛化能力与鲁棒性。
参考李林凤等(2025)一文关于农村劳动力人均受教育年限指标的构建与计算方法,整理了中国31个省份总体、分性别的农村人均受教育年限数据,具体计算方法如下: 农村劳动力人均受教育年限 = (农村未上过学人数 × 1+小学学历人数 × 6+初中学历人数 × 9+高中和中专学历人数 ×12+大专及以上学历人数 × 16)/农村6岁及以上总人口 相关数据:各地区、分性别人均受教育年限数据 一、数据介绍 数据名称:中国各省农村人均受教育年限 数据范围:全国31个省份 时间范围:2006-2024年 样本数量:590条 数据来源:《中国人口和就业统计年鉴》、《中国劳动统计年鉴》 二、数据指标 年份 省份 省份代码 农村人均受教育年限 男性-农村人均受教育年限 女性-农村人均受教育年限 6岁及以上人口 6岁及以上人口_男 6岁及以上人口_女 未上过学人口 未上过学人口_男 未上过学人口_女 小学人口 小学人口_男 小学人口_女 初中人口 初中人口_男 初中人口_女 高中人口 高中人口_男 高中人口_女 大专及以上人口 大专及以上人口_男 大专及以上人口_女 三、参考文献 [1]李林凤,刘杨,杨亦民.种业创新驱动农村产业融合的作用机制与空间分异效应[J].广东财经大学学报,2025,40(6):97-109. [2]徐小阳,李洁,金丽馥.普惠金融对农村教育贫困的纾解效应[J].中国农村经济,2020,(9):41-64.

2,586

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 资源
社区管理员
  • 资源
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧