社区
多媒体/流媒体开发
帖子详情
howto:如何将MJPEG格式的视频流保存为avi视频文件?
听海拉拉
2010-10-14 09:42:06
Hi all,
最近在做一个项目,通过网络获取了MJPEG的视频流,现在想将它录制下来,保存格式为avi,不知道有什么好方法。有代码能否贴一下。
谢谢
...全文
1883
19
打赏
收藏
howto:如何将MJPEG格式的视频流保存为avi视频文件?
Hi all, 最近在做一个项目,通过网络获取了MJPEG的视频流,现在想将它录制下来,保存格式为avi,不知道有什么好方法。有代码能否贴一下。 谢谢
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
19 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
小邓她爸
2012-08-17
打赏
举报
回复
顶一下,最近为这个问题犯难
sfe123
2012-04-20
打赏
举报
回复
楼主 不知道哦阿你做好了没有 能不能分享 一下 qq:1012955586@qq.com
DUAN841029
2010-12-17
打赏
举报
回复
你好,我跟你做一个课题,能不能加我一下,QQ:1542342658!
shayla
2010-10-14
打赏
举报
回复
MJPEG Decompressor Filter
是用来进行MJPEG解码的,解码后录制AVI文件会大很多,
MJPEG可以直接录制AVI文件.
楼主首先要明确一下需求
shayla
2010-10-14
打赏
举报
回复
从你的需求上看不使用Direcshow完全可以.
个人建议如果你现有得到JPEG图像的框架使用的DShow,那么就使用Dshow
否则可以不用.
听海拉拉
2010-10-14
打赏
举报
回复
[Quote=引用 6 楼 shayla 的回复:]
微软有一套写AVI文件的函数.
例如AVIFileOpen用来创建文件.
楼主可以查询msdn使用.
MJPEG录制没问题的.
[/Quote]
MJPEG Decompressor Filter
正在看,但好像要用到什么DirectShow,有点犯晕
有sample之类的吗
shayla
2010-10-14
打赏
举报
回复
微软有一套写AVI文件的函数.
例如AVIFileOpen用来创建文件.
楼主可以查询msdn使用.
MJPEG录制没问题的.
听海拉拉
2010-10-14
打赏
举报
回复
还是有点难度,还在不,帮我看看,我的视频源是从网络来的,
HRESULT hr;
char url[1000] = "http://192.168.223.128:8080/?action=snapshot";
HINTERNET internet= InternetOpen("HTTP Downloader",INTERNET_OPEN_TYPE_PRECONFIG,
NULL,NULL, NULL);
if( !internet )
{
MessageBox(" 没有视频信号");
return ;
}
HINTERNET file_handle = InternetOpenUrl(internet, url, NULL, 0, INTERNET_FLAG_RELOAD, 0);
if( !file_handle)
return ;
HGLOBAL hImageMemory_1=GlobalAlloc(GMEM_MOVEABLE, 2097152); //给图片分配全局内存
if( hImageMemory_1==NULL)
{
AfxMessageBox(" 没有分配内存");
return ;
}
void *pImageMemory_1=GlobalLock(hImageMemory_1); //锁定内存
DWORD bytes_read;
//DWORD dwReadedSize; //保存实际读取的文件大小
BOOL b = InternetReadFile(file_handle,pImageMemory_1,2097152,&bytes_read);
GlobalUnlock(hImageMemory_1); //解锁内存
CloseHandle(file_handle); //关闭文件句柄
if(!b)
return;
从网上了的MJPEG,之后分配内存与显示,再到播放,播放我是用timer来刷屏来连续从网络获取视频流,之后连续播放。播放这一步是做到了,现在是怎么把MJPEG的视频流保存下来。
IStream *pIStream;//创建一个IStream接口指针,用来保存图片流
IPicture *pIPicture;//创建一个IPicture接口指针,表示图片对象
hr = CreateStreamOnHGlobal(hImageMemory_1, false, &pIStream); //用全局内存初使化IStream接口指针
ASSERT(SUCCEEDED(hr));
hr = OleLoadPicture(pIStream, 0, false, IID_IPicture, (LPVOID*)&(pIPicture));//用OleLoadPicture获得IPicture接口指针
ASSERT(SUCCEEDED(hr));
以上代码是为了显示播放图片的。
现在我用以下方式保存图片,也可以打开图片,但不知道怎么做成视频
hr = CreateStreamOnHGlobal(hImageMemory_1, false, &pIStream);
AVIFILEINFO avi_info;
AVIFileInfo(avi,&avi_info,sizeof(AVIFILEINFO));
PAVISTREAM pStream;
//res
CreateStreamOnHGlobal(NULL,TRUE,&pIStream);
LONG size;
hr=pIPicture->SaveAsFile(pIStream,TRUE,&size);
char pathbuf[5024];
CFile iconfile;
iconfile.Open(TEXT("c:\\testAVI.jpg"), CFile::modeCreate|CFile::modeWrite);
LARGE_INTEGER li;
li.HighPart =0;
li.LowPart =0;
ULARGE_INTEGER ulnewpos;
pIStream->Seek( li,STREAM_SEEK_SET,&ulnewpos); //这里应该是指向文件头了
ULONG uReadCount = 1;
while(uReadCount>0)
{
pIStream->Read(pathbuf,sizeof(pathbuf),&uReadCount);
if(uReadCount>0)
iconfile.Write(pathbuf,uReadCount); //直接写文件,但不用定义图片文件信息头之类的,想不明白也能保存成功并且打开看得见
}
听海拉拉
2010-10-14
打赏
举报
回复
[Quote=引用 3 楼 dengzikun 的回复:]
这个没关系,修改FOURCC就可以了,AVI中可以放各种压缩格式的数据,
如MPEG4,H264,各种音频等.
[/Quote]
好的,谢谢,试试
dengzikun
2010-10-14
打赏
举报
回复
这个没关系,修改FOURCC就可以了,AVI中可以放各种压缩格式的数据,
如MPEG4,H264,各种音频等.
听海拉拉
2010-10-14
打赏
举报
回复
[Quote=引用 1 楼 dengzikun 的回复:]
http://www.hackchina.com/cont/171563
[/Quote]
谢谢,
我的是MJPEG是stream,你那个是bmp的
或者是我理解错了你那个程序
dengzikun
2010-10-14
打赏
举报
回复
http://www.hackchina.com/cont/171563
听海拉拉
2010-10-14
打赏
举报
回复
[Quote=引用 3 楼 dengzikun 的回复:]
这个没关系,修改FOURCC就可以了,AVI中可以放各种压缩格式的数据,
如MPEG4,H264,各种音频等.
[/Quote]
修改了FOURCC好像还不行,我从内存得到的指针付给了PAVISTREAM pStream可以编译通过,但没有什么都没有
CyberLogix
2010-10-14
打赏
举报
回复
呵呵,这么多人,帮顶
听海拉拉
2010-10-14
打赏
举报
回复
BOOL b = InternetReadFile(file_handle,pImageMemory_1,2097152,&bytes_read);
图片流已经读到内存pImageMemory_1了,是mjpeg格式,但不知道怎么来操作让他保持成视频格式
听海拉拉
2010-10-14
打赏
举报
回复
一般的大文件,如上百G的文件,是用什么格式的,
现在项目的需求是:
1,远程图像采集 编码 压缩 传输 (这是采集端或服务器端的)linux
2,客户端 图像解码 播放
//现在就是windows下的客户端,测试接收到的mjpeg流播放与保存。
//后期可能会加入Opencv或DirectShow对图像流做一些处理,
//linux客户端,用gtk播放或者QT,用GTK做了些测试
//也想在移动终端做接收图像信号,准备选择android
听海拉拉
2010-10-14
打赏
举报
回复
[Quote=引用 11 楼 dengzikun 的回复:]
引用 10 楼 zouwen198317 的回复:
引用 9 楼 shayla 的回复:
MJPEG Decompressor Filter
是用来进行MJPEG解码的,解码后录制AVI文件会大很多,
MJPEG可以直接录制AVI文件.
楼主首先要明确一下需求
文件越小越好
一般都是录制压缩后的码流.
如果可能,建议放弃AVI,使用WMV,ASF等格式.
AVI录……
[/Quote]
才2G?本来是想做远程监控用的,2G就满足不了需求了。现在是源头还没有做压缩,只是想实现客户端接收、播放和保存。
如果有sample源码,望能提供~~拜谢~~
dengzikun
2010-10-14
打赏
举报
回复
[Quote=引用 10 楼 zouwen198317 的回复:]
引用 9 楼 shayla 的回复:
MJPEG Decompressor Filter
是用来进行MJPEG解码的,解码后录制AVI文件会大很多,
MJPEG可以直接录制AVI文件.
楼主首先要明确一下需求
文件越小越好
[/Quote]
一般都是录制压缩后的码流.
如果可能,建议放弃AVI,使用WMV,ASF等格式.
AVI录制的音视频文件,问题比较多,限制也比较
多.印象中AVI最大能录制到2G,再大就有问题了.
听海拉拉
2010-10-14
打赏
举报
回复
[Quote=引用 9 楼 shayla 的回复:]
MJPEG Decompressor Filter
是用来进行MJPEG解码的,解码后录制AVI文件会大很多,
MJPEG可以直接录制AVI文件.
楼主首先要明确一下需求
[/Quote]
文件越小越好
FFMPEG采集摄像头视频并切片为hls
视频流
一、Windows下面编译ffmpeg 首先需要解决的问题是:在windows下面编译 ffmpeg, 并让其支持dshow, 本人把ffmpeg编译成功了, 但是编译出来的ffmpeg不支持dshow, 在网上找了有文章介绍如何编译ffmpeg让其支持dhsow, 按照文章说的方法试了N次, 终究没有成功。无奈只有找现成的windows下面的exe了。 在这里找到了可用的ffmpeg
视频【解码】原理(播放器原理),音视频同步等
1.视频编码
格式
:H264, VC-1, MPEG-2, MPEG4-ASP (Divx/Xvid), VP8, M
JPEG
等。 2.音频编码
格式
:AAC, AC3, DTS(-HD), TrueHD, MP3/MP2, Vorbis, LPCM 等。 3.字幕编码
格式
:VOB, DVB Subs, PGS, SRT, SSA/ASS, Text。 视频 = 图片、图像(摄像头) + 声...
ffmpeg学习---11.ffmpeg的流媒体服务器与播放器的设置
ffmpeg学习---11.ffmpeg的流媒体服务器与播放器的设置
windows下ffmpeg音视频采集并推流
1. windows下ffmpeg的编译: 可参考:在windows下编译ffmpeg的详细说明 如:./configure --disable-yasm --enable-static --enable-indev=dshow 如果装了yasm,x264,就:./configure --enable-static --enable-inde
VLC 参数详解
用法: vlc [选项] [流] … 您可以在命令行中指定多个流。 它们将被加入播放列表队列。 指定的首个项目将被首先播放。 选项风格: –选项 用于设置程序执行期间的全局选项。 -选项 单字母版本的全局 --选项。 :选项 仅对此选项之前的单条流生效, 且优先级高于先前的设置。 流媒体 MRL 语法: [[协议][/分流]????/]URL[#[标题][:章节][-[标题][:章节]]] [:选项=值 …] 许多全局 --选项 也可作为 MRL 特定的 :选项 使用。 可指定多组 :选项=值。 UR
多媒体/流媒体开发
2,542
社区成员
20,281
社区内容
发帖
与我相关
我的任务
多媒体/流媒体开发
专题开发/技术/项目 多媒体/流媒体开发
复制链接
扫一扫
分享
社区描述
专题开发/技术/项目 多媒体/流媒体开发
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章