Beispiel #1
0
Bool ts_encode_video_frame(GF_AbstractTSMuxer * ts, AVFrame * encodedFrame, uint8_t * data, int encoded, AVCodecContext * videoCodecContext) {
    if ( ts->muxer )
    {                                //  currentFrameTimeProcessed / 1000;  //
        ts->videoCurrentTSPacket.dts = videoCodecContext->coded_frame->coded_picture_number;
        ts->videoCurrentTSPacket.cts = videoCodecContext->coded_frame->display_picture_number;
        //avr->videoCurrentTSPacket.dts = avr->videoCurrentTSPacket.cts = sysclock;
        //ts->videoCurrentTSPacket.dts = ts->videoCurrentTSPacket.cts = currentFrameTimeProcessed;
        ts->videoCurrentTSPacket.dts = ts->videoCurrentTSPacket.cts = gf_m2ts_get_sys_clock(ts->muxer);
        ts->videoCurrentTSPacket.data = data;
        ts->videoCurrentTSPacket.data_len = encoded;
        ts->videoCurrentTSPacket.flags = GF_ESI_DATA_HAS_CTS | GF_ESI_DATA_HAS_DTS;
        //if (ts_packets_sent == 0) {
        ts->videoCurrentTSPacket.flags|=GF_ESI_DATA_AU_START|GF_ESI_DATA_AU_END ;
        //}
        void_input_ctrl(ts->video, GF_ESI_INPUT_DATA_PULL, NULL);
        sendTSMux(ts);
    }
    return 0;
}
Beispiel #2
0
/**
 * This thread sends the TS packets over the network
 * \param Parameter The GF_AVRedirect pointer
 */
static Bool ts_thread_run(void *param)
{
    GF_Err e;
    GF_AVRedirect * avr = (GF_AVRedirect*) param;
    assert( avr );
    gf_mx_p(avr->tsMutex);
    while (!avr->frameTimeEncoded && avr->is_running) {
        gf_mx_v(avr->tsMutex);
        gf_sleep(1);
        gf_mx_p(avr->tsMutex);
    }
    printf("avr->frameTimeEncoded="LLU"\n", avr->frameTimeEncoded);

    while (avr->is_running) {
        e = sendTSMux(avr);
        gf_mx_v(avr->tsMutex);
        gf_mx_p(avr->tsMutex);
    }
    gf_mx_v(avr->tsMutex);
    return 0;
}