短視訊帶貨原始碼,ffmpeg hls動態切換解析度

zhibo系統開發發表於2022-04-07

短視訊帶貨原始碼,ffmpeg hls動態切換解析度實現的相關程式碼

HLS支援多解析度,在M3U8中會寫明支援的解析度,如下(隨便找的一個例子)

#EXTM3U
#EXT-X-STREAM-INF:BANDWIDTH=375000,RESOLUTION=640x360
360_out.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=750000,RESOLUTION=854x480
480_out.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=2000000,RESOLUTION=1280x720
720_out.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=3500000,RESOLUTION=1920x1080
1080_out.m3u8

切換不同的解析度其實就是選擇不同的AVProgram,通過AVProgram的discard控制是否啟用

typedef struct AVFormatContext {
    ...
    unsigned int nb_programs;
    AVProgram **programs;
    ...
}
typedef struct AVProgram {
    int            id;
    int            flags;
    enum AVDiscard discard;        ///< selects which program to discard and which to feed to the caller
    unsigned int   *stream_index;
    unsigned int   nb_stream_indexes;
    AVDictionary *metadata;
    int program_num;
    int pmt_pid;
    int pcr_pid;
    int pmt_version;
    int64_t start_time;
    int64_t end_time;
    int64_t pts_wrap_reference;    ///< reference dts for wrap detection
    int pts_wrap_behavior;         ///< behavior on wrap detection
} AVProgram;

切換之後使用av_seek_frame到特定的時間點

動態切換需要注意的就是要銜接好,像位元組的西平視訊就比較激進切換之後馬上就用新的解析度,愛奇藝就緩和一些等快取播放完之後再銜接到新解析度上

以上就是短視訊帶貨原始碼,ffmpeg hls動態切換解析度實現的相關程式碼, 更多內容歡迎關注之後的文章


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69978258/viewspace-2885995/,如需轉載,請註明出處,否則將追究法律責任。

相關文章