Как исправить mpegts_packetizer_pts_to_ts: недостаточно информации для расчета правильной отметки времени в gstreeamer - PullRequest
0 голосов
/ 06 августа 2020

Сейчас работаю над написанием приложения для радио inte rnet. Я использую gstreamer для всех игр и потоковой передачи. Мой конвейер в настоящее время состоит только из плейбина. Когда я пытаюсь воспроизвести такие URI, как https://mtist.as.smartstream.ne.jp/30062/livestream/playlist.m3u8 или https://mtist.as.smartstream.ne.jp/30068/livestream/playlist.m3u8, я получаю предупреждение WARN mpegtspacketizer mpegtspacketizer. c: 2334: mpegts_packetizer_pts_to_ts: недостаточно информации для правильного расчета отметка времени. Также, когда я пытаюсь воспроизвести эти URI, звук не воспроизводится.

Я пробовал воспроизвести эти URI в vl c, и они действительно работают. Я провел небольшое исследование, как это исправить. Одно сообщение в Интернете предполагает, что использование элемента tsparse с опцией set-timestamps = true set исправит это. Однако при тестировании с gst-launch-1.0 это не работает. (конвейер, используемый с gst-launch-1.0: souphttpsr c! hlsdemux! tsparse set-timestamps = true! tsdemux! aacparse! faad! audioconvert! autoaudiosink)

#include <gstreamer-1.0/gst/gst.h>
#include <stdlib.h>
    
    
/*
    cc `pkg-config --cflags gstreamer-1.0` ./quick_mrb.c -o ./mrb `pkg-config --libs gstreamer-1.0`
    
    to see errors/warnings run with GST_DEBUG=2
*/
int main(int argc, char* argv[]) {
    gst_init(&argc, &argv);
    
    GMainLoop* mainloop;
    GstElement* pipeline;
    
    pipeline = gst_element_factory_make("playbin", NULL);
    
    gst_element_set_state(pipeline, GST_STATE_READY);
    
    g_object_set(pipeline, "uri", "https://mtist.as.smartstream.ne.jp/30062/livestream/playlist.m3u8", NULL);
    
    gst_element_set_state(pipeline, GST_STATE_PLAYING);
    
    mainloop = g_main_loop_new(NULL, FALSE);
    
    g_main_loop_run(mainloop);
    
    gst_element_set_state(pipeline, GST_STATE_NULL);
    
    gst_object_unref(pipeline);
    
    return 0;

}
...