Agora-Media-Source-Windows 编译错误


你好,我在编译Agora-Media-Source-Windows这个工程时,遇到了如图所示的错误

error C2061: 语法错误: 标识符“LPDIRECT3D”
error C2061: 语法错误: 标识符“LPDIRECT3DDEVICE”
error C2061: 语法错误: 标识符“LPDIRECT3D”
error C2061: 语法错误: 标识符“LPDIRECT3DDEVICE”
error C2061: 语法错误: 标识符“LPDIRECT3D2”
error C2061: 语法错误: 标识符“LPDIRECT3DDEVICE2”
error C2061: 语法错误: 标识符“LPDIRECT3D”
error C2061: 语法错误: 标识符“LPDIRECT3DDEVICE”
error C2061: 语法错误: 标识符“LPDIRECT3D2”
error C2061: 语法错误: 标识符“LPDIRECT3DDEVICE2”
error C2061: 语法错误: 标识符“LPDIRECT3DVIEWPORT”
error C2061: 语法错误: 标识符“LPDIRECT3DVIEWPORT”

尝试安装最新的DirectX,以及定义宏#define D3DRM_H,均无法解决,请问我应该从哪方面入手呢?

可能有用的信息:
操作系统:Win10 64位,18362
Windows SDK:10.0.17134.0
VS版本:VS2017

稍等,我测试一下这个 demo。你先检查一下导入到 AgoraMediaSource 文件夹中的 sdk 是 64位的么?

你安装这个试下:https://www.microsoft.com/en-us/download/details.aspx?id=8109

确定是64位的,AgoraTutorial这个工程可以编译成功

感谢回复。我刚才下载安装了这个版本,但好像仍然不起作用

我注意到【配置属性】-【VC++目录里面】有$(DXSDK_DIR)include字样,想请问这个工程对于DirectX版本有要求吗?我当前版本是DirectX12

我重试重新定义LPDIRECT3D等变量,已经解决上述问题,再次编译又发现另一个错误

我看到代码中有如下提示

// xaudio 2.7 only!!!!!

请问此工程是不是对DX的版本有要求?
我目前的操作系统:win10
DX版本:12

这个 demo 用的是 Directx SDK 2010 june 这个版本。报错是因为没有找到对应的路径。

我准备使用自采集视频流方式,也就是推送ipc的摄像头的视频流。这样的话是不是可以不用capture模块,也就是说可以不用DX?
如果是这样,我准备删除相关代码试试?
期待您的及时回复,谢谢。

刚才测了一下,应该用这个地址的 Directx:https://www.microsoft.com/en-us/download/details.aspx?id=6812

如果你们是需要推送ip摄像头的视频流,那么建议直接利用 ffmpeg 将 ipc 的 rtsp 流转换为 rtmp 流,然后通过 sdk 提供的 addInjectStreamUrl 方法向直播频道内导入指定在线媒体流:
https://docs.agora.io/cn/Interactive%20Broadcast/inject_stream_android?platform=Android

这条建议非常有用,我研究一下,谢谢。

好的,可以参考下怎么转换视频流格式:
http://blog.sina.com.cn/s/blog_6e09b50f0102w6j1.html

我刚才看了一下,我并不需要这种方案,我需要浏览器端无插件的方案。
所以我还是继续回到上面这个demo吧。请问,你们有关于

setExternalVideoSource
pullVideoFrame

这两个接口的DEMO吗?

浏览器端?你们不是 windows native 端么?能否具体描述下你们的业务场景?

好的,我简单描述一下。我们想做一整套无插件的视频解决方案,包括推流端和播放端。
推流端是windows应用程序,播放端使用浏览器(不用Flash)。
预估的方案如下:

  1. 推流端(Windows)通过RTSP协议获取IPC的视频流(H.264),调用声网SDK【PushVideoFrame】.
  2. 播放端使用声网Web API观看视频。

不知道能否满足。谢谢。

但是 PushVideoFrame 方法只支持这些格式的视频帧呀。你们是打算自己转换 IPC 的视频流格式么?

发送端使用 addPublishStreamUrl 方法,web 接收端也并不需要装插件的呀,只要使用 Agora Web SDK 加入同一个频道,就可以接收视频了。

PushVideoFrame 方法自采集的 demo,就是你在跑的这个 demo 呀:https://github.com/AgoraIO/Advanced-Video/tree/master/Capture-Raw-Video-Data/Agora-Media-Source-Windows

感谢回复。

  1. 这些视频格式确实不满足我的需求,我原以为支持Push H.264数据的。那,后续你们会不会支持H.264的压缩数据呢?
  2. addPublishStreamUrl方法,是否要求电脑安装Flash插件呀?我看你们的文档上写的是通过RTMP方式播放视频。在我的认知里,如果是有RTMP协议,必须要求电脑安装Flash插件的吧。
  3. 这个demo里面没有调用PushVideoFrame这个函数,我正在研究文档。

以上。

1、暂时没有计划支持额
2、不需要装flash插件的。因为导入 rtmp 流后,sdk 会对其重新编码,web 端收到的流格式不是 rtmp 格式的哦。

好的,那我再看一下 Live-Streaming-Injection 这个demo,非常感谢。