• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ios - 如何使用 libRTMP.a 将 AMFObject 发送到服务器

[复制链接]
菜鸟教程小白 发表于 2022-12-13 06:24:39 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我正在尝试使用 RTMP 开发聊天功能,所以我得到并编译了 libRTMP。

如何将 NSDictionary 发送到服务器?

我用的是AMFObject,但是Xcode编译的时候出错了。

    RTMPPacket packet;
    char pbuf[1024];
    char *pend = pbuf + sizeof(pbuf);
    char *enc;
    //块流ID为4
    packet.m_nChannel = 0x04;   /* source channel (invoke) */
    packet.m_headerType = RTMP_PACKET_SIZE_LARGE;
    packet.m_packetType = RTMP_PACKET_TYPE_INVOKE;  /* INVOKE */
    packet.m_nTimeStamp = (uint32_t)[[NSDate date] timeIntervalSince1970];
    //流ID
    packet.m_nInfoField2 = sendRtmp->m_stream_id;
    packet.m_hasAbsTimestamp = 0;
    packet.m_body = pbuf + RTMP_MAX_HEADER_SIZE;
    //指向Chunk的负载
    enc = packet.m_body;

    /*组装方法*/
    AVal methodName;
    NSString *methodNameString = @"login1";
    methodName.av_val = (char*)[methodNameString UTF8String];
    methodName.av_len = (int)[[methodNameString dataUsingEncoding:NSUTF8StringEncoding] length];
    //对“publish”字符串进行AMF编码
    enc = AMF_EncodeString(enc, pend, &methodName);
    enc = AMF_EncodeNumber(enc, pend, ++sendRtmp->m_numInvokes);
    *enc++ = AMF_NULL;

    struct AMFObject *object = (struct AMFObject *)malloc(sizeof(struct AMFObject));
    struct AMFObjectProperty *property = (struct AMFObjectProperty *)malloc(sizeof(struct AMFObjectProperty));
    /*key*/
    AVal key;
    NSString *keyString = @"name";
    key.av_val = (char*)[keyString UTF8String];
    key.av_len = (int)[[keyString dataUsingEncoding:NSUTF8StringEncoding] length];

    /*value*/
    AVal value;
    NSString *valueString = @"liubo";
    value.av_val = (char*)[valueString UTF8String];
    value.av_len = (int)[[valueString dataUsingEncoding:NSUTF8StringEncoding] length];
    AMFProp_SetName(property, &key);
    AMFProp_SetString(property, &value);
    AMF_AddProp(object, property);
    AMF_Encode(object, enc, pend);
    enc = AMF_EncodeNumber(enc, pend, ++sendRtmp->m_numInvokes);
    *enc++ = AMF_NULL;

    free(object);
    free(property);

    if (!enc)
        return;

    packet.m_nBodySize = enc - packet.m_body;

    int code = RTMP_SendPacket(sendRtmp, &packet, TRUE);
    NSLog(@"发送消息完毕:%@  返回值:%d",message,code);

Xcode编译时出现错误:

enter image description here



Best Answer-推荐答案


我在 iOS 上发现了与 AMFProp_SetString 相同的错误。我以这种方式添加属性:

AMFObject object;
object.o_props = malloc(sizeof(AMFObjectProperty *)); // Needs a malloc for AMF_AddProp

AMFObjectProperty prop;

AVal name = AVC("test");
AVal nothing = AVC("");

prop.p_type = AMF_STRING;
prop.p_vu.p_aval = name;
prop.p_name = nothing;

object.o_num = 0;

AMF_AddProp(&object, &prop);

希望对你有帮助。

关于ios - 如何使用 libRTMP.a 将 AMFObject 发送到服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29693711/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap