giv*_*ivi 13 youtube iphone ffmpeg gdata-api rtsp
我正在尝试从YouTube获取的RTSP流中读取视频帧.这是我的测试视频的链接:
RTSP://v8.cache5.c.youtube.com/CiILENy73wIaGQkJlrXMiAG8BxMYDSANFEgGUgZ2aWRlb3MM/0/0/0/video.3gp
如果我正在从本地文件中读取帧 - 一切都很好,但是当从流中读取它们时,除了大量的工件之外什么都没有.我已经google了一下,发现UDP数据包可能存在问题,切换到TCP可能有所帮助,但我真的找不到可以改变它的地方.
这是读取框架的功能:
bool nextFrame(AVFormatContext *pFormatCtx, AVCodecContext *pCodecCtx, int videoStream, AVFrame *pFrame) { AVPacket packet;
int frameFinished = 0;
while( !frameFinished && av_read_frame(pFormatCtx, &packet) >= 0 ) {
// Is this a packet from the video stream?
if( packet.stream_index == videoStream ) {
// Decode video frame
avcodec_decode_video2(pCodecCtx, pFrame, &frameFinished, &packet);
}
// Free the packet that was allocated by av_read_frame
av_free_packet(&packet);
}
return frameFinished!=0;
}
Run Code Online (Sandbox Code Playgroud)
我在日志中也收到了很多错误消息:
[h263 @ 0x7804c00] warning: first frame is no keyframe
[h263 @ 0x7804c00] illegal ac vlc code at 6x1
[h263 @ 0x7804c00] Error at MB: 18
[h263 @ 0x7804c00] concealing 99 DC, 99 AC, 99 MV errors
[h263 @ 0x7804c00] I cbpy damaged at 10 4
[h263 @ 0x7804c00] Error at MB: 58
[h263 @ 0x7804c00] concealing 99 DC, 99 AC, 99 MV errors
[h263 @ 0x7804c00] I cbpy damaged at 6 6
[h263 @ 0x7804c00] Error at MB: 78
[h263 @ 0x7804c00] concealing 76 DC, 76 AC, 76 MV errors
[h263 @ 0x7804c00] I cbpy damaged at 5 5
[h263 @ 0x7804c00] Error at MB: 65
[h263 @ 0x7804c00] concealing 88 DC, 88 AC, 88 MV errors
[h263 @ 0x7804c00] illegal ac vlc code at 7x5
[h263 @ 0x7804c00] Error at MB: 67
[h263 @ 0x7804c00] concealing 86 DC, 86 AC, 86 MV errors
Run Code Online (Sandbox Code Playgroud)
...等等
编辑:这是99.9%的UDP-TCP问题.我找到了这个链接:
RTSP://195.200.199.8/mpeg4/media.amp
这是在线提供的一些测试相机.它与工件流.但是如果它有参数'tcp'并且我使用它
RTSP://195.200.199.8/mpeg4/media.amp TCP
一切都没有文物.
所以要纠正我的问题:有没有办法迫使YouTube或ffmpeg使用TCP?
传输协议是您请求的 IP 套接字的属性。因此,您可以在 TCP 和 UDP 传输上使用相同的 url(和 ip:port)。这意味着由客户端决定打开 TCP 端口而不是 UDP 端口。
这是在您创建套接字时选择的。
sock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)
Run Code Online (Sandbox Code Playgroud)
或者
sock = socket(PF_INET, SOCK_STREAM, IPPROTO_UDP)
Run Code Online (Sandbox Code Playgroud)
现在,我不知道 ffmpeg 在哪里执行此操作,但上面的内容肯定可以为您提供如何找到答案的线索。
归档时间: |
|
查看次数: |
1621 次 |
最近记录: |