一个流媒转换的问题?期待高手能帮解决

ycg_893 2010-05-18 01:26:35
调用Windows Media 编码器的API进行流媒格式转成wmv格式.
1、有些格式能正常转换,无任何错误提示。
2、同一格式有的能正常转换,有的无法转换。无法转换的用自带的Windows Media 编码器可以转换。而调用API却抛出 "AccessViolationException"错误,提示"尝试读取或写入受保护的内存。这通常指示其他内存已损坏。"
3、代码:

private WMEncoder ConvertEncoder;

private void button2_Click(object sender, EventArgs e)
{
try
{
ConvertEncoder = new WMEncoder();
IWMEncSourceGroupCollection SrcGrpColl = ConvertEncoder.SourceGroupCollection;
IWMEncSourceGroup SrcGrp = SrcGrpColl.Add("SG_1");
IWMEncSource SrcAud = SrcGrp.AddSource(WMENC_SOURCE_TYPE.WMENC_AUDIO);
SrcAud.SetInput("D:\\a\\3.avi", "", "");


IWMEncVideoSource2 SrcVid = (IWMEncVideoSource2)SrcGrp.AddSource(WMENC_SOURCE_TYPE.WMENC_VIDEO);
SrcVid.SetInput("D:\\a\\3.avi", "", "");
SrcVid.CroppingBottomMargin = 2;
SrcVid.CroppingTopMargin = 2;
SrcVid.CroppingLeftMargin = 2;
SrcVid.CroppingRightMargin = 2;

IWMEncFile File = ConvertEncoder.File;
File.LocalFileName = "D:\\a\\3.wmv";

WMEncProfile2 Pro2 = new WMEncProfile2();
Pro2.LoadFromFile("D:\\a\\0.prx");
SrcGrp.set_Profile(Pro2);



//IWMEncDisplayInfo Descr = ConvertEncoder.DisplayInfo;
//Descr.Author = Info.AcquisitionUserName;
//Descr.Copyright = Info.OrganizeName + " 版权所有";
//Descr.Description = Info.AcquisitionExplain;
//Descr.Rating = "无";
//Descr.Title = Info.FileName;
//IWMEncAttributes Attr = ConvertEncoder.Attributes;
//Attr.Add("URL", "IP address");
ConvertEncoder.PrepareToEncode(true);
ConvertEncoder.Start();
}
catch (Exception ex)
{

MessageBox.Show(ex.Message);
}
}



...全文
165 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
ycg_893 2010-05-20
  • 打赏
  • 举报
回复
期待高手
flythere 2010-05-20
  • 打赏
  • 举报
回复
不了解,帮顶,别沉了
mayonglong 2010-05-20
  • 打赏
  • 举报
回复
帮顶~
qingYun1029 2010-05-20
  • 打赏
  • 举报
回复
这是做视频用到的技术吗???

无奈。。。
ycg_893 2010-05-18
  • 打赏
  • 举报
回复
有没有知道的呀!
huminghua 2010-05-18
  • 打赏
  • 举报
回复
。。。。。。。。。。。
jianshao810 2010-05-18
  • 打赏
  • 举报
回复
我也在学习,跟着楼主学习下
lunat 2010-05-18
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 ycg_893 的回复:]

我怕是安全代码问题,因此用VB6编写来试一下,出错为:
VB6.EXE 中的 0x08baab56 处未处理的异常: 0xC0000005: 读取位置 0x000000b8 时发生访问冲突
[/Quote]

这个是使用COM时很常见的错误,你检查一下,往COM传递的参数,特别是一些没有指定类型的参数(比如 object any 等等)
quanwangcheshen 2010-05-18
  • 打赏
  • 举报
回复
不是很清楚,帮着顶一下!生成一个Windows Media自定义控件还会做,直接在COM组件里添加主可以了.
qiqishardgel 2010-05-18
  • 打赏
  • 举报
回复
没接触过,帮顶!
liuyu520hong 2010-05-18
  • 打赏
  • 举报
回复
不懂,帮顶!
camperer 2010-05-18
  • 打赏
  • 举报
回复
别误会,是说我自己一窍不通
camperer 2010-05-18
  • 打赏
  • 举报
回复
一窍不通
做webform的路过。。
a854468521 2010-05-18
  • 打赏
  • 举报
回复
我也想学习流媒体,帮顶。
ycg_893 2010-05-18
  • 打赏
  • 举报
回复
VB6代码

Private Sub Command1_Click()
On Error GoTo ErrorHandler
Dim ConvertEncoder As WMEncoder
Dim SrcGrpColl As IWMEncSourceGroupCollection
Dim SrcGrp As IWMEncSourceGroup
Dim SrcAud As IWMEncSource
Dim SrcVid As IWMEncVideoSource2
Dim File As IWMEncFile
Dim Pro2 As WMEncProfile2


Set ConvertEncoder = New WMEncoder
Set SrcGrpColl = ConvertEncoder.SourceGroupCollection
Set SrcGrp = SrcGrpColl.Add("SG_1")
Set SrcAud = SrcGrp.AddSource(WMENC_AUDIO)
SrcAud.SetInput "D:\\a\\3.avi"

Set SrcVid = SrcGrp.AddSource(WMENC_VIDEO)
SrcVid.SetInput "D:\\a\\3.avi"
SrcVid.CroppingBottomMargin = 2
SrcVid.CroppingTopMargin = 2
SrcVid.CroppingLeftMargin = 2
SrcVid.CroppingRightMargin = 2

Set File = ConvertEncoder.File
File.LocalFileName = "D:\\a\\3.wmv"

Set Pro2 = New WMEncProfile2
Pro2.LoadFromFile "D:\\a\\0.prx"
SrcGrp.Profile = Pro2

ConvertEncoder.PrepareToEncode True

ConvertEncoder.Start


Exit Sub
ErrorHandler:
MsgBox Err.Description
End Sub

ycg_893 2010-05-18
  • 打赏
  • 举报
回复
我怕是安全代码问题,因此用VB6编写来试一下,出错为:
VB6.EXE 中的 0x08baab56 处未处理的异常: 0xC0000005: 读取位置 0x000000b8 时发生访问冲突

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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