FFmpeg
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
Examples
File List
Globals
•
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
tools
aviocat.c
Go to the documentation of this file.
1
/*
2
* Copyright (c) 2012 Martin Storsjo
3
*
4
* This file is part of FFmpeg.
5
*
6
* FFmpeg is free software; you can redistribute it and/or
7
* modify it under the terms of the GNU Lesser General Public
8
* License as published by the Free Software Foundation; either
9
* version 2.1 of the License, or (at your option) any later version.
10
*
11
* FFmpeg is distributed in the hope that it will be useful,
12
* but WITHOUT ANY WARRANTY; without even the implied warranty of
13
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14
* Lesser General Public License for more details.
15
*
16
* You should have received a copy of the GNU Lesser General Public
17
* License along with FFmpeg; if not, write to the Free Software
18
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19
*/
20
21
#include <stdio.h>
22
#include <stdlib.h>
23
24
#include "
libavutil/time.h
"
25
#include "
libavformat/avformat.h
"
26
27
static
int
usage
(
const
char
*argv0,
int
ret
)
28
{
29
fprintf(stderr,
"%s [-b bytespersec] input_url output_url\n"
, argv0);
30
return
ret
;
31
}
32
33
int
main
(
int
argc,
char
**argv)
34
{
35
int
bps
= 0,
ret
, i;
36
const
char
*input_url = NULL, *output_url = NULL;
37
int64_t stream_pos = 0;
38
int64_t
start_time
;
39
char
errbuf[50];
40
AVIOContext
*input, *output;
41
42
av_register_all
();
43
avformat_network_init
();
44
45
for
(i = 1; i < argc; i++) {
46
if
(!strcmp(argv[i],
"-b"
)) {
47
bps = atoi(argv[i + 1]);
48
i++;
49
}
else
if
(!input_url) {
50
input_url = argv[i];
51
}
else
if
(!output_url) {
52
output_url = argv[i];
53
}
else
{
54
return
usage
(argv[0], 1);
55
}
56
}
57
if
(!output_url)
58
return
usage
(argv[0], 1);
59
60
ret
=
avio_open2
(&input, input_url,
AVIO_FLAG_READ
, NULL, NULL);
61
if
(
ret
) {
62
av_strerror
(
ret
, errbuf,
sizeof
(errbuf));
63
fprintf(stderr,
"Unable to open %s: %s\n"
, input_url, errbuf);
64
return
1;
65
}
66
ret
=
avio_open2
(&output, output_url,
AVIO_FLAG_WRITE
, NULL, NULL);
67
if
(
ret
) {
68
av_strerror
(
ret
, errbuf,
sizeof
(errbuf));
69
fprintf(stderr,
"Unable to open %s: %s\n"
, output_url, errbuf);
70
goto
fail;
71
}
72
73
start_time =
av_gettime
();
74
while
(1) {
75
uint8_t
buf
[1024];
76
int
n
;
77
n =
avio_read
(input, buf,
sizeof
(buf));
78
if
(n <= 0)
79
break
;
80
avio_write
(output, buf, n);
81
stream_pos +=
n
;
82
if
(bps) {
83
avio_flush
(output);
84
while
((
av_gettime
() - start_time) * bps /
AV_TIME_BASE
< stream_pos)
85
av_usleep
(50 * 1000);
86
}
87
}
88
89
avio_flush
(output);
90
avio_close
(output);
91
92
fail:
93
avio_close
(input);
94
avformat_network_deinit
();
95
return
ret
? 1 : 0;
96
}
Generated on Sat Jan 25 2014 19:52:08 for FFmpeg by
1.8.2