bilibili / ijkplayer

Android/iOS video player based on FFmpeg n3.4, with MediaCodec, VideoToolbox support.
GNU General Public License v2.0
32.44k stars 8.11k forks source link

真机播rtsp流 #1484

Open xy13663015647 opened 8 years ago

xy13663015647 commented 8 years ago

我用真机播rtsp流,几秒就断掉了,用虚拟器就没事。真机播rtmp就没什么问题,请问是什么问题

ryanjunhung commented 8 years ago

try issues 849

xy13663015647 commented 8 years ago

链接打不开啊,404 我的情况是真机大概播4秒,就断了,然后日志 ===== custom modules begin ===== register protocol: async register protocol: ijkhttphook register protocol: ijkinject register protocol: ijklongurl register protocol: ijksegment register protocol: ijktcphook register demuxer : ijklivehook ===== custom modules end ===== av_version_info: ff3.0--ijk0.5.0--dev0.4.5--rc11 ijkmp_set_inject_opaque(0x15ed10f00) ijkmp_set_inject_opaque()=void ijkmp_ios_set_view(glView=0x15ed11040) ijkmp_ios_set_view(glView=0x15ed11040)=void 2016-06-17 13:28:53.247 Player[1526:443631] invalidateRenderBuffer ijkmp_set_data_source(url="rtsp://192.168.1.55:2554/sd_stream1") ijkmp_set_data_source(url="rtsp://192.168.1.55:2554/sd_stream1")=0 ijkmp_prepare_async() ijkmp_prepare_async()=0 2016-06-17 13:28:53.258 Player[1526:443631] invalidateRenderBuffer 2016-06-17 13:28:53.271 Player[1526:443631] invalidateRenderBuffer 2016-06-17 13:28:53.283 Player[1526:443631] IJKSDLGLView:applicationDidBecomeActive: 0 2016-06-17 13:28:53.283 Player[1526:443631] IJKFFMoviePlayerController:applicationDidBecomeActive: 0 vtb fail!!! switch to ffmpeg decode!!!! ijkmp_get_msg: FFP_MSG_PREPARED 2016-06-17 13:28:57.696 Player[1526:443631] FFP_MSG_VIDEO_DECODER_OPEN: false 2016-06-17 13:28:57.697 Player[1526:443631] FFP_MSG_VIDEO_SIZE_CHANGED: 320, 180 2016-06-17 13:28:57.697 Player[1526:443631] FFP_MSG_SAR_CHANGED: 0, 1 2016-06-17 13:28:57.698 Player[1526:443631] FFP_MSG_PREPARED: ijkmp_get_meta_l ijkmp_get_meta_l()=void 2016-06-17 13:28:57.699 Player[1526:443631] fps in meta 30.000000 2016-06-17 13:28:57.699 Player[1526:443631] mediaIsPrepareToPlayDidChange 2016-06-17 13:28:57.700 Player[1526:443631] LoadStateDidChange: IJKMovieLoadStatePlayThroughOK: 3 2016-06-17 13:28:57.700 Player[1526:443631] IJKMPMoviePlayBackStateDidChange 1: playing SDL_VoutFFmpeg_CreateOverlay(w=320, h=180, fmt=I420(0x30323449, dp=0x170474780) Video: first frame decoded SDL_VoutFFmpeg_CreateOverlay(w=320, h=180, fmt=I420(0x30323449, dp=0x170474780) 2016-06-17 13:28:57.710 Player[1526:443631] FFP_MSG_VIDEO_SIZE_CHANGED: 320, 180 2016-06-17 13:28:57.711 Player[1526:443631] FFP_MSG_VIDEO_SIZE_CHANGED: 320, 180 SDL_VoutFFmpeg_CreateOverlay(w=320, h=180, fmt=I420(0x30323449, dp=0x170474780) 2016-06-17 13:28:57.712 Player[1526:443631] FFP_MSG_VIDEO_SIZE_CHANGED: 320, 180 2016-06-17 13:28:58.031 Player[1526:443802] OK setup GL [GLES2] Version = OpenGL ES 2.0 Apple A8X GPU - 53.13 [GLES2] Vendor = Apple Inc. [GLES2] Renderer = Apple A8X GPU [GLES2] Extensions = GL_OES_depth_texture GL_OES_depth24 GL_OES_element_index_uint GL_OES_fbo_render_mipmap GL_OES_mapbuffer GL_OES_packed_depth_stencil GL_OES_rgb8_rgba8 GL_OES_standard_derivatives GL_OES_texture_float GL_OES_texture_half_float GL_OES_texture_half_float_linear GL_OES_vertex_array_object GL_EXT_blend_minmax GL_EXT_color_buffer_half_float GL_EXT_debug_label GL_EXT_debug_marker GL_EXT_discard_framebuffer GL_EXT_draw_instanced GL_EXT_instanced_arrays GL_EXT_map_buffer_range GL_EXT_occlusion_query_boolean GL_EXT_pvrtc_sRGB GL_EXT_read_format_bgra GL_EXT_separate_shader_objects GL_EXT_shader_framebuffer_fetch GL_EXT_shader_texture_lod GL_EXT_shadow_samplers GL_EXT_sRGB GL_EXT_texture_filter_anisotropic GL_EXT_texture_rg GL_EXT_texture_storage GL_APPLE_clip_distance GL_APPLE_color_buffer_packed_float GL_APPLE_copy_texture_levels GL_APPLE_framebuffer_multisample GL_APPLE_rgb_422 GL_APPLE_sync GL_APPLE_texture_format_BGRA8888 GL_APPLE_texture_max_level GL_APPLE_texture_packed_float GL_IMG_read_format GL_IMG_texture_compression_pvrtc create render yuv420p use render yuv420p 2016-06-17 13:28:58.040 Player[1526:443802] IJKSDLGLView: renderbufferStorage fromDrawable IJK_GLES2_Renderer_TexCoords_cropRight2016-06-17 13:28:58.048 Player[1526:443631] FFP_MSG_VIDEO_RENDERING_START: aout_pause_audio(1) 2016-06-17 13:28:59.726 Player[1526:443631] FFP_MSG_BUFFERING_START: 2016-06-17 13:29:04.431 Player[1526:443631] loadStateDidChange: IJKMPMovieLoadStateStalled: 4

就没反应了

flymzero commented 8 years ago

请问这里playbackStateDidChange: IJKMPMovieFinishReasonPlaybackError: 1 这个你后来是怎么处理的 @xy13663015647

bbcallen commented 8 years ago

I don't think "rtsp://192.168.1.55:2554/sd_stream1" is an accessable URL for me.

xy13663015647 commented 8 years ago

我解决了这个问题, 修改ff_ffplay.c文件 将这段代码

static int packet_queue_get_or_buffering(FFPlayerffp, PacketQueue q, AVPacket pkt, int serial, int finished)

{

assert(finished);

while (1) {

int new_packet = packet_queue_get(q, pkt, 0, serial);

if (new_packet < 0)

return -1;

else if (new_packet == 0) {

if (q->is_buffer_indicator && !finished)

ffp_toggle_buffering(ffp, 1);

new_packet = packet_queue_get(q, pkt, 1, serial);

if (new_packet < 0)

return -1;

} if (finished == serial) {

av_free_packet(pkt);

continue;

} else

break;

} return 1;

} 替换成

static int packet_queue_get_or_buffering(FFPlayer ffp, PacketQueue q, AVPacket pkt, int serial, int finished)

{

while (1) {

int new_packet = packet_queue_get(q, pkt, 1, serial);

if (new_packet < 0)

{

new_packet = packet_queue_get(q, pkt, 0, serial);

if(new_packet < 0)

return -1;

} else if (new_packet == 0) {

if (!finished)

ffp_toggle_buffering(ffp, 1);

new_packet = packet_queue_get(q, pkt, 1, serial);

if (new_packet < 0)

return -1;

} if (finished == *serial) {

av_free_packet(pkt);

continue;

} else

break;

} return 1;

} 然后再重新编译

ghost commented 7 years ago

1、我用module-default.sh是可以播放RTSP,但是打的包快500M,太大了。 2、现在是采用修改module-lite.sh文件, export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-protocol=rtp" export COMMON_FF_CFG_FLAGS="$COMMON_FF_CFG_FLAGS --enable-demuxer=rtsp" 然后修改ff_ffplay.c文件, 修改:static int packet_queue_get_or_buffering(FFPlayer ffp, PacketQueue q, AVPacket pkt, int serial, int *finished) { assert(finished); if (!ffp->packet_buffering) return packet_queue_get(q, pkt, 1, serial);

while (1) { int new_packet = packet_queue_get(q, pkt, 0, serial); if (new_packet < 0) return -1; else if (new_packet == 0) { if (q->is_buffer_indicator && !*finished) ffp_toggle_buffering(ffp, 1); new_packet = packet_queue_get(q, pkt, 1, serial); if (new_packet < 0) return -1; }

if (*finished == *serial) {
    av_packet_unref(pkt);
    continue;
}
else
    break;

}

return 1; }

TO-----> static int packet_queue_get_or_buffering(FFPlayer ffp, PacketQueue q, AVPacket pkt, int serial, int finished)

{

while (1) {

int new_packet = packet_queue_get(q, pkt, 1, serial);

if (new_packet < 0)

{

    new_packet = packet_queue_get(q, pkt, 0, serial);

    if(new_packet < 0)

    return -1;

}
else if (new_packet == 0) {

    if (!finished)

    ffp_toggle_buffering(ffp, 1);

    new_packet = packet_queue_get(q, pkt, 1, serial);

    if (new_packet < 0)

    return -1;

}
if (finished == *serial) {

    av_free_packet(pkt);

    continue;

}
else

break;

} return 1; }

然后编译,打包播放不了,我从网上搜到的开源视频流地址:rtsp://218.204.223.237:554/live/1/66251FC11353191F/e7ooqwcfbqjoo80j.sdp

求大家指教!!!