Zoozy

Zoozy

V2EX member #5250, joined on 2011-01-14 22:26:48 +08:00
  •   You need to sign in to view this topic
    NULL
    Per Zoozy's settings, the topics list is hidden
    Deals info, including closed deals, is not hidden
    Zoozy's recent replies
    支持一个
    Apr 14, 2023
    Replied to a topic by wodong 程序员 大疆 PSDK 获取视频流技术求助
    在这个函数中,您需要使用 RTMP 协议将 H264 编码的裸流数据推送到 RTMP 服务器上,以便在视频播放器中显示。

    以下是可能的实现方式:

    ```c++
    #include <iostream>
    #include <cstring>
    #include <cstdlib>
    #include <cstdio>
    #include <ctime>
    #include <cmath>
    #include <algorithm>
    #include <sstream>

    #include "librtmp/rtmp.h"

    #define RTMP_HEAD_SIZE (sizeof(RTMPPacket)+RTMP_MAX_HEADER_SIZE)

    static void LiveviewConvertH264ToRgbCallback(E_DjiLiveViewCameraPosition position, const uint8_t* buf, uint32_t bufLen) {

    static RTMP *rtmp = NULL;
    static char *url = "rtmp://your-rtpm-server-url.com/live/stream";
    static int fps = 30;
    static int width = 1280;
    static int height = 720;

    if (!rtmp) {
    rtmp = RTMP_Alloc();
    RTMP_Init(rtmp);
    rtmp->Link.timeout = 5; // Timeout in seconds
    RTMP_SetupURL(rtmp, url);
    RTMP_EnableWrite(rtmp);
    RTMP_SetBufferMS(rtmp, 3600*1000); // Set the buffer size to 1 hour
    if (!RTMP_Connect(rtmp, NULL) || !RTMP_ConnectStream(rtmp, 0)) {
    RTMP_Free(rtmp);
    rtmp = NULL;
    std::cerr << "Failed to connect to RTMP server" << std::endl;
    return;
    }
    }

    // Create and initialize RTMP packet
    RTMPPacket packet = {0};
    RTMPPacket_Alloc(&packet, bufLen + RTMP_HEAD_SIZE);

    packet.m_packetType = RTMP_PACKET_TYPE_VIDEO;
    packet.m_nChannel = 0x04;

    // Fill in the packet headers
    char *data_ptr = packet.m_body;
    data_ptr[0] = 0x17; // Video codec id: 7 (AVC)
    data_ptr[1] = 0x01; // AVCPacketType: 1 (NALU without length field)
    *((uint32_t *)(data_ptr + 2)) = 0x01000000; // Composition time offset: 0
    std::memcpy(data_ptr + 6, buf, bufLen);

    packet.m_nTimeStamp = RTMP_GetTime() - RTMP_GetStartTime(rtmp);
    packet.m_nBodySize = bufLen + 5;

    if (!RTMP_SendPacket(rtmp, &packet, TRUE)) {
    std::cerr << "Failed to send packet to RTMP server" << std::endl;
    }

    // Free memory used by packet
    RTMPPacket_Free(&packet);
    }
    ```
    在此实现中,我们使用 librtmp 库来完成 RTMP 协议的推流。在函数中的第一个参数 position 未被使用,因为它不需要对这个问题产生任何影响。

    该代码假定你已经熟练掌握了 RTMP 协议和使用方法,并且服务器配置正确。

    by gpt
    "hms://redirect_url"
    curl ip.sb
    已经两个小时了 售后 VIP 群没人理 服气
    @ArthurKing 请原谅我。。笑出声。。。。
    如果可以的话能说说 toB 怎么盈利的吗?
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1075 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 10ms · UTC 23:01 · PVG 07:01 · LAX 16:01 · JFK 19:01
    ♥ Do have faith in what you're doing.