| 88 | } |
| 89 | |
| 90 | void SendFrameThread(xop::RtspServer* rtsp_server, xop::MediaSessionId session_id, H264File* h264_file) |
| 91 | { |
| 92 | int buf_size = 2000000; |
| 93 | std::unique_ptr<uint8_t> frame_buf(new uint8_t[buf_size]); |
| 94 | |
| 95 | while(1) { |
| 96 | bool end_of_frame = false; |
| 97 | int frame_size = h264_file->ReadFrame((char*)frame_buf.get(), buf_size, &end_of_frame); |
| 98 | if(frame_size > 0) { |
| 99 | xop::AVFrame videoFrame = {0}; |
| 100 | videoFrame.type = 0; |
| 101 | videoFrame.size = frame_size; |
| 102 | videoFrame.timestamp = xop::H264Source::GetTimestamp(); |
| 103 | videoFrame.buffer.reset(new uint8_t[videoFrame.size]); |
| 104 | memcpy(videoFrame.buffer.get(), frame_buf.get(), videoFrame.size); |
| 105 | rtsp_server->PushFrame(session_id, xop::channel_0, videoFrame); |
| 106 | } |
| 107 | else { |
| 108 | break; |
| 109 | } |
| 110 | |
| 111 | xop::Timer::Sleep(40); |
| 112 | }; |
| 113 | } |
| 114 | |
| 115 | H264File::H264File(int buf_size) |
| 116 | : m_buf_size(buf_size) |