AnyChat技术支持论坛

标题: 外部视频输入 [打印本页]

作者: hk92    时间: 2015-12-21 15:16
标题: 外部视频输入
您好,想输入H.264编码后的视频,在初始化的时候AnyChatCoreSDK.SetInputVideoFormat(AnyChatCoreSDK.PixelFormat.BRAC_PIX_FMT_H264,320,240,25,0)其中并没有AnyChatCoreSDK.PixelFormat.BRAC_PIX_FMT_H264这个类型,需要
  1. public enum PixelFormat{
  2.                 BRAC_PIX_FMT_RGB24 = 0,                                                ///< Packed RGB 8:8:8, 24bpp, RGBRGB...(MEDIASUBTYPE_RGB24)
  3.                 BRAC_PIX_FMT_RGB32,                                                        ///< 对应于:MEDIASUBTYPE_RGB32,Packed RGB 8:8:8, 32bpp, (msb)8A 8R 8G 8B(lsb), in cpu endianness
  4.                 BRAC_PIX_FMT_YV12,                                                        ///< 对应于:MEDIASUBTYPE_YV12,Planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y samples)
  5.                 BRAC_PIX_FMT_YUY2,                                                        ///< 对应于:MEDIASUBTYPE_YUY2,Packed YUV 4:2:2, 16bpp, Y0 Cb Y1 Cr
  6.                         BRAC_PIX_FMT_YUV420P,                                                ///< Planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y samples)
  7.                         BRAC_PIX_FMT_RGB565,                                                ///< 对应于:MEDIASUBTYPE_RGB565
  8.                         BRAC_PIX_FMT_RGB555,                                                ///< 对应于:MEDIASUBTYPE_RGB555
  9.         }
复制代码
这里面加上这个类型吗?

作者: 佰锐科技-李永星    时间: 2015-12-21 15:39
您好,你加上也不行的,你只能按枚举里有的设置。只能一帧一帧输入
作者: hk92    时间: 2015-12-21 15:56
本帖最后由 hk92 于 2015-12-21 15:59 编辑
佰锐科技-李永星 发表于 2015-12-21 15:39
您好,你加上也不行的,你只能按枚举里有的设置。只能一帧一帧输入

那我想输入经过H.264编码后的视频该怎么办呢?比如我的D盘有一个1.MP4的视频,我想通过anychat的外部视频输入方式传送过去,而不是文件传送的方式,希望得到您的解答。
作者: 佰锐科技-陈伟    时间: 2015-12-21 16:06
hk92 发表于 2015-12-21 15:56
那我想输入经过H.264编码后的视频该怎么办呢?比如我的D盘有一个1.MP4的视频,我想通过anychat的外部视频 ...

您好 可以参考 开放视频编码(H.264)编解码数据输入、输出接口
作者: hk92    时间: 2015-12-21 16:09
佰锐科技-陈伟 发表于 2015-12-21 16:06
您好 可以参考 开放视频编码(H.264)编解码数据输入、输出接口

您好,在public enum PixelFormat{}这个枚举格式视频中,没有BRAC_PIX_FMT_H264这个视频格式
作者: 佰锐科技-李永星    时间: 2015-12-21 16:30
hk92 发表于 2015-12-21 16:09
您好,在public enum PixelFormat{}这个枚举格式视频中,没有BRAC_PIX_FMT_H264这个视频格式

您好,你需要自己解mp4然后以帧为输入单位,输入
作者: hk92    时间: 2015-12-21 16:31
佰锐科技-李永星 发表于 2015-12-21 15:39
您好,你加上也不行的,你只能按枚举里有的设置。只能一帧一帧输入

您好,c#可以进行外部视频的输入吗?
作者: hk92    时间: 2015-12-21 16:32
佰锐科技-李永星 发表于 2015-12-21 16:30
您好,你需要自己解mp4然后以帧为输入单位,输入

