[Libav-user] FFMPEG Implement RTSP Client, high speed playback?

phongtrungchithan87 at gmail.com phongtrungchithan87 at gmail.com
Mon May 31 12:58:27 EEST 2021


Hi Team!

I am writing software to play videos that have been recorded from NVR. I
have completed most of the work, but there is one more feature that allows
the user to change the play speed such as 0.5x, 2x, 4x, 8x ...

I searched the internet all day and still couldn't find any suggestions.
Here is my summary code below.

auto pFormatCtx = avformat_alloc_context();

 

av_dict_set_int(&opts, "rw_timeout", 5000000, 0);

av_dict_set_int(&opts, "tcp_nodelay", 1, 0);

av_dict_set_int(&opts, "stimeout", 10000000, 0);

av_dict_set(&opts, "user_agent", "Mozilla/5.0", 0);

av_dict_set(&opts, "rtsp_transport", "tcp", 0);

av_dict_set(&opts, "rtsp_flags", "prefer_tcp", 0);

av_dict_set_int(&opts, "buffer_size", BUFSIZE, 0);

 

int err = avformat_open_input(&pFormatCtx, fullRtspUri, NULL, &opts);

if(err < 0)

    return;

    

err = avformat_find_stream_info(pFormatCtx, NULL);

if (err < 0)

    return;

pFormatCtx->flags |= AVFMT_FLAG_NONBLOCK;

pFormatCtx->flags |= AVFMT_FLAG_DISCARD_CORRUPT;

pFormatCtx->flags |= AVFMT_FLAG_NOBUFFER;       

av_dump_format(pFormatCtx, 0, fullRtspUri, 0);

    

int videoStreamInd = -1;

for (int i = 0; i < pFormatCtx->nb_streams; i++)

{

    AVStream* stream = pFormatCtx->streams[i];

    if (stream->codecpar->codec_type == AVMEDIA_TYPE_VIDEO)

    {

        if (videoStreamInd == -1)

        {

            videoStreamInd = i;

            break;

        }

    }   

}

 

if (videoStreamInd == -1)

    return; 

auto videoStream = pFormatCtx->streams[videoStreamInd];

 

isRunning = true;

while(isRunning)

{

    ret = av_read_frame(pFormatCtx, avPacket);

    if (ret < 0)

        return; 

 

    if (avPacket->stream_index != videoStreamInd)

        continue;

    

    //Code for render process here............

}

 

I have read through this NVR API documentation and see support for 2x, 4x
speed play as below

 

Play in 2× Speed:
PLAY
rtsp://10.17.133.46:554/ISAPI/streaming/tracks/101?starttime=20170313T230652
Z&endtime=20170314T025706Z RTSP/1.0
CSeq:6
Authorization: Digest username="admin", 
realm="4419b66d2485", 
nonce="a0ecd9b1586ff9461f02f910035d0486", 
uri="rtsp://10.17.133.46:554/ISAPI/streaming/tracks/101?starttime=20170313T2
30652Z&endtime=20170314T025706Z", 
response="fb986d385a7d839052ec4f0b2b70c631"
Session:2049381566;timeout=60
Scale:2.000
User-Agent:NKPlayer-1.00.00.081112
 
RTSP/1.0 200 OK
CSeq: 6
Session: 2049381566
Scale: 2.000
RTP-Info: url=trackID=1;seq=1,url=trackID=2;seq=1
Date: Tue, Mar 14 2017 10:57:24 GMT
 
How to play RTSP video with speeds of 0.5x, 2x, 4x ...? Everyone who can
assist me in this case, I am very grateful.
 
For easy to read code, you can read my question in stackoverflow:
https://stackoverflow.com/questions/67474396/ffmpeg-implement-rtsp-client-hi
gh-speed-playback
 
Many thanks!
Phong

 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://ffmpeg.org/pipermail/libav-user/attachments/20210531/250f1493/attachment.htm>


More information about the Libav-user mailing list