社区
资源
帖子详情
网络版ffmpeg解码的问题
鄢老
2008-10-20 03:47:53
上次用ffmpeg做了一个播放文件的本地播放器,效果不错。这次公司让我做一个网络版的播放器,一想到ffmpeg来解码服务器发过来的mp4视频数据包就没了主意,自己做的实验老是通不过。
诸位,谁有这方面的经验,可否告知一二,如分数不够,还可以加分。
...全文
813
9
打赏
收藏
网络版ffmpeg解码的问题
上次用ffmpeg做了一个播放文件的本地播放器,效果不错。这次公司让我做一个网络版的播放器,一想到ffmpeg来解码服务器发过来的mp4视频数据包就没了主意,自己做的实验老是通不过。 诸位,谁有这方面的经验,可否告知一二,如分数不够,还可以加分。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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");
}
Whisper语音识别模型部署避坑指南
本文针对Whisper-large-v3语音识别模型在Ubuntu 24.04 + RTX 4090 D环境下的实际部署
问题
,系统梳理环境准备(GPU驱动/CUDA匹配、
FFmpeg
编译选项、缓存路径权限)、运行故障(端口监听异常、实时录音失效、多语言检测失准)及性能优化(显存溢出防控、长音频流式转录、systemd服务守护)等核心环节,强调工程化落地所需的版本严控、配置显式化与资源管控。
UVC网络摄像头(一)
本文介绍了一个简单的项目,该项目利用树莓派将摄像头采集的视频数据压缩并传输到Android手机进行实时查看。整个过程涉及V4L2读取YUY2格式数据、转换为YUV420格式、X264编码为H264视频流并通过UDP传输。文中还讨论了使用RTP协议改进传输稳定性的可能性。
鼎捷易飞9.0.8和9.0.7授权注册文件
源码直接下载地址: https://pan.quark.cn/s/50dc62428457 最新版本的鼎捷易飞9.0.8与易飞9.0.7的授权注册文档,其中基本模块覆盖了10个用户授权,特殊模块则每模块分配3个用户授权,同时提供易飞全模块的授权方案,该授权适用于从易飞9.0至最新的9.0.8版本的所有需求。
基于遗传算法的新的异构分布式系统任务调度算法研究(Matlab代码实现)
内容概要:本文研究了一种基于遗传算法的新型异构分布式系统任务调度算法,旨在解决异构计算环境中任务分配与调度的复杂优化
问题
。通过Matlab代码实现该算法,充分利用遗传算法强大的全局搜索能力和鲁棒性,对任务执行时间、资源利用率、系统负载均衡等关键性能指标进行综合优化,有效提升分布式系统的整体运行效率与稳定性。研究详细阐述了算法的整体架构设计、染色体编码策略、适应度函数构造、选择机制以及交叉与变异等遗传操作的实现细节,并通过大量仿真实验验证了所提出算法相较于传统调度方法在收敛速度、解的质量和调度性能方面的显著优越性。; 适合人群:具备一定编程基础和优化算法理论知识,从事分布式计算、高性能计算、云计算资源调度或智能优化算法研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①应用于高性能计算、云计算、边缘计算等异构计算平台中的任务调度优化,提升资源利用效率;②为研究人员提供遗传算法在复杂组合优化
问题
中应用的完整实现案例,深化对智能优化算法设计原理与仿真实践的理解; 阅读建议:建议读者结合提供的Matlab代码深入研读,重点理解适应度函数的设计逻辑与遗传算子的参数调优策略,并可通过更换不同的任务集和系统模型来测试算法的泛化能力与鲁棒性。
中国各省农村人均受教育年限(2006-2024年)
参考李林凤等(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
社区成员
18,437
社区内容
发帖
与我相关
我的任务
资源
VC/MFC 资源
复制链接
扫一扫
分享
社区描述
VC/MFC 资源
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章