您好,您可以举一个具体一点的DEMO吗(c#)?
作者: 佰锐科技-陈伟    时间: 2015-12-21 16:55
hk92 发表于 2015-12-21 16:32
您好,您可以举一个具体一点的DEMO吗(c#)?

您好 C#是支持的,目前暂时没有这样的demo
作者: 佰锐科技-李永星    时间: 2015-12-21 17:05
hk92 发表于 2015-12-21 16:32
您好,您可以举一个具体一点的DEMO吗(c#)?

您好,稍等,我请我们工程师看能不能找到Demo
作者: hk92    时间: 2015-12-21 19:25
佰锐科技-李永星 发表于 2015-12-21 17:05
您好,稍等,我请我们工程师看能不能找到Demo

您好,我就是想把编码后生成的H.264通过anychat再传送出去(c#),您看您能找到相关的demo吗?
作者: 佰锐科技-李永星    时间: 2015-12-22 14:02
hk92 发表于 2015-12-21 19:25
您好,我就是想把编码后生成的H.264通过anychat再传送出去(c#),您看您能找到相关的demo吗?

您好,我们有一个C++,读mp4的调用外部音视频输入的demo,请您提供一个邮箱,我发给你。
作者: hk92    时间: 2015-12-22 15:43
本帖最后由 hk92 于 2015-12-22 15:50 编辑
佰锐科技-李永星 发表于 2015-12-22 14:02
您好,我们有一个C++,读mp4的调用外部音视频输入的demo,请您提供一个邮箱,我发给你。

您好,我的邮箱是zhangda_990@163.com
我还有一个问题,就是我在c#里面通过摄像头采集的数据,经过视频回调函数导出了yuv,存贮在了D:\1.yuv。我想,在官方给的Demo里面(anychatCSharpDemo),是会通过这样一个过程摄像头采集数据--->YUV--->h.264--->传给对方。如果我把导出的YUV生成了h.264,通过c#(anychatCSharpDemo)这个里面的方法或者接口传给对方,这样可行吗?

作者: hk92    时间: 2015-12-22 16:16
佰锐科技-陈伟 发表于 2015-12-21 16:06
您好 可以参考 开放视频编码(H.264)编解码数据输入、输出接口

您好,开放视频编码(H.264)编解码数据输入、输出接口是否也对c#进行了支持?
作者: 佰锐科技-李永星    时间: 2015-12-22 16:35
hk92 发表于 2015-12-22 16:16
您好,开放视频编码(H.264)编解码数据输入、输出接口是否也对c#进行了支持?

您好,源码已发送到你的邮箱
作者: hk92    时间: 2015-12-22 16:47
佰锐科技-李永星 发表于 2015-12-22 16:35
您好,源码已发送到你的邮箱

您好,邮箱中没有收到您的源码,麻烦您再给我发一份行吗?我的的邮箱是

捕获.JPG (9.03 KB, 下载次数: 3128)

捕获.JPG

作者: 佰锐科技-李永星    时间: 2015-12-23 09:00
hk92 发表于 2015-12-22 16:47
您好,邮箱中没有收到您的源码,麻烦您再给我发一份行吗?我的的邮箱是

您好,重新发了。
作者: hk92    时间: 2015-12-23 09:40
佰锐科技-李永星 发表于 2015-12-23 09:00
您好,重新发了。

您好,你看这样的方案可不可行,我用c#(anychatCSharpDemo)将摄像头采集的数据利用视频数据回调函数导出到D盘,保存为YUV格式,然后经过数据处理,变成H.264格式。不知道c#支不支持将H.264再导入进anychat进行传输,在对方收到H.264视频后进行显示(c#anychatCSharpDemo)?如果c#不支持H.264的再次导入进anychat,我是否可以利用这样的一个方案,将c#摄像头采集的YUV处理后,变成H.264,在c#里面启动第三方程序(也就是anychat里面c++外部视频demo),然后利用c++的外部视频可以输入H.264格式的,进行传输到另一端(B端)。在B端(c#anychatCSharpDemo)也调用第三方程序,进行显示呢?
作者: admin    时间: 2015-12-23 11:09
不知道c#支不支持将H.264再导入进anychat进行传输
支持的,外部视频输入接口支持YUV、RGB以及H.264数据的输入。
作者: hk92    时间: 2015-12-23 11:39
admin 发表于 2015-12-23 11:09
支持的,外部视频输入接口支持YUV、RGB以及H.264数据的输入。

但是在c#里面
  1. public enum PixelFormat{
  2.                 BRAC_PIX_FMT_RGB24 = 0,                                                ///< Packed RGB 8:8:8, 24bpp, RGBRGB...(MEDIASUBTYPE_RGB24)
  3.                 BRAC_PIX_FMT_RGB32,                                                        ///< 对应于:MEDIASUBTYPE_RGB32,Packed RGB 8:8:8, 32bpp, (msb)8A 8R 8G 8B(lsb), in cpu endianness
  4.                 BRAC_PIX_FMT_YV12,                                                        ///< 对应于:MEDIASUBTYPE_YV12,Planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y samples)
  5.                 BRAC_PIX_FMT_YUY2,                                                        ///< 对应于:MEDIASUBTYPE_YUY2,Packed YUV 4:2:2, 16bpp, Y0 Cb Y1 Cr
  6.                         BRAC_PIX_FMT_YUV420P,                                                ///< Planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y samples)
  7.                         BRAC_PIX_FMT_RGB565,                                                ///< 对应于:MEDIASUBTYPE_RGB565
  8.                         BRAC_PIX_FMT_RGB555,                                                ///< 对应于:MEDIASUBTYPE_RGB555
  9.            
  10.         }
复制代码
这里面没有H.264格式,是否加入BRAC_PIX_FMT_H264,就能解决?
作者: 佰锐科技-李永星    时间: 2015-12-23 11:44
本帖最后由 佰锐科技-李永星 于 2015-12-23 11:46 编辑
hk92 发表于 2015-12-23 11:39
但是在c#里面这里面没有H.264格式,是否加入BRAC_PIX_FMT_H264,就能解决?

是的,你加到枚举里,参考C++头文件中定义:
  1. // 视频图像格式定义
  2. enum BRAC_PixelFormat{
  3.         BRAC_PIX_FMT_RGB24 = 0,                  ///< Packed RGB 8:8:8, 24bpp, RGBRGB...(MEDIASUBTYPE_RGB24)
  4.         BRAC_PIX_FMT_RGB32,                        ///< 对应于:MEDIASUBTYPE_RGB32,Packed RGB 8:8:8, 32bpp, (msb)8A 8R 8G 8B(lsb), in cpu endianness
  5.         BRAC_PIX_FMT_YV12,                          ///< 对应于:MEDIASUBTYPE_YV12,Planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y samples)
  6.         BRAC_PIX_FMT_YUY2,                          ///< 对应于:MEDIASUBTYPE_YUY2,Packed YUV 4:2:2, 16bpp, Y0 Cb Y1 Cr
  7.         BRAC_PIX_FMT_YUV420P,                    ///< Planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y samples)
  8.         BRAC_PIX_FMT_RGB565,                     ///< 对应于:MEDIASUBTYPE_RGB565
  9.         BRAC_PIX_FMT_RGB555,                     ///< 对应于:MEDIASUBTYPE_RGB555
  10.         BRAC_PIX_FMT_NV12,                         ///< Planar YUV 4:2:0, 12bpp, Two arrays, one is all Y, the other is U and V
  11.         BRAC_PIX_FMT_NV21,                         ///< Planar YUV 4:2:0, 12bpp, Two arrays, one is all Y, the other is V and U
  12.         BRAC_PIX_FMT_NV16,                        ///< YUV422SP
  13.         
  14.         BRAC_PIX_FMT_MJPEG = 200,
  15.         BRAC_PIX_FMT_H264,
  16. };
复制代码

作者: hk92    时间: 2015-12-23 13:50
本帖最后由 hk92 于 2015-12-23 14:04 编辑
佰锐科技-李永星 发表于 2015-12-23 11:44
是的,你加到枚举里,参考C++头文件中定义:

您好,您能提供一个将H.264写入内存的方法吗(c#)?
作者: 佰锐科技-李永星    时间: 2015-12-23 14:23
hk92 发表于 2015-12-23 13:50
您好,您能提供一个将H.264写入内存的方法吗(c#)?

您好,上次发给你的mp4代码里有,需要您自己转成C#
作者: hk92    时间: 2015-12-23 14:32
佰锐科技-李永星 发表于 2015-12-23 14:23
您好,上次发给你的mp4代码里有,需要您自己转成C#

您好,外部视频输入之后,是只能在本地播放,还是可以传送给对方显示呢?
作者: admin    时间: 2015-12-23 14:34
如果是输入H.264视频,则不可以在本地播放,只可以传给对方显示。
作者: hk92    时间: 2015-12-23 14:39
admin 发表于 2015-12-23 14:34
如果是输入H.264视频,则不可以在本地播放,只可以传给对方显示。

好的,这个正是需要的。
作者: hk92    时间: 2015-12-23 15:44
佰锐科技-李永星 发表于 2015-12-23 14:23
您好,上次发给你的mp4代码里有,需要您自己转成C#

您好;
  1. FileStream fs1 = new FileStream(@"D:\01.264", FileMode.Open);

  2.                     //获取文件大小
  3.                     long size = fs1.Length;

  4.                     byte[] array = new byte[size];

  5.                     //将文件读到byte数组中
  6.                     fs1.Read(array, 0, array.Length);
  7.                   
  8.                      IntPtr buffer = Marshal.AllocHGlobal(array.Length);
  9.                      Marshal.Copy(array, 0, buffer, array.Length);

  10.                     fs1.Close();

  11.                     int roomid = m.WParam.ToInt32();
  12.                     Print("进入房间成功,房间编号为:" + roomid.ToString());
  13.                     m_RoomID = roomid;
  14.                     int ret = AnyChatCoreSDK.SetVideoPos(-1, pnl_local.Handle, 0, 0, pnl_local.Width, pnl_local.Height);
  15.                    // ret = AnyChatCoreSDK.UserCameraControl(-1, true);
  16.                     ret = AnyChatCoreSDK.InputVideoData(buffer,320*240*3,0);
  17.                     MessageBox.Show(ret.ToString());
  18.                     ret = AnyChatCoreSDK.UserSpeakControl(-1, true);
  19.                    // int ret1 = AnyChatCoreSDK.InputVideoData();
  20.                 }
复制代码
这个ret = AnyChatCoreSDK.InputVideoData(buffer,320*240*3,0);这里的ret为20;函数功能不允许,这个是怎么回事呢?
作者: 佰锐科技-李永星    时间: 2015-12-23 16:14
hk92 发表于 2015-12-23 15:44
您好;这个ret = AnyChatCoreSDK.InputVideoData(buffer,320*240*3,0);这里的ret为20;函数功能不允许, ...

您好,请你把代码发过来,我这边测试一下。
作者: hk92    时间: 2015-12-23 16:37
佰锐科技-李永星 发表于 2015-12-23 16:14
您好,请你把代码发过来,我这边测试一下。

您好,我已经把代码发送至您的邮箱,请查收。
作者: hk92    时间: 2015-12-24 12:41
佰锐科技-李永星 发表于 2015-12-23 16:14
您好,请你把代码发过来,我这边测试一下。

您好,您那边测试的结果出来了吗?




欢迎光临 AnyChat技术支持论坛 (http://bbs.anychat.cn/) Powered by Discuz! X3